roger 发表于 2019-6-11 09:15:01

2019年6月打卡第二周_八十一难wp

0x01.先运行一下程序,发现运行发生错误,但是都我们解题没有太大影响

0x02.用exeinfope查看程序是多少位的和加没加壳


可以看出程序是32位的,并且是Microsoft Visual C++编译的,同时没有加壳
0x03.用静态分析神器 IDA Pro进行反编译


首先我们查找主函数 main,因为,所有程序都是从主函数main开始运行的,所以,通过main能
够很好的分析出程序的大概逻辑,然后,跟进main_0,通过双击函数名即可进行跟进

这就是整个main函数的运算逻辑,因为结尾是return。
然后对main进行分析.

可以看到程序先执行的是一个xor运算,所以,我们第一想法是这可能跟逆运算有关系
我们都知道的逆运算:
+的逆运算是-
- 的逆运算是+
^的逆运算是^
* 的逆运算是/


然后继续进行分析

发现一个有意思的函数FindWindow,发现windows窗口,猜想一下,是不是发现ida.exe的窗口
会给我们产生什么影响,有可能。但是先不管,继续分析先
发现又是一个xor运算,这里同之前的一样
继续分析

发现了三个特殊名字的函数,这里讲解一下,当ida不能根据原有函数进行显示时,会用ida自己命
名方式,即通过sub_函数入口地址的方式来命名函数
然后,我们对这三个函数分别进行跟进


在这里我们又发现了一个同样的xor运算,但是我们在前面也发现了比较有意思的信息,
indebug,这里是不是对我们最后运算产生影响呢?我们先不管,如果最后结果有问题,我们再回
来继续思考。
跟进第二个函数

这里我们同样发现了同样的xor运算,处理方式和前面的一样。在前面我们发现了特殊的信息,
HIDWORD,MEMORY[],猜测这可能和内存高低位有关系,但是和后面的运算没大关系,所以我
们也可以先不管,有问题在
回来分析
跟进第三个函数

看到了有意思的信息,The last step,666,猜测可能最后的输出就是正确的flag了
下面我们同样发现了同样的xor运算,处理方式同样
大概的逻辑应该就是对指定的字符串进行五次xor运算,然后进行拼接得到最后的flag.
先按照这种逻辑进行写EXP.
0x04.写EXP


这里运用了数组来存储十六进制的字符,然后通过循环,对数组内的值进行^运算,然后,将运算
后的十六进制数转换为字符,进行拼接
涉及的python函数:
range():可以创建一个整数列表,通过for来循环遍历数组内的值
chr():将十六进制的数转换为字符
最后通过+=运算符来进行拼接字符,得到最后的flag
0x05.运行后得到最后的flag:

**** Hidden Message *****

极速代码 发表于 2021-12-8 00:35:54

感谢分享,我会认真学习的!

zyasx123 发表于 2022-3-7 15:25:02


感谢分享,我会认真学习的!
页: [1]
查看完整版本: 2019年6月打卡第二周_八十一难wp