-
-
[旧帖] [原创]学习缓冲区溢出的时候的一个小问题 0.00雪花
-
发表于: 2009-6-16 21:28 2836
-
好久没上论坛学习了,决定重新开始.
从failwest的教程开始看起.看到第五篇的时候,怎么都做不成功,研究如下:
由于我算出来的messageboxA的地址是77d5050b,
0b的asc码是CR,结果fscanf接受输入的时候,给截断了.结果老溢出不成功.
因此建议新手可以试下用fread读取字符,将原来的代码改为如下,溢出成功......
#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
int authenticated;
char buffer[44];
authenticated=strcmp(password,PASSWORD);
strcpy(buffer,password);//over flowed here!
return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
FILE * fp;
LoadLibrary("user32.dll");//prepare for messagebox
if(!(fp=fopen("password.txt","rwb+")))
{
exit(0);
}
//fscanf(fp,"%s",password);
fread(password,1,56,fp);
valid_flag = verify_password(password);
if(valid_flag)
{
printf("incorrect password!\n");
}
else
{
printf("Congratulation! You have passed the verification!\n");
}
fclose(fp);
}
从failwest的教程开始看起.看到第五篇的时候,怎么都做不成功,研究如下:
由于我算出来的messageboxA的地址是77d5050b,
0b的asc码是CR,结果fscanf接受输入的时候,给截断了.结果老溢出不成功.
因此建议新手可以试下用fread读取字符,将原来的代码改为如下,溢出成功......
#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password (char *password)
{
int authenticated;
char buffer[44];
authenticated=strcmp(password,PASSWORD);
strcpy(buffer,password);//over flowed here!
return authenticated;
}
main()
{
int valid_flag=0;
char password[1024];
FILE * fp;
LoadLibrary("user32.dll");//prepare for messagebox
if(!(fp=fopen("password.txt","rwb+")))
{
exit(0);
}
//fscanf(fp,"%s",password);
fread(password,1,56,fp);
valid_flag = verify_password(password);
if(valid_flag)
{
printf("incorrect password!\n");
}
else
{
printf("Congratulation! You have passed the verification!\n");
}
fclose(fp);
}
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]论坛老人求助--逆向半天学不会,有疑惑 4668
- [推荐]container_of 宏 5902
- [原创]学习缓冲区溢出的时候的一个小问题 2837
- [求助].net破解请教 4484
- [求助][求助]程序正常编译,但不能f5调试 4382
看原图
赞赏
雪币:
留言: