本帖最后由 hwjoy009 于 2021-3-2 20:59 编辑
解题领红包之二 Windows 初级题
此题是一道PE逆向题,本文按常规思路来解。
打开发现提示输入密码。
1. 查壳
拖入查壳工具 Exeinfo PE
发现有UPX压缩壳,32位的PE文件
2. 手动脱壳
2.1 找OEP
使用x32dbg软件打开
断在入口点 pushad 上
自然想到去找 popad
搜索代码找到 popad,发下下面有一个大跳转 jmp
单步步过,找到 OEP
2.2 脱壳
使用x32dbg自带的插件 Scylla
Dump -> Fix Dump
得到CrackMe_dump_SCY.exe,但是发现打不开
2.3 修复
使用CFF Explorer 打开
勾选 Relocation info stripped from file
保存替换原程序
成功脱壳
3. 静态分析
使用IDA Pro (32-bit)打开脱壳后的文件
查找字符串找到 "Success" 字符串
分析代码可得,大致思路是输入的字符串和另一个字符串比较相等,输出 Success
4. 动态调试
使用x32dbg软件打开脱壳后的文件
查找字符串,发现有两个地方打印了"Error, please try again"
在字符串前的跳转语句分别打上软件断点
程序窗口内随便输入字符串进行调试,断点断在某一个跳转
修改zf寄存器的值跳过失败的逻辑
继续单步跟踪,发现调用了某两个函数之后,堆栈窗口打印出了
0019FEAC 006993C0 "2021HappyNewYear52PoJie"
猜测flag是此(并且之前的静态分析可得比较的字符串长度为23)
(其实不用脱壳也能跟到这些)
输入测试,正确
|