首页
社区
课程
招聘
[原创]第二题 - TSRC 2017CTF秋季赛 
2017-10-28 15:59 3733

[原创]第二题 - TSRC 2017CTF秋季赛 

2017-10-28 15:59
3733
前言:本人小白,做出此题,其实还是有些迷糊,没有完全清楚,欢迎各位大侠指正。(哪位大佬指点下啥叫fpc..TAT)

思路:
1.首先测试软件,没有发现啥特别的地方....

2.打开IDA看代码逻辑,天真的以为很简单:
两个方程组:


一开始以为逻辑很简单,输入8个字符,就两组方程,但是其实只有两个变量v0和v1,经过测试发现,这个两组方程是不可能同时成立的,在这上面我花费了巨量的时间,去找,去遍历,还考虑溢出,正负还有补码之类的。其实思路错了,一开始没有常规的字符串长度校验,直接取了前8个字符,就应该考虑栈溢出(好吧,其实,在一开始直接尝试输入很多1会报错,就该考虑栈溢出的问题。我是老实的新人,学到了,下次就会了)

正确的思路:
3. 先看一下输入函数sub_401050的栈:    测试输入‘12345678’

可以看到esp是0x18FF34这个地址,输入从0x18FF3C处写入,输入函数返回时,进行add esp,14h操作释放栈空间,esp(0x18FF48)指向返回地址(即main函数中,call sub_401090指令地址),那我们的栈溢出则应该写入12个字符后面加上想要跳转的地址覆盖掉原始的返回地址。
4. 接下来看源码,找想要跳转的地址,发现在识别的函数后面有一坨IDA未识别的代码,很可疑。

尝试跳转到0x413131地址,即输入'123456789abc11A':

发现0x413131地址,成功解析出指令,但是跟几步发现到处都是jo,jno跳转,好像是花指令,上网查说去除花指令要自己看逻辑找到跳出点,然后把之前无效的跳转全部nop掉,然后我跟到跳出点发现直接就跳到了错误分支。说明程序的验证是包含在这段乱糟糟的跳转中的。(还请大佬指教怎么处理花指令)

5. 我采取的措施是跟踪代码,忽视无关指令(比如push,pop和jmp家族),记录mov,sub,shl等操作寄存器且影响跳转的指令(笨办法)。几次跟踪下来发现,寄存器eax经过一系列处理后会跟一系列常量进行比较,然后jz跳转到正确的路线上来,最后总结下来,就是每到sub eax, 常量,后面就会有jz指令或者其他正确的跳转指令。说明要让eax经过处理后等于指定常量。下面列出所有相关指令:

上图省略了1) 把运算开始前输入字符放到三个寄存器的过程,也省略了2) 最后通过寄存器和某些常量抑或得到最终的跳转地址的过程。仅仅写了运算检验过程。
下面解释一下运算开始时每个寄存器中存的值,注意:      假设输入为“123456789abc11A”,则此时eax = '4321', ebx = '8765', ecx = eax, edx = ‘cba9’,ecx保存最原始的eax值,因为eax一直参与运算。所以,最后得到的各寄存器的值和实际输入字符顺序是反的。
假设运算开始时,eax = a, ebx = b, ecx =eax, edx = d,就可以得到三个方程:

接下来就容易了,②式 - ③式得 d的值,①式-②式得(a-b)的值,都带入②得到a的值,从而得b的值,最后按输入字符顺序调整就行了。(其实这里有问题,式子能不能直接加减,请大佬解惑
最后结果:a = 0x7473754A, b = 0x726F6630, d = 0x6E756630
                flag:Just0for0fun11A



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞1
打赏
分享
最新回复 (4)
雪    币: 256
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ming、 2017-10-29 16:51
2
0
这里的式子相加减,是对0x100000000取过模的
雪    币: 4
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
弟子规 2018-3-18 23:13
3
0
ming、 这里的式子相加减,是对0x100000000取过模的
言简意赅,非常要害,我还在想怎么表达,真是拨云见日啊
雪    币: 4
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
弟子规 2018-3-18 23:15
4
0
@题主,fpc是出题者的id好像。。。。
雪    币: 256
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ming、 2018-3-21 09:20
5
0
弟子规 言简意赅,非常要害,我还在想怎么表达,真是拨云见日啊
取完模就是同余,可以相加减,在数学意义上有多组解,可用的只有最小正解
游客
登录 | 注册 方可回帖
返回