![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
перехват
Powerland © (2004-08-26 00:35:00)необходимо было реализовать перехват вызова некоторых системных функции. в процесс внедряется dll, а затем из неё производится замена адреса перехода на нужную фунцию. но это почему-то не работает. кто-нить встречался с этой проблемой?
хакер_новичок (2004-09-02 21:30:00) [101]Удалено модератором
VMcL (2004-09-02 19:24:00) [102]>> хакер_новичок (02.09.04 18:45) [46]
От кого скрыть?
хакер_новичок (2004-09-02 18:45:00) [103]Удалено модератором
хакер_новичок (2004-09-02 18:24:00) [104]Удалено модератором
Digitman (2004-09-02 18:21:00) [105]
> не так давно начал кадить
оч надеюсь, что не гадить
остальное - завтра
хакер_новичок (2004-09-02 18:19:00) [106]Удалено модератором
хакер_новичок (2004-09-02 18:14:00) [107]Удалено модератором
Digitman (2004-09-02 18:10:00) [108]
хакер_новичок
> шоб прогу спрятать ?
а нахрена ?
> дай
на
пример перехвата NTкуерсусинфо
см. выше
отличий (за исключением имени библиотеки и имени ф-ци) - никаких
хакер_новичок (2004-09-02 17:53:00) [109]Удалено модератором
хакер_новичок (2004-09-02 17:50:00) [110]Удалено модератором
Digitman (2004-09-02 15:40:00) [111]
> kaZaNoVa (02.09.04 15:34) [37]
работает ? ну так - ура ?! .. а куда оно денется !)
kaZaNoVa (2004-09-02 15:34:00) [112][35] Digitman © (02.09.04 14:43) Огромное спасибо !!!
всё получилось !
я правда немного "извратился" и сделал так:
function MyMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
SetApiHook(GetModuleHandle('USER32.DLL'), 'MessageBoxA', pOldMessageBoxA);
result:=MessageBoxA(0, PChar('Call intercepted'#$A#$D'Original text is :'+lpText),
'MessageBoxA intercepted', 0);
pOldMessageBoxA:= SetApiHook(GetModuleHandle('USER32.DLL'), 'MessageBoxA', @MyMessageBoxA);
end;
- я сам удивился, как сделал такую глупую ошибку с рекурсией .. совсем забыл, что функцию, которую вызываю, уже перехватил !
теперь понятно, откуда зависание и безумное потребление памяти !!!
ещё раз спасибо :)
p.s. интересно, почему все в примерах перехватывают messagebox ??
я сперва хотел перехватить sleep() но показалось что слишком "смешная" функция .... :)))
Digitman (2004-09-02 14:45:00) [113]function MyMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
result:= pOldMessageBoxA(0, PChar('Call intercepted'#$A#$D'Original text is :'+lpText),
'MessageBoxA intercepted', 0);
end;
Digitman (2004-09-02 14:43:00) [114]
> kaZaNoVa (02.09.04 14:35) [34]
дык ... еклмн! ... ты ж здесь влупил бесконечную рекурсию !
каждый вызов MessageBoxA приводит к вызову MyMessageBoxA, который , в свою очередь, вновь приводит к вызову MessageBoxA !
это из серии "У попа была собака .."(С)
kaZaNoVa (2004-09-02 14:35:00) [115]function MyMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
result:=MessageBoxA(0, PChar('Call intercepted'#$A#$D'Original text is :'+lpText),
'MessageBoxA intercepted', 0);
end;
begin
SetDebugPriv;
pOldMessageBoxA:= SetApiHook(GetModuleHandle('USER32.DLL'), 'MessageBoxA', @MyMessageBoxA);
if pOldMessageBoxA<>nil then beep;
end.
Digitman (2004-09-02 14:34:00) [116]
> kaZaNoVa (02.09.04 14:32) [32]
> Digitman у меня получилось скомпилировать
> чем это может быть вызвано ?
да всем чем угодно
покажи как используешь ф-цию
kaZaNoVa (2004-09-02 14:32:00) [117]Digitman у меня получилось скомпилировать, и запустить ..
но есть проблема ...
при попытке вызова "перехваченной" функции процесс начинает дико потреблять память и зависает !
- подскажите, чем это может быть вызвано ?
kaZaNoVa (2004-09-01 13:47:00) [118][30] Digitman © (01.09.04 08:41)
thanks, ;)
Digitman (2004-09-01 08:41:00) [119]SIZE_OF_NT_SIGNATURE = SizeOf(DWord);
IMAGE_MAX_SECTIONS = MAXWORD + 1; //Note that the Windows NT loader limits the Number of Sections to 96.
IMAGE_MAX_IMPORT_MODULES = MAXWORD + 1;
IMAGE_MAX_IMPORT_MODULE_ENTRIES = MAXWORD + 1;
type
PImageImportByName = ^TImageImportByName;
TImageImportByName = packed record
Hint: Word;
Name: packed array[0..0] of char;
end;
PImageThunkData = ^TImageThunkData;
TImageThunkData = packed record
case Byte of
0: (ForwarderString: PByte);
1: (Func: PLongWord);
2: (Ordinal: LongWord);
3: (AddressOfData: PImageImportByName);
end;
PImportLookupTable = ^TImportLookupTable;
TImportLookupTable = packed array[0..IMAGE_MAX_IMPORT_MODULE_ENTRIES - 1] of TImageThunkData;
PImportAddressTable = ^TImportAddressTable;
TImportAddressTable = packed array[0..IMAGE_MAX_IMPORT_MODULE_ENTRIES - 1] of TImageThunkData;
PImageImportDescriptor = ^TImageImportDescriptor;
TImageImportDescriptor = packed record
RVAImportLookupTable: PImportLookupTable;
TimeDateStamp: LongWord;
FowarderChain: LongWord;
RVAImportModuleName: LongWord;
RVAImportAddressTable: PImportAddressTable;
end;
kaZaNoVa (2004-08-31 18:49:00) [120]Digitman , осталась проблема с PImageImportDescriptor,PImageThunkData и SIZE_OF_NT_SIGNATURE, будьте добры, помогите :)
please !