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


目录
相关文章
|
监控 安全 数据可视化
情报搜集神器:Spiderfoot 保姆级教程
情报搜集神器:Spiderfoot 保姆级教程
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(二)
x64汇编语言与逆向工程基础指南(二)
551 1
|
前端开发 rax 网络协议
x64汇编语言与逆向工程基础指南(一)
x64汇编语言与逆向工程基础指南(一)
1063 0
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(三)
x64汇编语言与逆向工程基础指南(三)
603 1
|
存储 编译器 C语言
【C语言】C语言的变量和声明系统性讲解
在C语言中,声明和定义是两个关键概念,分别用于告知编译器变量或函数的存在(声明)和实际创建及分配内存(定义)。声明可以多次出现,而定义只能有一次。声明通常位于头文件中,定义则在源文件中。通过合理组织头文件和源文件,可以提高代码的模块化和可维护性。示例包括全局变量、局部变量、函数、结构体、联合体、数组、字符串、枚举和指针的声明与定义。
453 12
|
Kubernetes 负载均衡 调度
使用kubeadm快速安装Kubernetes v1.28.2
使用kubeadm快速安装Kubernetes v1.28.2
2999 0
|
SQL 关系型数据库 MySQL
sqlmap进阶使用
sqlmap进阶使用
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
627 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(四)
x64汇编语言与逆向工程基础指南(四)
431 0
|
存储 缓存 程序员
c语言的存储类型-存储类
本文详细介绍了C语言中的存储类型及其分类,包括基本类型(如整型、浮点型)和复合类型(如数组、结构体)。重点讲解了不同存储类别(`auto`、`static`、`register`、`extern`、`typedef`、`volatile`、`const`)的特点及应用场景,并展示了C11/C99引入的新关键字(如`_Alignas`、`_Atomic`等)。通过示例代码解释了每个存储类别的具体用法,帮助读者更好地理解和运用这些概念。