Rev③
一道简单的Reverse题,由蓝鲸安全平台提供,相关的知识点已经都在之前的文章中介绍过了,所以就当做一次小的练习题。
题目:转子检查,达到足够分数得到flag。地址:https://pan.baidu.com/s/1eqHYMTIpfRR2q3GtUfJCWQ
知识点:程序分析,IDA动态调试
目录
题目解析
直接运行程序,要求我们输入密码。

检测程序为ELF64位可执行程序。

方法一(IDA静态分析)
程序内容很简单,要求输入密码后经过函数sub_40074D检查:

进入到此函数,发现该函数定义了两个数组进行判断,v9[]能够在该函数中找到;

因为v5影响v4的值,v4影响着v6的值,而最后判断是v6,所以另一个数组应该是v5。
v5 = qword_601080,通过交叉引用发现,该值在main函数中进行了动态分配后进行的复制也就是传递个v5:

在10次的循环中,每次复值4位,第一位m,递增赋值,类似凯撒密码的ROT循环产生了后13位的英文字母,结果就是[m,n,o,p,q,r,s,t,u,v,w,x,y,z]
所以回到检测函数,python还原检查代码为:
1 | def check(password): |
简而言之就是利用动态生成的v5序列作为字典,先用密码在字典中寻找序号,最终比对v9的序号和密码的序号是否一致。
最终简单解密为,直接用v9当做序号去输出v6的内容:
1 | v9 = [5,2,7,2,5,6] |
答案是rotors
方法二(IDA动态调试)
IDA动态调试的方法就不具体说了,之前有介绍过,当我们利用IDA调试的时候遇到反调问题,程序会进入之个死循环当中。

然后暂停程序,可以直接设置EIP指向main函数后再继续运行,这样跳过反调代码。然后在关键的sub_40074D函数中设置了四个断点进行分析,单步调试,如下图所示:

程序的整个流程是①②③④这个顺序进行的,但我们分析程序形成的思路顺序是①④③②。
总结
题目简单,对之前的知识进行了回顾练习,提高程序的分析能力。