我目前正在努力工作。 RDTSC
在x86程序集中被用来获得时间戳,以便在被debugging器或其他东西放慢的情况下匹配。crackme本身是elf32剥离的二进制文件。
我目前正在使用MacOS + VirtualBox Debian32。
我的策略是保持第一个RDTSC
电话并存储它的eax
和edx
。 把它保留在其他rdtsc
调用的地方,我以前的eax
和edx
值设置为当前的。 我没有这个策略的运气。 Crackme仍然认识我。
我通过谷歌search,发现IDAstealth另一个Windows程序,让你假rdtsc
电话。
我正在寻找相当于这个在Linux。 有没有什么办法可以在linux中设置rdtsc
值?
你用一个带有ecx = 59的WRMSR
指令写入TSC寄存器。这是一条特权指令,所以你只能在内核中执行它。
“截获”RDTSC呼叫的一个更简单的方法是将CR4中的TSD位置1,禁用RDTSC指令。 这也只能在内核中完成。
因此,无论你如何分割它,如果你想在linux上做到这一点,你需要编写一个内核模块来完成必要的控制寄存器操作。