原题链接:http://ctf.idf.cn/index.php?g=game&m=article&a=index&id=38
因为是个pe文件,我们现在PC上运行以下,如下图:
也就是说要输对flag,内部大概是字符串的对比
直接上IDA ,一路F5,于是在函数sub_4113A0中找到判断代码
前面一大串定义了一些int常量、一个char数组,一些字符
直接跳过前面的gech输出,进入判断
找到
好吧,它是通过v13来判断的,如果我们要输出“u r right“,那么v13肯定不能等于1,于是我们再往上面看
如果要v13不为1那么v38=49(对于字符1)。。。。
这样我们得到了1024}
跟格式wctf{xxxxx}有点像了,也就是说前面还有字符串
我们再找到定义
于是我们要找到v37[17]这个数组
我们看到前面还有一个for循环
接着我们找到这个byte_415768数组是这样子的
V14的值为1,&v14+1的意思就是&v14+size(int),v14的地址加上4个字节,于是我们再看到前面的定义。
加上4个字节也就是到了v15的地址上去
也就是说*(&v14+1)=v15,因为地址范围是连续的
这样我们只要按照v14-v33来去值就行了,如v37[0]=byte_415768[1]=w。。。
以此类推得到
wctf{Pe_cRackme1_1024}