考核内容
- 逆向分析PE程序,获取Flag
环境与工具
- Windows 7
- IDA Pro
- x32dbg
- Detect It Easy
第一题分析过程
- Detect It Easy确认
SoEasy.exe
为32位PE程序文件
- 运行程序,可以看到有特种字符串
- IDA Pro载入目标程序
SoEasy.exe
,可以看到在特征字符串。
- 在汇编窗口中按F5生成伪代码:
Str1
为输入字符串,Str2
为解密后的Flag,通过调用stricmp()
比较两个字符串是否相同。此时,我们有两种方法获取Flag:其一是通过获取数据编写Python解密脚本,运行后可以获取Flag;其二是使用x32dbg动态调试获取Flag。
- x32dbgo载入目标程序
SoEasy.exe
,并运行到该模块,然后鼠标右键依次选择下列菜单命令。
- 搜索到特征字符串。
- 找到解密部分,设置软件断点如下。
- 根据分析结果,在解密循环代码后一行设置软件断点,同时,选择内存窗口,按Ctrl+G弹出窗口填写
ebp-0x6c(初始eax=0)
点击“确定”按钮,再按F9运行程序即可获取Flag。
第二题分析过程
- Detect It Easy确认
re1.exe
为32位PE程序文件
- 运行程序,可以看到有特种字符串
- IDA Pro载入目标程序
re1.exe
,可以看到在特征字符串。
- 在汇编窗口中按F5生成伪代码:重命名
printf()
函数,sub_401000()
是要关注的关键算法代码
- x32dbgo载入目标程序
re1.exe
,定位到关键代码处并在0x401093地址处设置软件断点,按F9运行输入“53 2”两个整数并按Enter键,程序运行如下界面。
- 不要输入13个整数,直接修改
cmp
指令的参数ESI
寄存器即可。
- 修改0x401170地址处的汇编指令。
- 在0x401198地址处设置软件断点,按F9运行,即可获得Flag。