首页
社区
课程
招聘
[分享]ctf2017_Fpc.exe解析
2017-10-28 11:57 3343

[分享]ctf2017_Fpc.exe解析

2017-10-28 11:57
3343
在通过对ctf2017_Fpc.exe调试和逆向初步得出密码的后三位会是11A,然后输入后三位为11A的十五位数,在输入之后,开始单步跟,会发现主要的密码代码是被花指令加密了的,经过去除花指令,可以得到密码的字符串各个位之间的关系,如一个15位密码:1234 2222 3333 11A,那么此时可以将前四位在内存中内容转化为一个整形数据,x = 0x34333231(与字符串倒序),中间四位为y =  0x32323232, 后四位为 z =  0x33333333,从去除花指令的解析代码中可看出,x, y, z之间满足如下关系:
((x - y)<<2) )+ x + z = 0xEAF917E2,  ((x - y)<<1)) + x  - y + z = 0xE8F508C8,  ((x - y)<<1) )+ x  - y + x - z = 0xC0A3C68 时即为所求的密码,x、y、z的四位分别是由可输入的字符的ASCII码组成,因此它们的最高字节的最大数是0x7e,最小数是0x31,所以 x - y 的最高位的最大值为5e,左移一位肯定是没溢出的,当然如果是或者为 -5e,高位本身就是1,左移1位和2位都不影响值。以上三个方程组将移位运算拆开,得4*(x - y) + x + z =  0xEAF917E2,    2 * (x - y)+ x  - y + z = 0xE8F508C8,  2 * (x - y) + x  - y + x - z = 0xC0A3C68,接着个方程组的技巧是对右边的大数不可进行乘运算,和直接加运算,在经过减或除将数化小,确保加不再溢出时,再加,这样能确保程序运行结果正确。最后解得x = 0x7473754a,y = 0x726f6630, z = 0x6e756630,密码中顺序于之相反,查找ASCII表,密码的前十二位的4a757374 30666f72 3066756e,最后转成字符,即为Just0for0fun,加上最后三位11A,密码为 Just0for0fun11A。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞1
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回