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后的程序,发现在原程序的基础上已经成功修改


目录
相关文章
|
7月前
|
C语言
嵌入式C语言中的工具代码助你一臂之力
嵌入式C语言中的工具代码助你一臂之力
55 0
|
2月前
|
安全 API 数据安全/隐私保护
史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录(一)
欢迎访问我的原站!本文详细介绍了程序脱壳技术,包括壳的定义、作用、执行过程、OEP(原始入口点)的概念及查找方法。文章通过多个实例,逐步演示了如何使用OD(OllyDbg)等工具进行脱壳操作,涵盖了压缩壳、加密壳等多种类型的壳。内容详尽,适合逆向工程初学者深入学习。[点击查看原文](https://www.oisec.cn/index.php/archives/520/)
57 0
|
2月前
|
存储 监控 API
史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录(二)
本文详细介绍了软件保护技术中的程序脱壳过程,包括IAT(导入地址表)的重建、OD(OllyDbg)跟踪输入表、HOOK-API技术以及FSG、UPX和WinUpacx等常见压缩壳的加脱壳方法。文章通过具体实例和详细步骤,帮助读者理解并掌握逆向工程的基本技巧。[原文链接](https://developer.aliyun.com/article/1618653)
64 0
|
4月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(二)
x64汇编语言与逆向工程基础指南(二)
85 1
|
4月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(三)
x64汇编语言与逆向工程基础指南(三)
74 1
|
4月前
|
前端开发 rax 网络协议
x64汇编语言与逆向工程基础指南(一)
x64汇编语言与逆向工程基础指南(一)
275 0
|
4月前
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(四)
x64汇编语言与逆向工程基础指南(四)
138 0
|
5月前
|
传感器 安全 Java
汇编语言基础教程
汇编语言基础教程
|
7月前
|
安全 NoSQL Linux
《ARM汇编与逆向工程 蓝狐卷 基础知识》
《ARM汇编与逆向工程 蓝狐卷 基础知识》
111 0
|
缓存 前端开发 Java
汇编语言简介
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。