Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #94, ОКТЯБРЬ 2006 г.

Иммунитет к троянам

BUG(O)R

Хакер, номер #094, стр. 094-086-5


При вызове @TIniFile@WriteString пароль сохраняется в Config.ini, в параметр NPass, а при вызове @TIniFile@ReadString считывается оттуда же. Перед вызовом WriteString надо зашифровать пароль. Как ты можешь видеть из примеров, приведенных выше, таких вызовов у нас три. Во всех участках кода вначале идет команда push eax. Именно она кладет в стек данные, которые будут записаны в ini, в параметр NPass. Нам надо зашифровать их до вызова WriteString. Начнем с участка кода под номером 1. Итак, будем делать прыжок в конец секции кода после команды push eax, затирая команду, следующую за ней:

00622A12 PUSH EAX

; Прыжок в конец секции кода, в область с нулями

00622A13 JMP qip.00660EF3

А по адресу 00660EF3 пишем следующий код:

; Вначале по адресу 660EA6 мы записали адрес функции Encrypt.

; Теперь пришло время ее вызвать. Напомню, что одним параметром

; в эту функцию передается указатель на данные для шифрования,

; но он уже есть в стеке.

00660EF3 CALL DWORD PTR DS:[660EA6]

; Наша процедура использует один параметр из стека, значит,

; после ее выполнения стек увеличится на 4 байта, а нам это не нужно.

00660EF9 SUB ESP,4

00660EFC MOV ECX,qip.00622C04

; ASCII "NPass" ; Эта команда была переписана нашим прыжком

; в эту область, но выполнить мы ее все равно обязаны.

00660F01 JMP qip.00622A18

; Продолжаем выполнение программы на адрес 00660EF3 команды.

С участком кода под номером 2 поступаем аналогично:

006584E6 PUSH EAX

006584E7 JMP qip.00660F06

По адресу 00660F06 пишем абсолютно аналогичный код:

00660F06 CALL DWORD PTR DS:[660EA6]

00660F0C SUB ESP,4

00660F0F MOV ECX,qip.00622C04

; ASCII "NPass"

00660F14 JMP qip.006584EC

С участком под номером 4 та же история:

00622A74 PUSH EAX

00622A75 JMP qip.00660F2B

А в адрес 00660F2B пишем:

00660F2B CALL DWORD PTR DS:[660EA6]

00660F31 SUB ESP,4

00660F34 MOV EDX,qip.00622C14 ; ASCII "Main"

00660F39 JMP qip.00622A7A

C участком 3 история немного иная: тут у нас идет считывание, значит, прыжок в область с нашим кодом надо делать после вызова ReadString, то есть на месте команд, которые идут по адресу 0062205C. Делаем прыжок:

0062205C JMP qip.00660F19

00622061 NOP

По адресу 00660F19 — следующий код:

; Сейчас по адресу [EBP-38] находится указатель на

; данные, которые были считаны из параметра NPass файла Config.ini

00660F19 MOV EAX,DWORD PTR SS:[EBP-38]

; Теперь кладем указатель на данные в eax

00660F1C PUSH EAX

00660F1D CALL DWORD PTR DS:[660EAA] ; И вызываем Decrypt

00660F23 LEA EDX,DWORD PTR SS:[EBP-34] ; Выполняем затертую команду

00660F26 JMP qip.00622062 ; И продолжаем выполнение программы

Вот и все. Сохраняем все изменения в файле и создаем новую учетную запись. Теперь при любом считывании или записи в файл Config.ini, параметр NPass данных, они будут перед этим проходить через наши процедуры, которые будут их дополнительно зашифровывать или расшифровывать.

Заключение

Напоследок хочу отметить, что данная технология является универсальной. Даже не столько в плане дополнительной защиты паролей, сколько в плане защиты сохраняемой информации на диск различными программами. Во многих программах алгоритмы шифрования и хранения паролей довольно примитивны, к тому же если программа довольно знаменита, то эти алгоритмы обязательно будут выдернуты из программы. При этом софтина может удовлетворять всем вашим требованиям, однако в XXI веке информация играет ключевую роль в нашей жизни, поэтому мы должны защищать ее всеми возможными способами. Хочу отметить также, что, например, в довольно знаменитом файловом менеджере Total Commander есть замечательный FTP-клиент, которым я пользуюсь. Все настройки учетных записей хранятся в ini-файле. Так же, как и в QIP'e, алгоритм расшифровки этих паролей давно известен, поэтому домашним заданием будет исследовать эту программу самим (это не намного сложнее, чем QIP). Просто найди места в коде, где считывается и сохраняется зашифрованный пароль, и потом проделай с этими участками кода то же самое, что мы выполнили выше.

Назад на стр. 094-086-4  Содержание  Вперед на стр. 094-086-6