文章目录
导读
x64dbg是小编目前用的最多的windows调试器了,可以说是不得不用
,因为64位调试器,也就它好用了,以前的神器OD没有更新,出现的各种问题,让人头痛不已,弃之。
另外x64dbg也的确有很多优点
:
- 开源!!!
- 更新频率高,兼容最新操作系统
- 各种操作页面(内存、符号、线程、源码……)
- 支持插件、命令、脚本(Python)
x64dbg的资料不多,使用上跟OD很像,具体使用说明,参考官方文档。文档内容不多,多看几遍,然后多实践就可以了。
参数打印/修改参数 - 界面方式
逆向过程中,经常要对遇到的寄存器
或者内存
等信息进行观测,这时候我们就需要将目标信息打印出来。
本教程是小编最近分析软件的例子,定位参数的过程不在讨论范围内,这里直接进行参数打印的配置。
在地址upc.exe:$1734130
处点击右键,选择断点
-> 设置条件断点
,如下图所示。
在弹出的编辑断点界面中,如下图:
- 我们设置
暂停条件
为0
,表示不暂停。 - 日志参数(红色)
- 日志条件:
1
- 日志文本:
p1 = {utf8@[ebp-28]}, p2 = {utf16@[[ebp-108]]}
- 日志条件:
- 命令参数(绿色)
- 命令条件-方案一:
streq(utf8(ebp-28), "MessagePlayGame")
- 命令条件-方案二:
[ebp-28+8]==bswap(6C617947)&&[ebp-28+0xC]==bswap(616D6500)
- 命令:
memset ebp-28,0,1
- 命令条件-方案一:
参数打印 - 日志参数(红色)
日志条件这里直接设置为1,永远打印就行。
变量标记为一对大括号:{}
参数一是utf8的,utf8@字符串地址,这里的字符串地址为[ebp-28]
参数二是utf16的指针,utf16@字符串地址,这里的字符串地址为[[ebp-108]]
修改参数 - 命令参数(绿色)
命令条件-方案一:
streq(utf8(ebp-28), "MessagePlayGame")
该方案是参考官网的文档:https://help.x64dbg.com/en/latest/introduction/Expression-functions.html#strings,使用函数streq
表达式函数!!!这也是最直观的方案。
命令条件-方案二:
[ebp-28+8]==bswap(6C617947)&&[ebp-28+0xC]==bswap(616D6500)
该方案是个笨方案,不推荐,其原理是将字符串MessagePlayGame
的内容按DWORD分段读取,这里取字符串第三个和第四个DWORD进行比较。bswap
是将字节流转为DWORD的函数,方便直接从内存窗口中拷贝的字节进行使用。
命令:
memset ebp-28,0,1
之前一直想的是使用汇编去实现该逻辑,mov [ebp-28], 0
,可惜没有这样的语句,求大佬留言,给个能用的汇编代码。
后来找了官网资料,发现memset
命令,可以进行内存修改,使用方法如下:
参数打印/修改参数 - 脚本方式
脚本可以方便自动化操作,小编也研究了下脚本,参考文档Breakpoint Control和Conditional Breakpoint Control。
具体代码及解释如下所示:
// 设置断点和名字
SetBPX upc.exe:$1734130, 记录参数
// 设置断点条件为0,不下断点
SetBreakpointCondition upc.exe:$1734130, 0
// 设置日志和日志条件
SetBreakpointLog upc.exe:$1734130, "p1 = {utf8@[ebp-28]}, p2 = {utf16@[[ebp-108]]}"
SetBreakpointLogCondition upc.exe:$1734130, 1
;; 设置命令和命令条件
SetBreakpointCommand upc.exe:$1734130, "memset ebp-28,0,1"
SetBreakpointCommandCondition upc.exe:$1734130, [ebp-28+8]==bswap(6C 61 79 47) && [ebp-28+0xC]==bswap(61 6D 65 00)
从剪贴板加载脚本流程:
- 将上述脚本拷贝到内存
- 切换到脚本Tab页面
- 右键选择
载入脚本
- 选择子菜单
粘贴
ps: 脚本的注释可以试用
//
和;;
。
参考资料
- x64dbg官网 https://x64dbg.com/
- x64dbg文档 https://help.x64dbg.com/en/latest
- x64dbg下载地址 https://sourceforge.net/projects/x64dbg/files/snapshots/
- x64dbg设置条件断点 比较内存字符串是否相等 https://www.cnblogs.com/SunsetR/p/14248852.html
- [原创]x64dbg入门:解惑篇 https://bbs.pediy.com/thread-259955-1.htm
- [原创]x64dbg使用技巧与实用插件合集 https://bbs.pediy.com/thread-266488.htm
- qq群:夜猫逐梦技术交流裙/953949723
**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。