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

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

BUG(O)R

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


1. Длина данных на выходе должна быть равна длине данных на входе. Это условие необязательное, но, чтобы не заморачиваться с выделением дополнительной памяти и исправлением еще большей части кода, лучше это условие взять за правило.

2. Если пароли сохраняются в ini или строковым параметром в реестр, то на выходе все символы должны быть печатаемыми (то есть не должно быть символов, чей код меньше 32). В нашем случае это условие является обязательным.

Так, теперь нам надо найти место в коде, где программа считывает или записывает пароль в ini-файл. Давай зацепимся за строку NPass, то есть за название параметра в Config.ini. Очевидно, что если эта строка где-нибудь вызывается, то программа хочет или прочитать, или сохранить зашифрованный пароль. ПКМ > Search for > All referenced text strings и делаем поиск по слову «NPass». Мест в коде, где вызывается эта строка, довольно много, так что ставим бряки (выделяем найденную строку и нажимаем F2) на все эти места. Теперь давай подумаем, в каких случаях программа будет обращаться к данным, которые принадлежат параметру NPass:

Чтение:

- При загрузке учетной записи.

- При изменении учетной записи.

Запись:

- при создании новой учетной записи с галочкой «Save Password»;

- при изменении пароля на номере.

Вроде ничего не упустил. Хорошо, давай проделаем все эти действия и посмотрим, в каком месте сработает прерывание, параллельно записывая, при каких действиях и в каких местах они сработали. Я проделал все эти действий многократно и получил вот такой результат (в 99% случаях у тебя результат будет таким же):

Первое срабатывание

00622A12 PUSH EAX

00622A13 MOV ECX,qip.00622C04

; "NPass" - здесь сработало прерывание.

...

00622A21 CALL DWORD PTR DS:[EDI+4]

; <qip.@TIniFile@WriteString> - При создании новой учетной записи.

Второе срабатывание

006584E6 PUSH EAX

006584E7 MOV ECX,qip.006585A8

; "NPass"

...

006584F5 CALL DWORD PTR DS:[EDI+4]

; <qip.@TIniFile@WriteString> - При смене пароля на уине.

Третье срабатывание

0062204B PUSH EAX

0062204C MOV EDX,qip.00622568 ; ASCII "Main"

00622051 MOV ECX,qip.00622578

; "NPass" - Вот здесь сработало прерывание.

...

0062205A CALL DWORD PTR DS:[EDI]

; <qip.@TIniFile@ReadString> - При загрузке или смене учетной записи

0062205C MOV EAX,DWORD PTR SS:[EBP-38]

0062205F LEA EDX,DWORD PTR SS:[EBP-34]

Последнее срабатывание

00622A74 PUSH EAX

00622A75 MOV EDX,qip.00622C14 ; ASCII "Main"

00622A7A MOV ECX,qip.00622C04

; "NPass"

...

00622A83 CALL DWORD PTR DS:[EDI+4]

; <qip.@TIniFile@WriteString> - После нажатия на кнопку «Подключиться»

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