我目前正在尝试绕过 CRC 检查,该检查存在于应用程序的许多地方,以检查 .text 部分中的内存页面是否已被修改。
从第一个操作数(目标操作数)中的初始值开始,为第二个操作数(源操作数)累加一个 CRC32(多项式 11EDC6F41H)值并将结果存储在目标操作数中。
好的:rsi
包含下一个被扫描的内存页的指针,它rax
是偏移量/计数器。rdx
通常为 200(200 个循环)。
我的目标:找到哪里 rsi
设置。必须有一些指令,如mov rsi, next_memory_page_to_be_scanned
。
所以这里是初始化的循环变量 ( rdx,rax
)。
所以这是我被卡住的一件事:黄色标记的部分似乎是我可以在 CRC_CHECK 之前执行的第一个指令。我的意思是其他某个地方显然是这样称呼它的,但我不知道如何找到那个地方。
但返回指针基本上没有指向任何东西。断点上面的一条指令 ( and [rcx], al
) 不会触发 bp(似乎与 CRC 检查没有任何关系)。我如何进一步追溯?
rsi
当我 bp CRC 时,的值也不在堆栈上。
谢谢!