【逆向】x64dbg设置条件断点 比较内存字符串是否相等

前言

  在OD中可以设置条件断点,通过表达式对字符串数据进行比较,比如在CreateFile打开某个特定文件的时候让调试器中断。但是在x32dbg、x64dbg中因为表达式只支持整数,不支持字符串和其它数据,所以不能像OD设置条件断点一样来比较两个字符串是否相等。x64dbg 设置条件断点,只能用取内存数据这种折中的方式来实现。但是使用这种方法,如果比较的字符串长度过长就会比较尴尬,最好的办法应该还是通过插件来实现比较方便。

写个测试程序简单演示下:

 1 #include "stdafx.h"
 2 #include <windows.h>
 3 
 4 int _tmain(int argc, _TCHAR* argv[])
 5 {
 6     HANDLE hFile1 = CreateFileA("0.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
 7     if (hFile1)
 8     {
 9         CloseHandle(hFile1);
10     }
11 
12     HANDLE hFile2 = CreateFileA("1.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
13     if (hFile2)
14     {
15         CloseHandle(hFile2);
16     }
17 
18     return 0;
19 }

启动测试程序,在“CreateFileA”下断点,然后右键“修改”或者快捷键“Shift+F2”添加条件断点表达式。设置当打开的文件是“1.txt”的时候让调试器中断,同时在日志窗口输出每次执行“CreateFileA”时打开的文件名称。

可以看到当打开第一个文件“0.txt”的时候调试器没有发生中断,而打开“1.txt”的时候因为条件表达式满足,调试器中断。


2022年11月05更新:

这几天看文档发现可以直接用以下函数进行比较。

posted @ 2021-01-07 21:32  SunsetR  阅读(4819)  评论(2编辑  收藏  举报