Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Главная цель этой работы состоит в том, чтобы показать методы защиты от исследования,
используемые упаковщиками/протекторами, а также обсудить методы и доступные инструменты,
которые могут использоваться, чтобы обойти или снять это защиты.
Главная цель этой работы состоит в том, чтобы показать методы защиты от исследования,
используемые упаковщиками/протекторами, а также обсудить методы и доступные инструменты,
которые могут использоваться, чтобы обойти или снять это защиты.
ну работа какая-то мутная, это солянка без нормальных пометок. где там Ferrie, где Falliere, где прямой перевод, где пересказ, а где переводчик уже сам что-то докинул, непонятно. для такой темы это плохой прикол, потому что тут один неверный API или один байт в asm, и пример уже не объясняет трюк, а просто учит мусору.
самый жирный пример на 16-17 странице. там речь про SystemKernelDebuggerInformation, и рядом пример:
только это не NtQueryInformationProcess. в оригинальном Anti-unpacker tricks это отдельный раздел про NtQuerySystemInformation, и класс SystemKernelDebuggerInformation = 0x23 передается именно туда. у NtQuerySystemInformation нет никакого ProcessHandle, поэтому push -1 тут просто лишний. похоже, кусок тупо перенесли в соседний раздел и даже не посмотрели на сигнатуру функции.
там же странно сломан смысл про ReactOS. в русском тексте выходит что-то вроде “SystemKernelDebuggerInformation поддерживается ReactOS, но может не поддерживаться современными Windows”. хотя в оригинале смысл другой, этот класс был еще со времен Windows NT, и речь вообще про класс NtQuerySystemInformation, а не про то, что ReactOS тут внезапно главный ориентир. нормальную техническую фразу после перевода превратили в “ну где-то там в ReactOS есть, а Windows хз”.
еще страница 29, раздел про INT 2D. там написано:
Код:
db 02Dh
mov eax, 1 ;anti-tracing
но db 02Dh это не INT 2D. инструкция INT imm8 кодируется как CD ib, то есть INT 2D это CD 2D. один байт 2D в x86 это начало SUB EAX, imm32, и он просто сожрет следующие 4 байта как immediate. то есть пример технически битый. нормально было бы написать:
Код:
int 2Dh
или:
Код:
db 0CDh, 02Dh
и это уже не “ну перевод такой”, а просто ошибка в коде.
плюс местами переводчик любит включать режим абсолютной истины. например фраза в духе “из юзер-модного режима нет никакой возможности скрыть присутствие отладчика”. звучит мощно, но рядом же иногда пишется про обход через перехват вызова или правку возвращаемого значения. в оригинале было не “impossible”, а “no easy way”, то есть “нет простого способа”. это вообще разные вещи.
слишком много мест, где надо открывать оригинал и проверять, что там реально было написано, особенно когда речь идет про Native API, Windows internals и конкретные байты инструкций.