Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #66, МАЙ 2006 г.

копаемся в броне

КРИС КАСПЕРСКИ АКА МЫЩЪХ

Спецвыпуск: Хакер, номер #066, стр. 066-062-7


.text:00000000 xor ecx, ecx

.text:00000002 xor eax, eax

.text:00000004

.text:00000004 loc_4: ; CODE XREF: _main+Cvj

.text:00000004 add ecx, eax

.text:00000006 add eax, 2

.text:00000009 cmp eax, 14h

.text:0000000C jl short loc_4

.text:0000000E push ecx

.text:0000000F push offset $SG398

.text:00000014 call _printf

.text:00000019 add esp, 8

.text:0000001C retn

.text:0000001C _main endp

Как видно, ничего похожего на пролог тут нет. Однако стоит добавить хотя бы простейшую ассемблерную вставку типа __asm {mov a,eax } и перекомпилировать программу, как все летит кувырком.

дизассемблерный листинг той же самой функции с мелкой ассемблерной вставкой

.text:00000000 _main proc near

.text:00000000

.text:00000000 var_4 = dword ptr -4

.text:00000000

.text:00000000 push ebp

.text:00000001 mov ebp, esp

.text:00000003 push ecx

.text:00000004 xor ecx, ecx

.text:00000006 xor eax, eax

.text:00000008

.text:00000008 loc_8: ; CODE XREF: _main+10vj

.text:00000008 add ecx, eax

.text:0000000A add eax, 2

.text:0000000D cmp eax, 14h

.text:00000010 jl short loc_8

.text:00000012 mov [ebp+var_4], eax

.text:00000015 push ecx

.text:00000016 push offset $SG398

.text:0000001B call _printf

.text:00000020 add esp, 8

.text:00000023 mov esp, ebp

.text:00000025 pop ebp

.text:00000026 retn

.text:00000026 _main endp

Стандартный пролог легко обнаруживается контекстным поиском, поэтому либо вообще не используй никакого ассемблера в своих программах, либо пиши на чистом ассемблере с последующей трансляцией в obj, либо предваряй ассемблерные функции спецификатором «naked», и в этом случае Microsoft Visual C++ не будет вставлять ни пролога, ни эпилога.

десять «НЕ»

Мелкие промахи, ведущие к серьезным последствиям.

1. Категорически недопустимо бороться с пассивными отладчиками. Многие системщики постоянно держат SoftIce в фоне и совсем не для хакерских целей. Уже давно они не ломают защиты: нет времени, да и программирование приносит гораздо большие деньги. Однако когда необходимая программа ругается на SofеIce, отказываясь запускаться, они выседают на ярость и, тряхнув стариной, разносят защиту в пух и прах, притом очень часто выкладывают крэк на всеобщее обозрение.

2. Не нужно пытаться обнаружить виртуальные машины — все равно не получится. Их слишком много: VM Ware, VirtualPC, BOCHS, QEMU… К тому же многие пользователи и сетевые/журнальные обозреватели, не желая замусоривать свою основную систему, «обкатывают» новые программы именно под виртуальными машинами. И если те отказываются запускаться там, выбор отдается в пользу конкурентной программы.

3. Привязываться ни к чему нельзя. Пользователям очень не нравится, когда программы привязываются к оборудованию (а как же апгрейд?). К тому же подобная привязка очень легко «отламывается». Если и не отламывается, то запускается под виртуальной машиной. К носителям информации и электронным ключам привязываться тоже нельзя — честным пользователем один геморрой (и реверанс в сторону конкурентов), а нечестные все равно скопируют.

Назад на стр. 066-062-6  Содержание  Вперед на стр. 066-062-8