从一个reverse-box到python脚本化调试
攻防世界 reverse-box 题目
题目分析
题目条件
Description:
$ ./reverse_box ${FLAG}
95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
题目flag格式:TWCTF{…}
分析
main函数如下:
运行程序时输入的参数,会和一个数值相加,转化成十六进制,然后打印出来,
我们简单运行下如下:
另外汇编是:
这个位置,是一个查表的过程,函数sub_804858D
是一个建立表的过程,
重点在于:
后部分都是设置建立表,但是这个生成表的种子是随机的,也就是我们的表是不固定的。
思路
题目就是对输入进行查表,然后打印出来,并且给出了正确flag查表对应的值,但是这个表是随机生成的,我们需要得到正确的一个表。
方案应该是只能爆破,并且rand()
函数调用的返回值,限制为int8
即0xff大小,最大为0xff,爆破次数不算太大,直接爆破出来正确的表,就结束了。
这时候我们面对一个问题,这个怎么方便的进行爆破?
下面我们写一下关于爆破的方法,
其中wp有的直接爆破出正确的,有的直接爆破出所有的再交python得到最后工作,这都是差不多的, 我们只讨论爆破的实现。
下面是我搜到一些wp中的解法:
- gdb 脚本–githubgdb脚本-csdn
- [gdb - python 脚本](https://github.com/TeamContagion/CTF-Write-Ups/tree/master/TokyoWesterns-2016/Reverse Box))
- idc脚本
- uncorn 脚本
- python 重构这个函数然后爆破
- [ida-python脚本] (本文)
其中大部分方法都可以看到链接。一个ida python的手段是我们的重点, 也恰好是在