информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Новая статья: Перехват вызовов функций. 26.10.01 11:51  Число просмотров: 934
Автор: SerpentFly <Vadim Smirnov> Статус: Member
<"чистая" ссылка>
> если мне нужно посмотреть весь путь который проходит запрос
> к примеру от функции ReadFile до самого низа и обратно,
> т.е. отслеживать вызовы внутренних процедур ОС углубляясь
> все дальше и дальше и возвращаясь обратно на верх ...

В полном обьеме не так просто как ты думаешь, а для драйверов например вот http://www.ntndis.com/downloads/DevFilter.zip, работает с NT 4.0 и выше.
<programming>
Новая статья: Перехват вызовов функций. 25.10.01 04:50  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
Новая статья: Перехват вызовов функций.

В статье приводится описание одного из способов перехвата вызовов функций. Описываемый механизм перехвата - замена первых 5 байт перехватываемой функции на код команды jmp. Обсуждаются некоторые важные моменты, возникающие при реализации перехвата. Исходный текст на C++ варианта ловушки прилагается.

Ознакомиться можно здесь: http://www.uinc.ru/articles/26/index.shtml

http://www.uinc.ru/articles/26/index.shtml
Новая статья: Перехват вызовов функций. 26.10.01 10:47  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Чо то я ничо не понимаю!
Или у меня чтото не работает или эта прога не работает,
Комилю прогу,
и она мне выводит мессагбоксы
Calling MessageBox() 1
второй мессагбокс
Calling MessageBox() 2
и третий мессагбокс
Calling MessageBox() 3

Так должно и быть?
сюдя по коду мессагбокс Calling MessageBox() 2 должен заменятся на другое, но чото этого не происходит
Поправтеменя если я чонить не понял
Новая статья: Перехват вызовов функций. 26.10.01 15:52  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
последовательность дейстий при которой точно работает :
(если что то делаешь не так, то разбирайся сам)
1) скачиваешь (! мало ли чего ты там наменял) архив с исходниками
2) распаковываешь его
3) даблкликаешь файл apihook.dsp
4) в VC нажимаешь Ctrl+F5 или на тулбаре кнопочку с красным восклицательным знаком :)

всё должно работать
Новая статья: Перехват вызовов функций. 26.10.01 16:42  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> последовательность дейстий при которой точно работает :
> (если что то делаешь не так, то разбирайся сам)
> 1) скачиваешь (! мало ли чего ты там наменял) архив с
> исходниками
> 2) распаковываешь его
> 3) даблкликаешь файл apihook.dsp
> 4) в VC нажимаешь Ctrl+F5 или на тулбаре кнопочку с красным
> восклицательным знаком :)
>
> всё должно работать
Всё так и сделал. скачал файл с www.uinc.ru
кликнул по apihook.dsp
нажал на Ctrl + F5
Оно скомпилилось и запустилось,
а дальше было то, о чом я уже писал выше
НУ не работает она!!
Новая статья: Перехват вызовов функций. 26.10.01 17:42  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
у меня работает
судя по тому, что больше никто не пишет про глюк и у других работает

если хочешь можешь попробовать посмотреть в дебагере где происходит ошибка:
1) входишь в функцию CAPIHook::Attach()
2) смотришь какая из функций Win32 обламывается
3) посмотри какой код ошибки возвращает ::GetLastError()
Новая статья: Перехват вызовов функций. 26.10.01 17:59  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
При трассировке при входе в Attach оно нигде не возвращает false, но при трассировке нельзя вызвать мессагбокс после аттача, типа Can't traced to dll
А не трейся пишу так:
bool rez = hook.Attach(GetCurrentProcess(), MessageBox, (void*)0x400000,Hook, 55555);
if(rez == false)
{
char buf[0x100];
sprintf(buf, "%d", hook.GetStatus());
MessageBox(NULL, buf, "error", MB_OK);
}
Код ошибки 87
Новая статья: Перехват вызовов функций. 26.10.01 21:08  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Кароче вылетаю вот сдесь:
// enable writing operation
if(!VirtualProtectEx(m_Process, addrOfAPI, 5, PAGE_EXECUTE_READWRITE, &m_OldProtectAPI))
{
m_Status = ::GetLastError();
return false;
}
кажется понял 26.10.01 21:46  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
у тебя в9х ?

там не получится перехватить функции некоторых системных длл

которые лежат в диапазоне адресов 0x80000000 - 0xBFFFFFFF
user32.dll как раз там лежит

в статье об этом написано
наверно пример я не удачный привёл
у меня просто в в2к всё работало :)

но ws2_32.dll например не попадает в эти адреса :)
можешь попробовать там что-нибудь перехватить

удачи
кажется понял 26.10.01 23:02  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
ну вот!!
да у меня 98 маздай,
И кстати, на щот ws2_32.dll - это клёвая идея!!
Вот тока у меня вопросы, переход на адресс такой же ставить - 0x400000??
кажется понял 26.10.01 23:33  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
и вообще, ты не мог бы написать пример со скажем recv ??
А то у меня чото не выходит
Червяка решил писать ;). 27.10.01 01:20  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
кажется понял 27.10.01 00:13  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
да напишу полный пример не только с перехватом функции, но и с нормальным внедрением длл
только чуть попозже
может через несколько дней
щас времени нет
и ещо 27.10.01 01:06  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Что будет, если скажем функция ,которая перехватывается, вызывается одновременно , скажем из разных потоков??
и ещо 27.10.01 01:50  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
> Что будет, если скажем функция ,которая перехватывается,
> вызывается одновременно , скажем из разных потоков??

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

даже если такое произойдёт, то вероятнее всего, что один из потоков вызовет правильную функцию (не вызовется ловушка)

щас думаю можно ли это обойти... :)
и ещо 27.10.01 02:31  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Чо то я не могу перехватить функцию из другого процесса,
почему?? Возможно ли это?
и ещо 27.10.01 02:40  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
> Чо то я не могу перехватить функцию из другого процесса,
> почему?? Возможно ли это?

напиши подробно что делаешь
со всеми деталями

лучше весь код (если не много) :)
и ещо 27.10.01 09:48  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Кароче я в вызове Attach меняю хендл, GetCurrentProcess
на свою функцию получения процесса:

#include <tlhelp32.h>

typedef HANDLE (WINAPI *CREATETOOL)(DWORD,DWORD);
typedef BOOL (WINAPI *FIRST32)(HANDLE,LPPROCESSENTRY32);
typedef BOOL (WINAPI *NEXT32)(HANDLE,LPPROCESSENTRY32);

CREATETOOL CreateToolhelp32Snapshot;
FIRST32 Process32First;
NEXT32 Process32Next;
HANDLE h_th;
HINSTANCE h;
PROCESSENTRY32 pe;

h = LoadLibrary("kernel32.dll");
if(h)
{
CreateToolhelp32Snapshot = (CREATETOOL)GetProcAddress(h, "CreateToolhelp32Snapshot");
Process32First = (FIRST32)GetProcAddress(h, "Process32First");
Process32Next = (NEXT32) GetProcAddress(h, "Process32Next");

if((!Process32Next)|(!Process32First)|(!CreateToolhelp32Snapshot))
{
FreeLibrary(h);
return 0;
}

h_th = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

pe.dwSize = sizeof(pe);
if(!Process32First(h_th, &pe))
{
FreeLibrary(h);
return 0;
}
do
{
CharLower(pe.szExeFile);
if((strstr(pe.szExeFile, path)) && (GetCurrentProcessId() != pe.th32ProcessID))
{
FreeLibrary(h);
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe.th32ProcessID);

}
}
while(Process32Next(h_th, &pe))
;
}
return 0;

Если свой процесс, то всё работает, с чужим - нифига!!
и ещо 27.10.01 10:19  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
сделал пример работы с другим процессом
скоро статья обновится
если хочешь раньше - оставь мыло - пришлю

перехватываю MessageBox, поэтому в в9х это не будет работать :)

но по примеру можешь перехватить любую другую функцию из других длл
(только функция, вызываемая из основной ловушки, у меня тоже на ассемблере написана)
и ещо 27.10.01 13:43  
Автор: Лamo Статус: Незарегистрированный пользователь
<"чистая" ссылка>
кинь на myrmidon@mail.ru
[Win32] и ещо 27.10.01 01:10  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> Что будет, если скажем функция ,которая перехватывается,
> вызывается одновременно , скажем из разных потоков??

а ниче ;) ... веренее все что угодно.. а вот если ты будешь использовать объекты синхронизации типа критических секций то вызовы из разных потоков будут упорядочены и все будет работать намана... тока не забывай о взаимной блокировке.. :)))
1  |  2 >>  »  




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach