0x01简单的入门题目
题目地址链接:http://pan.baidu.com/s/1skMTE3b 密码:pq1m
这里有writeup:http://blog.csdn.net/hhhparty/article/details/51762234
http://blog.csdn.net/calmegm/article/details/49009867
感谢两位博主的指导
打开程序后需要输入flag,显然我们是不知道的,随便输个就是错,太正常了。。。。。
用IDA打开,左侧很多函数,一个一个的F5,找到sub_4113A0这个函数,发现里面有判断输入的代码,
当v3为假的时候会输入right,有两个判断的地方,先看简单的,就是当v28!=49这几个,转换ascii码之后是1024},先留着看第二个判断,发现是一个for循环,当v27数组里的所有元素等于byte_415768[*(&v4+i)]的时候v3为假,&v4表示v4的地址,那么就是从v4的地址一直到v4+17的地址.
而这里的定义显然不是我们要的结果,于是我们回到未反编译的代码里找到byte_415768这个地址,
看到这里有个注释;byte_415768[],创建了一个数组,下一行;DATA XREF:sub_4113A0+1E........打不出来了。。。。
就是说sub_4113A0+1E.....引用了byte_415768这个数组变量,地址为415769这里是存放的415768的元素(我理解为sub_4113A0对应的地址加上偏移的1E3r就是加了个1,也就是415769这个地址),数组名字是aWfx......就是db之前的那一串,db后面是数值:wfxc{gdv}fwfctslydRddoepsckaNDMSRITPNsmr1_=2cdsef66246087138',0 0表示结束,接下来就容易多了byte_415768[*(&v4+i)],i从0加到17,对应的是v4 v5 v6 ......v21,对应的值是1 4 14 。。。。。,放到415769里对应的就是w c t.......(我也不理解为啥数组不是从0开始标记,求大师傅们教),最后两个flag拼接起来就完整了