【逆向】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更新:
这几天看文档发现可以直接用以下函数进行比较。