Как сокрушают протекторы

Крис Касперски

Хакер, номер #092, стр. 092-102-1

Обзор упаковщиков исполняемых файлов под *nix

Долгое время единственным упаковщиком исполняемых файлов в *nix был легендарный UPX, содержащий встроенный декомпрессор и распаковывающий файлы без особого труда. Но сейчас ситуация изменилась, и упаковщики стали появляться, как грибы после дождя. Ими охотно пользуются разработчики коммерческих программ с закрытым кодом, не задумываясь о том, какие проблемы они создают своим пользователям. Сегодня мы покажем, как, не будучи хакером и не имея навыков в дизассемблировании или отладке, победить наиболее популярные упаковщики (ELFCrypt, UPX, Bueye и Shiva).

Введение

Упаковщики исполняемых файлов часто используются для затруднения анализа программы и препятствия взлому. Упакованный файл потребляет намного больше оперативной памяти, а на некоторых *nix-клонах вообще отказывается запускаться или работает нестабильно. В первую очередь это касается *BSD (основная масса упаковщиков ориентирована на Linux) и экзотических систем с экспериментальными ядрами наподобие Hurd. В результате от упаковщиков/протекторов стремится избавиться даже тот, кто вообще не собирался ничего ломать!

ELFCrypt

Происхождение: создан индийским студентом по прозвищу JunkCode. Распространяется в исходных текстах на бесплатной основе: www.infogreg.com/source-code/public-domain/elfcrypt-v1.0.html.

Описание: простейший шифровщик (не упаковщик!) ELF-файлов, шифрующий файл по XOR случайно генерируемым ключом. Присваивает кодовой секции атрибут writable и не убирает его после завершения расшифровки (что может приводить к некорректной работе программ, проверяющих возможность модификации кодовой секции). Остальные секции (и секция данных в том числе!) остаются незашифрованными. Не содержит никаких антиотладочных приемов, но подкладывает две большие свиньи дизассемблерам: «забывает» скорректировать метку _start и размещает свой код в секции exte, истинное содержимое которой IDA Pro отображает только в режиме ручной загрузки при выбранной опции: «Force using of PHT instead of SHT».

Распаковка: загружаем файл в Hiew, двойным нажатием <ENTER>'а переходим в режим дизассемблера, давим <F8> для отображения заголовка и переходим в точку входа по <F5>. Здесь прослеживается следующий код:

КОД

Дизассемблерный листинг окрестной точки входа программы, зашифрованной ELFCrypt'ом

; переходим на расшифровщик

.080495DC: EB02jmps .0080495E0

; мусор, оставленный транслятором ассемблера

.080495DE: 06push es

.080495DF: C6???

; сохраняем в стеке все регистры и флаги

.080495E0: 60pushad

.080495E1: 9Cpushfd

; начало расшифровываемого фрагмента

.080495E2: BEC0820408mov esi, 0080482C0

.080495E7: 8BFEmov edi, esi

; количество двойных слов для расшифровки

.080495E9: B978000000mov ecx, 000000078

; ключ расшифровки

.080495EE: BBBD03CC09mov ebx, 009CC03BD

; читаем очередное двойное слово

.080495F3: ADlodsd

; расшифровываем через xor

.080495F4: 33C3xor eax,ebx

; записываем результат на место

.080495F6: ABstosd

; мотаем цикл

.080495F7: E2FAloop .0080495F3

; восстанавливаем из стека флаги и регистры

Содержание  Вперед на стр. 092-102-2
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001