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





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[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