3

我目前正在做一个crackme。RDTSC在 x86 程序集中使用它来获取时间戳以匹配它是否被调试器或其他东西减慢。crackme 本身是 elf32 剥离的二进制文件。

我目前正在使用 Macos + VirtualBox Debian32。

我的策略是保持第一次RDTSC调用并存储它的eaxand edx。将其保存在某个地方以供其他rdtsc调用,我将先前的值eaxedx值设置为当前值。我对这个策略没有运气。Crackme仍然认识我。

我通过谷歌搜索,发现 IDAstealth 是另一个可以让你假rdtsc电话的 Windows 程序。

我在 linux 中寻找类似的东西。有没有办法rdtsc在linux中设置值?

4

1 回答 1

1

您使用 ecx = 59 的指令写入 TSC 寄存器WRMSR。这是一条特权指令,因此您只能在内核中执行此操作。

“拦截”RDTSC 调用的更简单方法是设置 CR4 中的 TSD 位,禁用 RDTSC 指令。这也只能在内核中完成。

因此,无论您以何种方式对其进行切片,如果您想在 linux 上执行此操作,您都需要编写一个内核模块来执行必要的控制寄存器操作。

于 2013-10-29T19:07:52.050 回答