首页
社区
课程
招聘
[原创]2017CTF秋季赛 第二题 ctf2017_Fpc 解题报告
发表于: 2017-10-27 22:48 3567

[原创]2017CTF秋季赛 第二题 ctf2017_Fpc 解题报告

2017-10-27 22:48
3567

题目乍看起来是这个流程:

其实这是作者的坑,此题是无解的方程

当我测试输入字符串个数的时候,输入 12 个字符时,程序又从头执行了

原因是:12 个字符后的 '\0' 覆盖了返回地址,使其变成 0x401000 从头开始了

我想:既然程序有判断 [0x41B034] 这个地方的值来作为成功标志,是不是能用 线索1 修改到别的流程上更改这个地方的值呢

IDA bytes 搜索 34 b0 41 00 (0x41B034 地址,查看有没有指令有关)

搜索结果

IDA 做微量指令修复时,要关掉这2个地方减少 IDA 智能分析的影响

选项

修复第一处指令,发现这个混淆经过了很多跳转

修复结果1

顺着来源跳转向上一路修复,找到根源

根源

因为这里没有来源跳转,并且 add esp, 0FFFFFFF0h 非常重要,后文的调试中,大家会发现,与 pop eax 组合,能取出输出的 12 个字符

综合以上,剩下的就要调试了

输入 11113333777711A,前面 12个字符取这个,调试时运算比较明显,最后的 11A\0 就是地址 0x00413131 “根源”

很容易调试出如下方程:

解得:

转换成字符串后为题解

 
 
 
 

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

收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 3003
活跃值: (479)
能力值: ( LV15,RANK:1395 )
在线值:
发帖
回帖
粉丝
2
2017-10-29 22:21
0
雪    币: 37
活跃值: (20)
能力值: ( LV4,RANK:41 )
在线值:
发帖
回帖
粉丝
3
原因是:12 个字符后的 '\0' 覆盖了返回地址,使其变成 0x401000 从头开始了
作为新手,可能是write up没表达清楚,看的我一头雾水,这里注释一下,方便新手阅读:
这里'\0'只占据了一个字节,原本的返回地址应该是0x40101C,'\0'只是覆盖了返回地址的最后一个字节,覆盖之后为0x401000,所以从头开始了

2017-11-6 22:36
0
游客
登录 | 注册 方可回帖
返回
//