解题报告
第一题:以任意一种方法对“1.exe”手动脱壳。
1、将目标程序“1.exe”利用分析工具OllyDbg打开,如下图所示:
2、单步F8,此时观察到仅ESP为红色,故采用ESP定律法脱壳。右键ESP,选择“HW break [ESP]”,如下图所示:
3、然后按F9快捷键,运行程序,来到如下页面:
4、按F8单步两次来到`retn`,如下图所示:
5、然后再次单步运行,跳转到新位置,好像跟刚才一样,但是左侧的地址并不一样,继续采用ESP定律,如下图所示:
6、再次执行重复刚才的操作,多次重复后成功来到OEP,如下图所示:
7、此时按“Ctrl + A”,然后脱壳,如下图所示:
8、点击脱壳,如下图所示:
9、打开脱壳后的程序,会有一个报错,不能关,否则程序就不会运行。然后用修复导入表,最终得到脱壳并修复了导入表的EXE文件。如下图所示:
10、然后依次点击,如下图所示:
11、得到脱壳后的程序,如下图所示:
12、结果如下图所示:
第二题:输入username为20241217,使用逆向分析工具分析“2.exe”,找到正确的password。
1、程序静态分析准备
将目标文件“2.exe”导入IDA Pro 32位版本,定位并打开main函数,如下图所示:
2、初步代码分析
(1)利用快捷键F5查看函数伪代码,如下图所示:
(2)分析定位到关键函数`sub_401005`,如下图所示:
3、输入处理分析
(1)跟进`sub_401005`函数,如下图所示:
(2)确认该函数负责处理username和password的输入逻辑,如下图所示:
4、验证逻辑分析
(1)继续跟进另外一个函数,如下图所示:
(2)此处应该就是对username和password做校验的地方,如下图所示:
(3)从之前的分析可以得到:a1是username,a2是password。目前a2和a1的值未知,但是等号两边的另外的变量是已经定义好的。
5、关键变量分析
(1)通过双击查看相关变量定义,如下图所示;
(2)发现两个变量定义在一起,如下图所示:
(3)再回头看,如下图所示,可知a1的值是“20241217”,a2的值等于两个变量异或的结果:
6、密码求解
编写Python代码计算异或结果,得到a2的值为“c23cb30d”,如下图所示:
7、验证结果
启动“2.exe”程序输入测试,验证通过。如下图所示:
所以:
username为20241217
password 为c23cb30d