x64汇编语言与逆向工程实战指南(一)

简介: x64汇编语言与逆向工程实战指南(一)

1. DIE确定程序基本信息

1.1 DIE程序与下载

  • DIE(Detect It Easy)是一个流行的逆向分析工具,主要用于检测和分析可执行文件的格式和结构。下载链接
  • 它的功能包括:
  1. 文件识别:DIE 可以识别和分析各种可执行文件的格式,如 PE(Portable Executable)、ELF(Executable and Linkable Format)、Mach-O 等。它帮助用户快速了解文件的结构和特性。


  1. 签名和特征识别:该工具内置了大量的文件签名和特征,可以识别文件的特定特征和可能的加壳保护。通过这些特征,用户可以判断文件是否经过加壳处理或是否包含某种特定的编译器标志。
  2. 可视化分析:DIE 提供了直观的用户界面,展示文件的头部信息、节信息、导入表、导出表等。用户可以通过图形界面快速浏览和理解文件的结构。


  1. 插件支持:DIE 支持插件扩展,用户可以根据需要添加自定义的插件来增强其功能。这种扩展性使得 DIE 可以适应不同的分析需求。


  1. 脚本支持: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后的程序,发现在原程序的基础上已经成功修改


目录
相关文章
|
3月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(三)
x64汇编语言与逆向工程基础指南(三)
40 1
|
3月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(二)
x64汇编语言与逆向工程基础指南(二)
61 1
|
3月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(四)
x64汇编语言与逆向工程基础指南(四)
90 0
|
3月前
|
前端开发 rax 网络协议
x64汇编语言与逆向工程基础指南(一)
x64汇编语言与逆向工程基础指南(一)
175 0
|
6月前
|
安全 NoSQL Linux
《ARM汇编与逆向工程 蓝狐卷 基础知识》
《ARM汇编与逆向工程 蓝狐卷 基础知识》
91 0
|
存储 测试技术
【计算机组成原理】第二章单元测试
【计算机组成原理】第二章单元测试
109 0
|
存储 测试技术
【计算机组成原理】第一章单元测试
【计算机组成原理】第一章单元测试
101 0
|
存储 测试技术
【计算机组成原理】第五章单元测试
【计算机组成原理】第五章单元测试
173 0
|
缓存 前端开发 Java
汇编语言简介
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
|
自然语言处理 C++
编译原理 语法分析实验/课程设计(C++实现 附源程序下载)
编译原理 语法分析实验/课程设计(C++实现 附源程序下载)
编译原理 语法分析实验/课程设计(C++实现 附源程序下载)