У моего предыдущего работодателя мы использовали сторонний компонент, который в основном был только DLL и заголовочным файлом. Этот конкретный модуль обрабатывал печать в Win32. Однако компания, которая сделала компонент, стала банкротом, поэтому я не мог сообщить об ошибке, которую я нашел.
Итак, я решил сам исправить ошибку и запустил отладчик. Я с удивлением обнаружил код отладки почти везде, обычный IsDebuggerPresent
, но то, что привлекло мое внимание, было следующим:
; some twiddling with xor
; and data, result in eax
jmp eax
mov eax, 0x310fac09
; rest of code here
На первый взгляд я просто перешагнул рутину, которая была вызвана дважды, а затем просто пошли бананы. Через некоторое время я понял, что результат бит-вертела всегда был одинаковым, т.е. Jmp eax всегда прыгал прямо в инструкцию mov eax, 0x310fac09
.
Я расчленял байты и там был, 0f31
, инструкция rdtsc
, которая использовалась для измерения времени, проведенного между некоторыми вызовами в DLL.
Итак, мой вопрос SO: Какой твой любимый анти-отладочный трюк?