Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.02.2010
Сообщений: 6
1

Перехват API, Рихтер

13.09.2010, 08:54. Показов 3312. Ответов 4
Метки нет (Все метки)

Всем доброго времени суток! Собственно такой вопросик... я вот читаю сейчас Рихтера и мне интересен его перехват. Захотелось проделать то же что и он но только с recv() & send(). Поначалу вроде всё спокойно... потом смотрю ну траффик вижу, а вот почему то программы как будто "умирают". То есть параметры которые ловит хук нормальные. Но адрес оригинальной ф-ции нулевой. Собственно оно и не может вызвать оригинальную ф-цию. Я попытался обновить адрес при загрузке библиотеки(ws2_32.dll грузится динамически, вот и у меня стоит хук на загрузку либ и при загрузке смотрю это ли сетевая библиотека и если да то пытаюсь узнать у неё оригинальный адрес), но как видимо результата это не дало. Собственно привожу проекты... буду очень рад помощи.
Вложения
Тип файла: rar Projects.rar (95.3 Кб, 68 просмотров)
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.09.2010, 08:54
Ответы с готовыми решениями:

Перехват API
Сразу код ) DWORD dwProtect = PAGE_READWRITE; BYTE old; BYTE * fPtr; #pragma...

Перехват API функции
Доброго времени суток всем! Уважаемые форумчене помогите решить задачу, я взял функцию MessageBox и...

Перехват API вызовов
Здравствуйте! Пытаюсь перехватить вызов функции CreateFileW и заменить на свою MyCreateFileW. Для...

Перехват API функций
Разработать программу, которая запускает приложение, переданное программе на вход. После запуска...

4
Эксперт С++
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
13.09.2010, 20:41 2
Хотя для себя написанное может выглядеть структурированной понятной речью, для посетителей форума это набор несвязный предложений. Например, непонятно, что такое "оригинальная ф-ция".
Более того, участники форума отличаются крайней ленью и процедура скачивания, распаковывания и просмотра программы обычно крайне обтяживает любого, пытающегося помочь.

Посему крайне рекомендую процитировать здесь куски основные куски кода, в т.ч. где ставится хук, ф-ция перехвата.
Спасибо )
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 12
17.09.2010, 15:03 3
Тоже, под впечатлением от книги Рихтера, решил занятся перехватом функций и столкнулся с проблемой. Инжектил dll через функцию CreateRemoteThread. Написал две разные dll, код практически слизал с разных статей, и вроде бы как обе работают но не дают нужного эффекта. Хукал собственноручно на скоряк написаный для этих целей процесс. Вот собственно его код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "stdafx.h"
#include <windows.h>
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
 TCHAR msg[256];
k:
 printf(">");
 _tscanf(_TEXT("%s"),msg);
 MessageBoxW(NULL,msg,_TEXT("Notice"),0);
 goto k;
return 0;
}
Компилил всё на Visual C++ из студии 2008. Подменял адресс функции MessageBoxW в таблице импорта.
Но как показали испытания процесс всё равно вызывает оригинальную функцию, и плевать хотел на таблицу импорта. Когда я начал отлажывать тестовый процесс-цель хука, то я не поверил своим глазам.

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
00401005  add         byte ptr ___security_cookie (403000h)[ecx],ah 
0040100B  xor         eax,esp 
0040100D  mov         dword ptr [esp+200h],eax 
00401014  push        ebx  
00401015  mov         ebx,dword ptr [__imp__MessageBoxW@16 (4020ACh)] 
0040101B  push        esi  
0040101C  mov         esi,dword ptr [__imp__printf (4020A4h)] 
00401022  push        edi  
00401023  mov         edi,dword ptr [__imp__wscanf (4020A0h)] 
00401029  lea         esp,[esp] 
 TCHAR msg[256];
k:
 printf(">");
00401030  push        offset string ">" (4020F4h) 
00401035  call        esi  
 _tscanf(_TEXT("%s"),msg);
00401037  lea         eax,[esp+10h] 
0040103B  push        eax  
0040103C  push        offset string L"%s" (4020F8h) 
00401041  call        edi  
00401043  add         esp,0Ch 
 MessageBoxW(NULL,msg,_TEXT("Notice"),0);
00401046  push        0    
00401048  push        offset string L"Notice" (402100h) 
0040104D  lea         ecx,[esp+14h] 
00401051  push        ecx  
00401052  push        0    
00401054  call        ebx               <------------------o_O
 goto k;
00401056  jmp         k (401030h)
То есть как я понимаю, в самом начале при инициализации он запоминает адрес как раз из той самой пресловутой таблицы в некий регистр в котором он всё время и хранится.
Assembler
1
00401015  mov         ebx,dword ptr [__imp__MessageBoxW@16 (4020ACh)]
И какбы вызывается по адресу прям из этого регистра, и ни в каких целях этот регистр больше не используется.
Assembler
1
00401054  call          ebx
Рихтер ошибался, или я чегото не учёл? От чего вообще зависит каким именно способом процесс вызывает апишки? При таком раскладе мне не остаётся ничего кроме сплайсинга, а процесс который я хочю хукать запускается через лоудер, который мне неизвестно что делает, но без него целевая программа неработает. Лоудер скорее всего тоже хуки ставит, если я начну код править неизвестно что получится...
0
0 / 0 / 0
Регистрация: 30.09.2010
Сообщений: 4
01.10.2010, 11:01 4
Цитата Сообщение от Killbrum Посмотреть сообщение
...траффик вижу...
А у меня с этим проблемы... я, почему-то, не вижу
Тоже нужно как-то реализовать перехват этих функций. Только, вот, send и recv из ws2_32.dll у меня ничего не ловят. Вы чей трафик видите?
0
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 12
15.10.2010, 11:28 5
2Olorin: попробуй перехватить функции WSASend и WSARecv.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2010, 11:28

Перехват API с возвратом значения
Я тут решил разобраться в перехвате API с помощью инжектированной dll. Спустя 2 дня написал...

Перехват API функций. Таблица импорта
Необходимо лoггиpoвaть вызовы некоторых API-шных функций (для примера CloseHandle) в заданном...

Перехват api-вызова. Ошибка при выполнении
Здравствуйте, есть dll-ка, которая успешно внедряется во все(или почти все) оконные приложения с...

Перехват API вызовов через таблицу импорта
Доброго времени суток. Есть следующая задача. Нужно перехватить вызов некоторых определённых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.