-
-
[分享]第二题 ctf2017_Fpc 的解题思路
-
发表于: 2017-10-28 15:07 2796
-
先前走了很多的弯路,从下面先看了一下大致的结构。发现 sub_413D42 ()函数主要是打印的。没有细看里边的东西。导致后来解了二元一次方程。
后来,发现解出来的结果的ASCII码都不对,不是字母和数字的组合。
主程序是下面这么个结构:
在解方程失败后,返回来看。发现程序有112K, 实际逆向出来的函数很少。我如果实现的话,只要12K就够了。肯定有玄机。继续,
看到有人说可能和花指令有关。学习了一下花指令和花指令的识别。以前没接触过花指令。
常用的工具是IDA,会不会有没有识别的指令。然后发现了这里:
用ollydbug载入后,执行删除命令后,看到了花指令。忽略花指令,把正确的指令整理出来。如下:
(A - B) << 2 + A + C = 0xEAF917E2
(A - B) << 1 + (A - B) + C = 0xE8F508C8
(A - B) << 1 + (A - B) - C = 0xC0A3C68
但是发现指令时无法跑到花指令这里的,联想到溢出。看了一下花指令开始的地址:0x413131. 如果要实现跳转的话,
对应的字符串是11A。
输入的字符串是123456789abc11A。 可以实现调试。
解上面整理过的方程式:
(A - B) << 2 + A + C = 0xEAF917E2
(A - B) << 1 + (A - B) + C = 0xE8F508C8
(A - B) << 1 + (A - B) - C = 0xC0A3C68
A = 0x7473754A //tsuJ
B = 0x726f6630 //rof0
C = 0x6E756630 //nuf0
经过大小端转换,变成字符串为Just0for0fun,跳转地址11A,
经过测试,填写Just0for0fun11A成功。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
谁下载
看原图
赞赏
雪币:
留言: