在 IDA 中搜索字节序列

逆向工程 艾达 反调试
2021-06-22 11:33:22

使用硬件断点,我发现 Ollydbg 有一个破解者正在检查 isDebuggerPresent 标志。我想现在使用 IDA 找到这部分代码。

我先是查看了导入表,但是在列表中找不到函数,得出的结论是crackme是直接做的,而不是使用kernel32.dll。然后我尝试使用IDA中的“字节序列”搜索,使用OllyDbg的十六进制转储视图中对应的字节MOV EAX,DWORD PTR FS:[30](64 A1 30 00 00 00),这里没有机会。

我一定在这里遗漏了一些非常明显的东西,这是最基本的反调试技术,所以必须有一种使用 IDA 定位它的简单方法,对吧?

编辑:Ollydbg 中的截图 在此处输入图片说明

编辑:检查实际发生的地方 在此处输入图片说明

1个回答

当然你在crackme里是找不到的,因为没有代码。很容易确定代码属于哪个文件:

带有模块名称的标题栏

它是KERNELBA,所以它可能来自系统 dll ( KERNELBASE.dll?)。我们希望在命名crackme4或类似的模块中找到代码

查看堆栈,很容易找到地址:

堆栈图像

那个没有前缀<system_module_name>.,所以我猜它是来自crackme的代码。

如果堆栈损坏,可以使用Alt+ F9(执行直到用户代码)。


关于在IDA中找到对应的地址,在这个问题中有描述

如果只更改了基数,但偏移量不变[...],则可以在 IDA 中重新设置程序的基数您可以通过 edit->segments->Rebase program ... 菜单来实现。在 IDA 中指定与 Olly 中相同的起始基数应该会有所帮助。

Base_Address_in_OllyDbg: OllyDbg 中目标模块的基址。您可以通过在 OllyDbg 中Alt-E来找到这个值(或者通过在 OllyDbg 的菜单栏中进入查看 --> 可执行模块)。在“可执行模块”窗口中找到您的目标模块最左边的字段 ( Base ) 是Base_Address_in_OllyDbg.