12.07.2015 Views

img - Xakep Online

img - Xakep Online

img - Xakep Online

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Взгляд на многообещающее будущее через окноradareany_string db 'Mate.Feed.Kill.Repeat'strings_size = $ - strings0XABA51A, ÈËÈ ÊÎÍÒÐÎËÜ ÖÅËÎÑÒÍÎÑÒÈ ÊÎÄÀВычислив на стадии компиляции контрольные суммы участков кода,можно защититься от модификации, пересчитывая и проверяя при выполненииэти суммы. Также подобным образом можно детектироватьтрассировку посредством вставки в код прерывания int3, как делаютмногие отладчики. Макрос, вычисляющий crc32 сумму блока кода:CRC32_SUM = 0macro calc_crc32 start, size {local b,cc = 0xffffffffrepeat sizeload b byte from start+%-1c = c xor brepeat 8c = (c shr 1) xor (0xedb88320 * (c and 1))end repeatCRC32_SUM = c xor 0xffffffff}Хочу заметить, что операции вида if(original_hash != current_hash) Error() абсолютно бесполезны! Хотя используются повсеместно,даже в крутых протекторах. А вот нечто подобное:mov eax,address + original_hashsub eax,current_hashcall eaxСовсем другое дело. Двух зайцев сразу: обфускация — динамическое вычислениеадреса перехода, и контроль целостности кода, то есть, если кодбыл каким-либо образом изменен, будет выполнен переход кот знает куда.0XACCEDE, ÈËÈ ÎÁÌÀÍ ÀÍÀËÈÇÀÒÎÐÎÂАнализаторы исполняемых файлов вроде PEiD используют сигнатурныйпоиск, в базе находятся цепочки байт, которые встречаются впопулярных протекторах\упаковщиках. Для того, чтобы сбить с толкувзломщиков своей программы, я создал макрос, добавляющий в EntryPoint программы случайную сигнатуру. Воспользовавшись вышеупомянутыманализатором или его аналогом и получив ложный результат,взломщик попытается распаковать программу либо автоматическимраспаковщиком, либо вручную, следуя описанию. И, конечно же, ничегоне получится, кроме тяжелого ступора.macro facke_sign {randomizevariant = rndnum mod Nif vatiant = 0;PE Protect 0.9 -> Christoph Gablerpush edxpush ecxpush ebppush edidb 0x64, 0x67, 0xA1, 0x30, 0x00;FASM ãåíåðèðóåò äëèííûé ôîðìàò èíñòðóêöèèРезультат работы немного расширенного макроса};mov eax,[fs:0x30], ïîýòîìó çàïèñàë òàêèì îáðàçîìtest eax,eaxjs @f+1call .end.signpop eaxadd eax,7db 0xC6nopret@@:db 0xE9,0x00,0x00,0x00,0x00.end.sign:else if variant = 1;CD-Cops II -> Link Data Securitypush ebxpushadmov ebp,0x90909090lea eax,[ebp-0x70]lea ebx,[ebp-0x70]call $+5lea eax,[ecx]db 0xE9,0x00,0x00,0x00,0x00...else if variant = N...0XAD105. ÇÀÊËÞ×ÅÍÈÅГрамотное использование и комбинирование описанных мною техникпозволяет сделать серьезную защиту. Это и очень удобно: написав,отладив программу, с минимальными правками исходного кода превращаемее в неприступный бастион. После того, как я написал свойнабор макросов, протестировал и применил их к своей программе,мне пришла в голову еще одна замечательная идея. Данный методя еще и автоматизировал следующим способом: поместил на серверисходный код программы и компилятор FASM, при запросе пользователемtrial-версии программы она автоматически компилируется;таким образом получается, что каждому пользователю выдаетсяуникальная версия программы. Универсальные взломщики (патчеры,crack'и и т.п.) просто бессильны — придется ломать каждую копиюотдельно. А это ведь непросто, учитывая, что весь код изменен, а некак у навесных протекторов, только «сверху». Мне, как разработчику,остается только чаще обновлять исходники и совершенно не волноватьсяо том, что мою программу могут взломать. Так что, open youreyes, open your mind! zXÀÊÅÐ 08 /139/ 10 061

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!