如何在Linux中伪造RDTSC

我目前正在努力工作。 RDTSCx86程序集中被用来获得时间戳,以便在被debugging器或其他东西放慢的情况下匹配。crackme本身是elf32剥离的二进制文件。

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

我的策略是保持第一个RDTSC电话并存储它的eaxedx 。 把它保留在其他rdtsc调用的地方,我以前的eaxedx值设置为当前的。 我没有这个策略的运气。 Crackme仍然认识我。

我通过谷歌search,发现IDAstealth另一个Windows程序,让你假rdtsc电话。

我正在寻找相当于这个在Linux。 有没有什么办法可以在linux中设置rdtsc值?

你用一个带有ecx = 59的WRMSR指令写入TSC寄存器。这是一条特权指令,所以你只能在内核中执行它。

“截获”RDTSC呼叫的一个更简单的方法是将CR4中的TSD位置1,禁用RDTSC指令。 这也只能在内核中完成。

因此,无论你如何分割它,如果你想在linux上做到这一点,你需要编写一个内核模块来完成必要的控制寄存器操作。