题意

输入一些数据使bomb被defuse(其实就是逆向。。。)

参考资料:

https://junyu33.github.io/2021/12/11/security03.html

解答

先放结果

先IDA打开bomb,然后分(mang)析(cai)代码。。。

Phase1

嗯。。就是直接输入Public speaking is very easy.就行了。。(Public speaking其实并不easy。。。)

Phase2

嗯。。输入1到6的阶乘就行了

Phase3

大概就是根据v3的case输入v5,而且v2要等于v4。我输入了1 b 214

(然而我并不知道为什么明明在case1里已经return result了却还会执行后面的if (v2!=v4)……………)

(其实我觉得反汇编出来的代码可能有问题。。?case里应该是break而不是return)

Phase4

嗯。。斐波那契数列而已。。输入9就行了

不过要进入隐藏关卡,还要输入austinpowers

Phase5

我猜_BYTE就是char的意思。。。

也就是只要array_123[a1[i]&0xF]组成的字符串是giants就行了。

然后去内存中看array_123是什么鬼

也就是a1[i]&0xF=[15,0,5,11,13,1],随便构造一下就行了。比如:opukmq

Phase6

这是最难的。。。

_DWORD就是int。。。

一开始读入6个数。。。然后检查是否是一个排列。。。

然后就看不懂了。。。

看了junyu33的博客才知道,这里的node1是一个链表,v4[2]里存的是下一个位置的地址

v13[k]存的是链表里的第v14[k]个数。

v6v8是在构造一个关于v13的新链表

最后是在检查新链表是不是单调递减。

然后我们在内存中看一下链表长啥样

嗯。。v14相当于构造一个排序后的索引,也就是4 2 6 3 1 5

secret_phase

嗯。。就是从n1这个地址开始,走[2]就乘2加1,走[1]只乘2,相等就返回0

而且最后要返回7

嗯。。有了Phase6的经验,这个就很简单了。直接从n1开始手模。。

发现答案是3E9,也就是1001。

然后就大功告成!

总结:

逆向好有趣啊啊啊啊啊啊啊啊啊啊啊啊啊

但其实逆向出来的代码可读性一般,有很多根本看不懂的操作。。。。

还是要靠猜以及积累经验才能做好逆向。

Leave a Comment

您的电子邮箱地址不会被公开。