x64dbg的条件断点
摘要:关于x64dbg的条件断点的记录。md网上关于x64dbg的资料少的可怜,接下来就详细的说说。
OD里面的断点设置条件时默认不管加不加0x默认都是按照十六进制算,IDA不加0x就是按照十进制。x64dbg和OD规则一样,反人类。
关于下面各个操作步骤的说明
当在程序中点击按钮后会触发0x0045AB89处的断点,在0x401E98可以看到寄存器的值可以看到输入的字符串。
msg打印输出
ebx:{ansi@ebx}
ebx:{s:ebx}
三个???,因为是编码的问题,把输入换成英文字符就好了
把输入换成英文后
两者的区别:
ebx:{ansi@ebx} 这个打印结果为 1234
ebx:{s:ebx} 这个打印结果为 "1234"
普通的条件断点
当ECX寄存器的值等于0x00469B4C,程序断下
当ECX寄存器的值等于0x00469B4C,并且EAX等于0时,程序断下
当地址ESP+4指向的内容是0x202时暂停
字符串条件断点
插件地址
这个网上找了很久也没人说,最后在x64dbg的github issue上找到了答案
插件地址: strmatch plugin
插件作者的说明
Simple string matching plugin for x64dbg. Supports UTF8, UTF16 and Local codepages.
[strmatch] documentation:
1. Command: strmatch_set index, "string"
2. Expression function: [action]_[encoding](va, index)
Actions: strcmp, stricmp, strstr, stristr
Encodings: utf8, utf16, local
Example: strcmp_utf16(va, index)
Example
strmatch_set 1337, "hello"
stristr_utf8(edx, 1337)
自翻中文版
1337相当于c语言变量
ebx寄存器的值是字符串的地址
strmatch_set 1337, "bb"
strcmp_local(ebx, 1337) //两个字符串不同返回0,相同就返回一。
stricmp_local(ebx, 1337) //两个字符串不同返回0,相同就返回一,不区分大小写。
strstr_local(ebx, 1337) //ebx指向的字符串是否包含1337字符串, 不包含返回0,包含返回1。
stristr_local(ebx, 1337) //ebx指向的字符串是否包含1337字符串,不区分大小写,不包含返回0,包含返回1。
其中的local可以根据编码换成utf8, utf16。local应该是本机默认的编码?反正windows下就是gbk。
例如strcmp_local可以换成strcmp_utf8,感谢插件作者,真好用。
使用方法
- 在最下面的命令行输入strmatch_set 1337, "bb",然后回车
- 设置条件断点
stristr_local(ebx, 1337) == 1
- 在程序中输入字符串123bbDD
- 断点断下成功
步进直到条件满足/步过直到条件满足
功能说明:
TraceIntoConditional/ticnd
通过StepInto(F7)跟踪程序,直到满足指定条件或达到最大步数。
参数1 使用的条件。当计算为0以外的值时, 跟踪将停止
参数2 在调试器放弃之前跟踪的最大步数
TraceOverConditional/tocnd
通过StepOver(F8)跟踪程序,直到满足指定条件或达到最大步数。
参数1 使用的条件。当计算为 0 以外的值时, 跟踪将停止
参数2 在调试器放弃之前跟踪的最大步数
使用例子:
//要么eax=0x79要么运行够10000步调试器停止。
//ticnd相当于一步一步运行,推荐用这个,虽然运行速度慢。
ticnd eax==0x79,10000
//tocnd会跨过函数调用
tocnd eax==0x79,10000
//从ECX指向的内存处取一个字节,当这个字节等于B7的时候,调试器暂停。
// 这个功能不能用,当ECX的值是一个非法地址比如0x202,也会暂停。
//划重点 不能用
//划重点 不能用
ticnd byte:[ecx]==B7,10000
关于字符串条件下tocnd或者ticnd
就很好奇,明明x64dbg开发者貌似github上的issue也回的贼快,不知道为啥就不能好好写一个帮助文档。越用越感到x64dbg是真的强大。
使用方法:
- 启动运行跟踪:
- 在最下面的命令行输入strmatch_set 1337, "bb",然后回车
- 设置条件断点
stristr_local(ebx, 1337) == 1
- 断下成功
所用到的测试软件以及插件
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
感谢博主
一看就是抄袭冥界三大法王的
图是我的,测试用的软件也是我写的,github 的issue 是我问的,哪里来的抄袭?
感谢
有帮助,谢谢博主