逆向工具系列 | x64dbg使用方法和技巧

admin 2024年10月10日00:11:10评论199 views字数 2343阅读7分48秒阅读模式

简介

官网: https://x64dbg.com/ 

github地址: https://github.com/x64dbg/x64dbg

更新频繁的现代化windows用户态调试工具,支持调试32位、64位程序,开源,因为更新太频繁,文档更新不太跟得上,但旧文档也足够用了。 

文档地址: https://help.x64dbg.com/en/latest/

搭配各种插件用起来很不错,还可以和反编译工具共享符号,更方便调试。 

插件集合: https://github.com/x64dbg/x64dbg/wiki/Plugins

OllyDbg是老牌的调试工具,但对64位程序的调试支持不好,而且已经停止维护,缺少很多特性,所以这里详细介绍x64dbg的使用方法和技巧。

使用

界面组成

逆向工具系列 | x64dbg使用方法和技巧

常用快捷键

F2 最常用的软件断点 

F4 运行到当前选中的地址

F7 步入,即单步调试,当指令为调用函数时,进入函数 

F8 步过,即单步调试,当指令为调用函数时,不进入函数,“过”意思类似大禹的三过家门而不入 

F9 运行,直到程序执行完或遇到断点 

Ctrl + G 跳转到指定地址

逆向工具系列 | x64dbg使用方法和技巧

逆向工具系列 | x64dbg使用方法和技巧

使用思路

一般都配合反编译工具进行调试,使用反编译工具分析,确定要在哪儿下什么类型的断点,要怎么运行,要观察什么数据,要保存什么数据。

一个例子

某程序运行弹窗如下:

逆向工具系列 | x64dbg使用方法和技巧

明显输出不完整,使用IDA加载程序,查看逻辑。注意到v11可能是加密的内容,sub_401000为解密函数,Text为解密后的内容,但第43行给v6赋值为0,导致Text被截断,故而输出不完整。

逆向工具系列 | x64dbg使用方法和技巧

此时就可以尝试调试得到完整的解密内容。在哪里下断点呢?观察sub_401000函数,第3个参数应该是解密后的内容,转到汇编视图,先在调用sub_401000函数的地址即0x004010E0处下断点

逆向工具系列 | x64dbg使用方法和技巧

使用x64dbg加载程序,禁用ASLR后再重新加载,方便调试

逆向工具系列 | x64dbg使用方法和技巧

Ctrl + G,跳转到地址0x004010E0,F2下断点,F9运行程序 运行到地址0x004010E0后,查看右侧函数参数窗口,第3个参数对应的地址会用来保存解密后的内容

逆向工具系列 | x64dbg使用方法和技巧

右键选择“在 内存窗口 中转到…”

逆向工具系列 | x64dbg使用方法和技巧

F8步过sub_401000函数,就可以在内存中看到完整的解密内容为“Make the world better!”

逆向工具系列 | x64dbg使用方法和技巧

一些技巧

断点类型

在例子中用了最常用的软件断点,另外还有硬件断点,内存断点。软件断点利用特定指令实现,会修改程序内容,部分程序会检测自身是否被修改,以此进行反调试;硬件断点借助特定寄存器实现,不会修改程序内容,可以用来反制针对软件断点的反调试;内存断点通过设置内存页属性实现,适用于读写内存断下的情况。

ASLR

ASLR, Address Space Layout Randomization, 地址空间布局随机化 该功能可以让程序加载的基址随机化,提高攻击难度,但调试程序时,随机化的基址会增加调试复杂度,可以用以下方式关闭。

针对整个系统,可以设置如下注册表项:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management] "MoveImages"=dword:00000000

针对单个程序,可以用CFF Explorer、XPEViewer等工具修改相应标志位 IMAGE_NT_HEADERS -> IMAGE_OPTIONAL_HEADER -> DLL Characteristics -> IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE

在例子中也提到x64dbg有关闭单个程序ASLR的功能,不再赘述。

切换内存显示方式

x64dbg的内存窗口默认显示十六进制和ASCII字符

逆向工具系列 | x64dbg使用方法和技巧

可以右键选择 文本->ASCII,只显示字符串

逆向工具系列 | x64dbg使用方法和技巧

逆向工具系列 | x64dbg使用方法和技巧

“扩展ASCII”表示宽字节 代码页可以选择其他编码方式,在需要显示汉字时会用到

如果需要切换回默认显示方式,右键选择 十六进制->ASCII 即可

保存内存数据

https://help.x64dbg.com/en/latest/commands/memory-operations/savedata.html

x64dbg提供了savedata命令,需要保存较长的一段数据时很方便。savedata,, 数据保存在x64dbg.exe所在目录下

例子中的解密数据可以用这种方式保存到文件

逆向工具系列 | x64dbg使用方法和技巧

反反调试

x64dbg自带反反调试功能,可以通过下图的方法打开

逆向工具系列 | x64dbg使用方法和技巧

Scylla

针对一些加了压缩壳的程序,在把程序调试到OEP(Original Entry Point, 原始入口点)时,x64dbg集成的Scylla工具极大简化了Dump脱壳程序和修复导入表的过程。

逆向工具系列 | x64dbg使用方法和技巧

一些插件

x64dbg支持很多插件,可以在这里查找安装使用 https://github.com/x64dbg/x64dbg/wiki/Plugins

这里列举一些 x64dbgida https://github.com/x64dbg/x64dbgida 可以和IDA交换符号,方便调试

x64dbgpy https://github.com/x64dbg/x64dbgpy 可以借助python半自动化调试过程

xAnalyzer https://github.com/ThunderCls/xAnalyzer 可以分析补充一些系统API的参数注释,在这方面接近OD的效果,虽然有bug,勉强可以用 

分析前

逆向工具系列 | x64dbg使用方法和技巧

在地址0x00401115上方不远处,右键 xAnalyzer -> Analyze function,

逆向工具系列 | x64dbg使用方法和技巧

分析后

逆向工具系列 | x64dbg使用方法和技巧

例子的源码

逆向工具系列 | x64dbg使用方法和技巧

加入知识星球或知识大陆获取。或加入群聊交流

逆向工具系列 | x64dbg使用方法和技巧

逆向工具系列 | x64dbg使用方法和技巧

逆向工具系列 | x64dbg使用方法和技巧

原文始发于微信公众号(Eonian Sharp):逆向工具系列 | x64dbg使用方法和技巧

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月10日00:11:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   逆向工具系列 | x64dbg使用方法和技巧https://cn-sec.com/archives/3246337.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息