![]() |
|
Модераторы: bsa |
![]()
|
|
| webprofusa |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.10.2011 Репутация: нет Всего: нет |
Добрый день!
Прошу прощения заранее, если текст ниже вам покажется бредом, я только начинаю знакомство с программированием на таком уровне. Вообщем Н/У: Имеется приложение которое отсылает зашифрованные пакеты стороннему серверу функциями send, а также получает зашифрованный ответ от сервера функциями recv. Алгоритм шифрования и дешифрования неизвестен. Задачи 1) получить уже дешфированный пакет пришедший от стороннего сервера 2) зашифровать свой пакет функциями приложения для отправки на сторонний сервер Домыслы Начнем с ответов стороннего сервера, чтобы расшифровать пришедший ответ, приложению потребуется прогнать его через свою функцию дешифровки, по логике вещей эта функция(дешифровки), должна идти практически сразу за вызовом функции recv и иметь как минимум два параметра(указатель на данные, и размер данных), запустив IDA Pro, и разложив там нужное мне приложение, я нашел адрес функции recv, примерно так:
видим что данную функцию вызывают в двух местах: sub_549FA0 и sub_54A930 (Вопрос 1: правильно ли я понимаю смысл данной записи?), в функции sub_549FA0 дополнительных вызовов функций похожих на функции дешифровки я не нашел( а вот в функции sub_54A930 есть что-то интересное:
На мой взгляд sub_548840 и есть функция дешифровки пакета, отчасти в этом меня убедил ее код:
Вопрос 2: как думаете вы, уважаемы эксперты? Итак нужная нам функция найдена(так ли это?)), осталось сделать следующее: 1) создать dll для внедрения в исследуемое приложение 2) перехватить вызов функции recv 3) получить данные от стороннего сервера 4) запустить функцию sub_548840 передав в качестве параметра указатель на полученные данные и их размер(Вопрос 3: правильно ли я понимаю входные параметры?) Главный вопрос: С 1-3 проблем вообще никаких не возникает, все ультра просто, получаю зашифрованные данные, но вот как мне запустить найденную мной при дизассемблировании функцию? Я знаю ее адрес, но это ж адрес в exe файле, в памяти понятное дело другой будет, вот не пойму никак( пните пожалуйста что почитать можно, или если не трудно помогите примерчиком. Заранее всем экспертам огромное спасибо) |
||||||
|
|||||||
| hawk3500 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 246 Регистрация: 6.2.2009 Репутация: нет Всего: 2 |
1)
не обязательно что только в двух. Зайдите в IDA в поис, выбирите поиск текста и ищите recv 2) ИМХО для получения адреса функции exe файла, надо сделать LoadLibrary и прибавить к полученному адресу, адрес смещения функции. 3)Лучше бы Вы скинули листинг программы на ассемблере...так понятней было бы --------------------
воин dzen'a |
|||
|
||||
| webprofusa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 29.10.2011 Репутация: нет Всего: нет |
hawk3500, спасибо огромное) я сщас наверное ниже буду тупить, отнеситесь пожалуйста с пониманием к новичку, но все таки:
1) спасибо, понятно. Но функция вроде б нужная найдена так что вопрос отпадает) 2) (внизу поста листинг функции на асме) кликнув на адрес функции 00548840, выбираю в меню проги file offset, получаю: 147C40 - я так понимаю это и есть требуемое смещение? вопрос по loadLibrary - функция ж вродеб подгружает библиотеки? а у меня ситуация обратная, я внедряю свою длл(в которой и хочу запустить найденную функцию), что мне тогда передать в параметры loadLibrary и поможет ли это мне для получение стартового адреса? что-то мне подсказывает что нет... могу ли сделать следующим образом в таком случае: а) получить смещение для требуемой функции=147C40, б) получить смещение для функции recv=755234, в) вычислить их разницу: 755234-147C40=60D5F4, г) вбить это смещение(60D5F4) в константу в моей dll д) вычислить смещение(х) по файлу(при запущенном приложении и внедренной длл) функции recv - как его вычислить внятных примеров увы не нашел(((( е) получить расчетом смещение по файлу искомой функции: x+60D5F4=z, имея смещения z вычислить адрес функции(addr) - как имея смещение, получить адрес? ж) присвоить объявленому в моей длл указателю на прототип искомой функции адрес addr з) запустить объявленный прототип. Итого в сухом остатке: 1) правильно ли я понимаю алгоритм в моей ситуации? 2) как вычислить смещение функции объявленной в работающем приложении из подгруженной в него "левой" длл? 3) как имея смещение функции получить адрес функции? заранее спасибо) P.S. код предполагаемой функции дешифровки пакетов:
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |