1. DIE确定程序基本信息
1.1 DIE程序与下载
- 文件识别:DIE 可以识别和分析各种可执行文件的格式,如 PE(Portable Executable)、ELF(Executable and Linkable Format)、Mach-O 等。它帮助用户快速了解文件的结构和特性。
- 签名和特征识别:该工具内置了大量的文件签名和特征,可以识别文件的特定特征和可能的加壳保护。通过这些特征,用户可以判断文件是否经过加壳处理或是否包含某种特定的编译器标志。
- 可视化分析:DIE 提供了直观的用户界面,展示文件的头部信息、节信息、导入表、导出表等。用户可以通过图形界面快速浏览和理解文件的结构。
- 插件支持:DIE 支持插件扩展,用户可以根据需要添加自定义的插件来增强其功能。这种扩展性使得 DIE 可以适应不同的分析需求。
- 脚本支持:DIE 还支持通过脚本进行自动化分析,用户可以编写脚本来批量处理文件,提取所需的信息。
1.2 分析demo的架构
下载DIE完成之后将目标程序放入即可得到如下图信息,目标文件是windows下的amd64架构
可执行程序。
因此在进行动态调试时候选择 X64dbg
进行调试分析。
2. x64dbg调试获取密码
2.1 功能初探
- 首先我们运行下载的demo,程序实现了简单的密码验证功能。随便输入一个密码后得到输出的报错信息
- 接着程序会在停止一段时间后自动退出,并且给出的信息也提示需要反汇编查看main函数的功能。
2.2 调试分析
- 将demo程序放入x64dbg进行调试分析,锁定程序密码判断位置的方法有两个。
- 思路一:定位输出字符串后向前找到跳转的判断指令
- 在上面测试程序功能的时候,当输入错误的密码,得到报错信息。由于该字符串直接出现在用户交互界面,因此可以确定属于用户功能模块,可以利用x64dbg的搜索字符串功能查得具体地址。
- 接着双击即可进入该字符串所在汇编指令区域,通过汇编指令地址左侧的虚箭头即可看到跳转源地址。同时发现该地址上面有一个 cmp eax,4D2指令和一个”%d“标识符 。
通过分析和试验不难看出是使用了 %d 来接收输入的密码。
- 由于密码正确性判断一定是在用户输入之后的,在 cmp 指令处下一个断点,可以方便观察输入数据与rax内容的关系。
- 因此,将 16进制 0x4D2 转换为10进制即可得到正确的密码【1234】。
- 思路二:查看函数的流程图定位跳转点
- 在搜索得到输出 wrong… 等字符串后可以直接定位到程序主模块函数,此时可以直接查看结构图表锁定跳转点。
- 如下图,选中区域为函数起末汇编代码,点击首行汇编代码
push rbp
右键查看流程图
2.3 使用获得的密码重新运行程序
3. patch程序绕过密码
jne ==> je
- 在上面程序跳转点将 cmp 指令比较之后 jne 改成 je 即可极大提高成功概率
【只要输入的数据与最初设定不同即可绕过】。
修改后如下图:
- 接着可以直接对程序进行修改应用补丁,导出修改后的.exe程序
- 最后执行刚刚patch后的程序,发现在原程序的基础上已经成功修改