Иммунитет к троянам 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> - После нажатия на кнопку «Подключиться» |