451
451
virus magazine, issue #1
index

Inpector v 1.666
                            


 			"... Долгая пауза - и зазвонили уцелевшие два 
                            телефона.Где-то замкнулось реле. Два телефонных  
 			    голоса соединились напрямую друг с другом.
     			- Алло, Бартон?
     			- Да, Бартон?
     			- Мне двадцать четыре.
     			- А мне двадцать шесть. Мы оба молоды. Что стряслось?
     			- Не знаю. Слушай..."

						(c) Bradbury R. "Night Call"


 Вот все и закончилось. Получилось что-то сочетающее в себе пермутацию и 
 шифрование, ну и утилита для шифрования PE-файлов. Но закончилось ли? И 
 вообще что-нибудь закончится? Наверное нет, и это радует...
 
Inpector
 Как уже было сказано, inpector это утилита для криптовки PE-файлов, в 
 качестве ключа, для шифрования/дешифрования, используется фраза, введенная 
 с консоли,из которой учитываются только первые 16 символов. Реально же 
 используется 64-битный ключ, являющийся результатом XOR'а обеих 8-байтных 
 частей ключа.InPEctor ? это не упаковщик/криптор, который лишь не дает 
 залезть в код программы, но позволяет запустить программу всем .В отличие 
 от крипторов утилита предназначена для того, кто использует программу. 
 Закриптованую программу могут использовать лишь те, кто знает пароль.
 

 Для криптовки был выбран Blowfish за его скорость, прозрачную реализацию и 
 отсутствие необходимых для его работы данных. Шифрование происходит в режиме 
 CBC т.е. когда текущий блок данных XOR'ится с предыдущим и шифруется, и так 
 до конца данных.

 Шифрованию подлежат кодовая секция, данные и импорты. После этого в файл 
 дописывается новая секция, содержащая декриптор/загрузчик, на который и 
 будет скорректирован RVA PE-шника.

 В результате этих операций:
 ---------------------------

 * Файл невозможно запустить без знания ключа.
 * Невозможно определить, что представляет собой программа - код, данные и
   импорты неизвестны, т.е. все пункты, указывающие неким образом на действия 
   программы.
 * На диске содержится лишь криптованый файл, расшифровка происходит 
   непосредственно в памяти. Но это обстоятельство не дает шифровать 
   инсталляторы/шифровщики.

 Действия загрузчика/декриптора:
 ------------------------------

 0. Получить ключ.
 1. Попытаться декриптовать некоторые секции.
 2. Загрузить все используемые библиотеки и настроить импорт.
 4. Если требуется,то использовать фиксапы и настроить адреса.
 5. Если есть Tls callback ,то пройти по списку функций.
 6. Передать управление программе.

 Конечно, можно потрассировать декриптор, но ключ естественно не хранится в 
 нем,а хранится лишь crc32 на каждую секцию. Т.е. после ввода passkey'я 
 происходит декриптовка всей секции, затем сравнивается crc декриптованой 
 секции и оригинальной и если что-то не так, то все отдыхают. 
 Почему не crc ключа? А для того, чтобы нельзя было просто подобрать ключ, 
 удовлетворяющий этому crc т.к. crc можно подсчитать намного быстрее, чем 
 декриптовать целую секцию.

 Чтобы не было желания анализировать декриптор, он просто-напросто 
 пермутируется с помощью LTME.
 
Об ограничениях и проблемах

 Сперва надо сказать о том, что ни ресурсы, ни экспорт не криптуются, да и 
 редко они используются в обычно подлежащих криптовке программах ;). Вообще 
 не криптуются все секции, кроме тех, на которые указывают поинтеры в 
 заголовке файла, именуемые Base of Code,Base of Data,Import Table RVA.

 Если есть TLS ,то адрес индекса TLS меняется, далее callback в заголовке 
 забивается нулем, а callback-процедуры грузятся декриптором "вручную".

 Если программка имеет секции с невыровненым физическим размером, то она не 
 подлежит криптовке - секции как-то не так грузятся windows ,как прописано в 
 заголовке и поэтому лучше не рисковать.

 Подразумевается, что секции следуют в памяти и в файле так, как указано в 
 таблице секций. Да и между заголовком и первой секцией должно быть 
 достаточно места для добавления описателя секции декриптора.

 Т.к. изменяется RVA ,то он должен быть не 0 ,иначе такой файл не
 рассматривается как кандидат в зашифрованные.

 Судя по всему, win2k не грузит программы без импортов и т.к. импорты 
 настраиваются  декриптором, а в заголовке стоит 0 ,то таким образом 
 зашифрованные файлы не будут запускаться на win2k.