[x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)

文章目录

导读

x64dbg是小编目前用的最多的windows调试器了,可以说是不得不用,因为64位调试器,也就它好用了,以前的神器OD没有更新,出现的各种问题,让人头痛不已,弃之。

另外x64dbg也的确有很多优点

  • 开源!!!
  • 更新频率高,兼容最新操作系统
  • 各种操作页面(内存、符号、线程、源码……)
  • 支持插件、命令、脚本(Python)

x64dbg的资料不多,使用上跟OD很像,具体使用说明,参考官方文档。文档内容不多,多看几遍,然后多实践就可以了。

参数打印/修改参数 - 界面方式

逆向过程中,经常要对遇到的寄存器或者内存等信息进行观测,这时候我们就需要将目标信息打印出来。

本教程是小编最近分析软件的例子,定位参数的过程不在讨论范围内,这里直接进行参数打印的配置。

[x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)
在地址upc.exe:$1734130处点击右键,选择断点 -> 设置条件断点,如下图所示。
[x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)
在弹出的编辑断点界面中,如下图:

  • 我们设置暂停条件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
      [x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)

参数打印 - 日志参数(红色)

日志条件这里直接设置为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的函数,方便直接从内存窗口中拷贝的字节进行使用。
[x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)

命令:memset ebp-28,0,1

之前一直想的是使用汇编去实现该逻辑,mov [ebp-28], 0,可惜没有这样的语句,求大佬留言,给个能用的汇编代码。

后来找了官网资料,发现memset命令,可以进行内存修改,使用方法如下:
[x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)

参数打印/修改参数 - 脚本方式

脚本可以方便自动化操作,小编也研究了下脚本,参考文档Breakpoint ControlConditional 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页面
  • 右键选择载入脚本
  • 选择子菜单粘贴
    [x64dbg] 实战01 - 参数打印/修改参数内容(条件断点、命令、脚本)

ps: 脚本的注释可以试用//;;

参考资料

**ps:**文章中内容仅用于技术交流,请勿用于违规违法行为。

上一篇:2021/9/28 学习汇报总结(UNet;UNet++;CT影像)


下一篇:Pytorch数据操作