Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Отслеживание подмены адреса функции в .exe, Отследить подмену адреса в .exe 
:(
    Опции темы
MuForum
Дата 24.11.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



Доброе время суток!
- Столкнулся со следующей проблемой, есть программа(снифер), которая присоединяется к процессу и пропускает через себя все пакеты.
- Через 'Rootkit Unhooker' отследил, что программа подменяет адрес функции в main.exe.
Код

Hooked Object: [PID]ApplicationName-->>HookDll-->>HookFunction
Hook Address and Location: OriginalAddress-->>HookAddress - [PathToHookDLL]
Type of Hook: Inline - RelativeJump

- Правильно ли я описал всё?

P.S. -> Пробовал отследить это в таблице импорта main.exe, но результат отрицательный, более того, смотрел через LordPE - там тоже ничего не видно. (Адреса функции WS2_32.DLL сохраняются)
- Мне необходимо как-то отслеживать эти изменения адресов функции как в 'Rootkit Unhooker'.

P.S. -> Буду благодарен за любые советы и направления.

# Добавлено: И если кто-то может, очень хотелось бы узнать, как выполняет это отслеживание сама программа 'Rootkit Unhooker'. (Использует драйвер?)

Это сообщение отредактировал(а) MuForum - 24.11.2008, 21:57


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
jonie
Дата 24.11.2008, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



а адреса функций никто и не меняет (зафига?) просто в начало функции ставится заглушка - переход на нужный код (far jump) (с запоминанием затертого кода, конечно) и внедряется dll в процесс (inject).
собстна все. а далее нечто вроде
Код

origin_funct_address: jmp @toMyFunction  //тут было начало функции, которое перенеслось в конец нашей заглушки
....

@toMyFunction:
push origin_funct_address
blahblahblah

restore origin code (например push EBX и последующие комманды которые мы затерли делаются тут)
ret



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
MuForum
Дата 24.11.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

Репутация: нет
Всего: 4



Цитата(jonie @ 24.11.2008,  23:30)
а адреса функций никто и не меняет (зафига?) просто в начало функции ставится заглушка - переход на нужный код (far jump) (с запоминанием затертого кода, конечно) и внедряется dll в процесс (inject).
собстна все. а далее нечто вроде
Код

origin_funct_address: jmp @toMyFunction  //тут было начало функции, которое перенеслось в конец нашей заглушки
....

@toMyFunction:
push origin_funct_address
blahblahblah

restore origin code (например push EBX и последующие комманды которые мы затерли делаются тут)
ret

Как данную операцию можно отследить?

P.S. -> Если можешь кинуть какие-то имена функций, ссылки, чтобы почитать - было бы здорово.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
jonie
Дата 25.11.2008, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



внедряться например в каждый процесс и следить за ним (так, например, делают многие антивирусы\firewalls)... но С++ тут вовсе не при чем...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
REZiaMIX
Дата 25.11.2008, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Цитата(MuForum @ 24.11.2008,  23:34)
Как данную операцию можно отследить?

P.S. -> Если можешь кинуть какие-то имена функций, ссылки, чтобы почитать - было бы здорово.

Сильно не уверен , но если каким то образом загрузить длл , в которой присутствует перехватываемая функция , считать ее начало , и сравнить с тем , что находится в памяти у нашего процесса. Но тут надо знать формать PE

Точно выйдет , если в другом процессе загрузить эту же длл , получить адрес перехватываемой функции , считать первые например 6 байт кода и сравнить с кодом из нужного процесса. Но во 
1) способов перехвата много
2) не обязательно будет 6 байт , может быть это будет int 3 
3)Кривой выход, 100% можно без лишнего процесса) 

Но то что надо сравнить начало функций перехватываемой , и нормальной  - думаю это правильно.

Это сообщение отредактировал(а) REZiaMIX - 25.11.2008, 13:09


--------------------
user posted image
PM MAIL   Вверх
REZiaMIX
Дата 26.11.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 3.11.2007

Репутация: нет
Всего: 4



Написал мимо(

Это сообщение отредактировал(а) REZiaMIX - 26.11.2008, 13:57


--------------------
user posted image
PM MAIL   Вверх
jonie
Дата 27.11.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



Detours под win есть от M$-а, как раз библиотека для перехватов...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Starikan
Дата 27.11.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 25.10.2007

Репутация: нет
Всего: -15




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.