информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Перехват API - окончание 22.10.01 23:24  Число просмотров: 949
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> 5) на мой вопрос про соглашение stdcall ты сам ответил, что
> должны сохраняться esi, edi, ebx, edx
> так что нужно их сохранять и восстанавливать
> а уж это сделать не на чистом асме не получится

это делает компиллер.
Вставить код прописывающий обратно код заглушки не проблема :))), я просто показал "сырец" .. минимум того что нужно... Код абсолютно рабочий и универсальный.. насчет извлечения параметров - ты прав, твой метод наверное лучше...
<programming>
[Win32] Перехват API - окончание 22.10.01 07:13  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вот оно, свершилось! После долгих и продолжительных родов с Божьей помощью и помощью умелых акушеров ;) удалось таки произвести на свет красивую(вроде бы!), универсальную и маленькую процедурку перехвата вызовов API:

typedef void (*tagAPIAddr)();
tagAPIAddr APIAddress;
BYTE pbOpcode[5]={0};

DWORD dwNumOfParams;

void Stub(void){
memcpy(APIAddress, pbOpcode, 5);
PDWORD dwParamPtr;
PDWORD dwEsp;
DWORD dwBeforeCall;
DWORD dwRetAddr;
DWORD dwEbpSaved;
DWORD dwNumParams=dwNumOfParams*4;
MessageBox(NULL,"Test","ExitProcess called!",0);
__asm{
mov dwEbpSaved,ebp
mov eax,[ebp]
mov eax,dwRetAddr
lea eax,[ebp+8]
mov [dwParamPtr],eax
mov eax, [ebp+12]
mov dwBeforeCall,eax
sub esp, dwNumParams
mov [dwEsp],esp
}
memcpy(dwEsp,dwParamPtr,dwNumParams);
__asm{
call APIAddress
mov esp, dwBeforeCall
mov ecx, dwRetAddr
mov ebp, dwEbpSaved
jmp ecx
}
}

int _cdecl main(int argc, char* argv[]){

PBYTE pbAPI=(PBYTE)trap002;GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");
APIAddress=(tagAPIAddr)pbAPI;

memcpy(pbOpcode,pbAPI,5);
SetMemoryRWAccess((LPVOID)pbAPI);

pbAPI[0] = 0xE9;
PDWORD pdwAPI = (DWORD *)&pbAPI[1];
pdwAPI[0] = (DWORD)Stub - (DWORD)pbAPI - 5;

dwNumOfParams=1;

return 0;
}
[Win32] Перехват API - окончание 22.10.01 08:55  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
1) всё-таки способ доступа к аргументам который я предложил более универсальный:
void Stub(unsigned arg)
{
unsigned* arg1 = &arg;
// unsigned* arg_i = arg1+i;
мало ли чего там компилятор навставляет вначале функции
а так компилятор сам всегда пропишет правильный адрес

2) а ты пробовал запустить точно то, что ты тут написал ?
может быть сказывается бессонная ночь и я просто не въезжаю в код :)
но по-моему некоторые вещи немного странные
> mov eax,[ebp]
> mov eax,dwRetAddr
> lea eax,[ebp+8]

3) в такой реализации ловушка будет вызвана только один раз,
а у меня ловушка снималась только когда нужно её снять

4) вот высплюсь и попробую родить ловушку на асме, как положено :)
тогда уж точно она будет работать под разными компиляторами и с разными функциями
если кто-нить до меня не родит :)
Или я тупой или исчо что-то... 22.10.01 16:07  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Что-то сомнительный код... А он работает?
5) 22.10.01 08:58  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
5) на мой вопрос про соглашение stdcall ты сам ответил, что должны сохраняться esi, edi, ebx, edx
так что нужно их сохранять и восстанавливать
а уж это сделать не на чистом асме не получится
Перехват API - окончание 22.10.01 23:24  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> 5) на мой вопрос про соглашение stdcall ты сам ответил, что
> должны сохраняться esi, edi, ebx, edx
> так что нужно их сохранять и восстанавливать
> а уж это сделать не на чистом асме не получится

это делает компиллер.
Вставить код прописывающий обратно код заглушки не проблема :))), я просто показал "сырец" .. минимум того что нужно... Код абсолютно рабочий и универсальный.. насчет извлечения параметров - ты прав, твой метод наверное лучше...
1




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


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