![]() |
Создание "плагинов" для QIP
Часто в программах мгновенного обмена сообщениями отсутствуют просто необходимые функции, а разработчики даже не планируют их добавлять. Для расширения функционала можно воспользоваться SDK, однако его практически невозможно получить, а тот, который находится в свободном доступе даже не допускает отправки сообщений.
Сейчас мы будем исправлять это досадное положение и напишем плагин, который будет обрабатывать, вводимый в QIP логин и пароль. Для этого нам понадобятся: 1) QIP (на момент написания версии 8092) 2) Какой-нибудь компилятор (я использовал masm) 3) OllyDbg 4) LordPE Для начала напишем сам плагин, который представляет собой динамическую библиотеку, экспортирующую функцию GetInf, которая в качестве параметров получает виртуальные адреса логина и пароля. Вот пример реализации на asm: Код:
.386Скомпилированную библиотеку кладем в папку рядом с qip.exe. Теперь добавим наш плагин в таблицу импорта кипа. Для этого запускаем LordPE, жмем кнопку PE Editor и выбираем qip.exe. Записываем ImageBase (00400000 пригодится позже). Далее нажимаем Directories и ,напротив надписи Import Table жмем "...". В верхней части появившегося окна из меню, появляющегося при нажатии правой кнопки мыши, выбираем пункт add import. Вписываем имя плагина (fQIP.dll) и название функции (GetInf), нажимаем +, потом OK. В верхней части окна выбираем имя добавленной библиотеки, а в нижней- видим импортированную функцию. Записываем для нее ThunkRVA (у меня 00328012). Закрываем все окна Lord PE, нажимая кнопку Save, везьде где она есть. Запускаем qip и видим сообщение об ошибке. Проверка CRC. Как это обойти можно посмотреть здесь http://forum.antichat.ru/thread106619.html. Я пошел более простым путем и поставил bp MessageBoxA в плагине CommandLine. Нажал F9 и попал в MessageBoxA, потом вернулся к коду программы по Alt+F9, закрыв перед этим появившееся сообщение. Далее исправляем условный переход, как написано по ссылке выше и сохраняем изменения. Теперь qip запускается нормально. Запускаем qip под отладчиком и ставим bp MessageBoxA. Оставляем поле пароль не заполненными и нажимаем кнопку "Подключиться". Вываливаемся в отладчике и переходим по Ctrl+F9 на 2 уровня вверх, не забыв закрыть окно об ошибке. Попадаем сюда: Код:
00624D18 |. E8 D740E7FF CALL qip.00498DF4Код:
00624D1D |. 837D F4 00 CMP DWORD PTR SS:[EBP-C],0Код:
00624CFE |. 837D F8 00 CMP DWORD PTR SS:[EBP-8],0Код:
006941AC 0000 ADD BYTE PTR DS:[EAX],ALКод:
;Было:Код:
;Сохраняем регистры в стек на всякий случайЗапускаем кип, вводим логин и пароль, жмем подключение и видим в окне полученные данные. Теперь его можно использовать по назначению. Кроме qip этот метод я опробовал на mail агенте и icq 5.1. |
Немного не понятно зачем длл. всё равно ведь приходится патчить. Мне кажеца лучше засунуть сразу всё в основной фаил).
|
А отправку на почту тоже в отладчике писать? Может у кого-то терпения и хватит, но свободного места в файле может не хватить. А так в dll можно писать сколько угодно и на любом языке.
|
Цитата:
Цитата:
|
Наглым образом украл мою идею. :) Я подобное хотел написать, но времяни небыло. В этоге время нашлось только на то, чтобы описать как патчить QIP от CRC
А так понравилось как реализовано, так что +5 |
Цитата:
длл имхо не прикольно. |
Цитата:
|
zeppe1in, преимущество длл в скорости написания кода, инжектить код в ехе напрямую требует базонезависимого кода
|
Хе-хе, тут есть бага)
Если стоит галочка "Сохранять пароль", то в поле пароль записано (не помню точно) что-то типа "<:HIDDEN:>" и оригинальный пароль проявляется только на стадии уже попытки входа. Столкнулся с этим, когда сам qip правил. Так что надо по-хитрее инжектиться. |
При помощи плагина Ultra String Reference нашел надпись <:hidden:>.
Код:
00620005 |> 83BB 8C030000 >CMP DWORD PTR DS:[EBX+38C],0 ; Проверяется есть ли парольКод:
00620005 8B93 8C030000 MOV EDX,DWORD PTR DS:[EBX+38C] |
| Время: 09:39 |