![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
FindNextFileA [D6, Win95/98, WinXP]
_echo © (2004-01-13 16:43:00)помогите pls (кодом) поймать вызов функции другой(чужой) программой (любой)
_echo (2004-01-14 11:57:00) [1]Со всем справился, кроме того, что скрывает следующий файл из списка, а не тот, что указан мною, но работает ведь!
Главная моя ошибка была в указании библиотеки, содержащей функцию findnextfile(вместо kernel32.dll, стояла user32.dll).
Спасибо всем поучаствовавшим!
AKul (2004-01-14 09:48:00) [2]Если это пробовалось под WinXP, то посмотри на адрес перехваченой FindNextFileA(W), думаю все станет ясно.
_echo (2004-01-13 18:32:00) [3]работает, в том смысле, что ловит все messagebox`ы
но, когда переписываю, для отлавливания FindNextFile - перестаёт работать!
может, чем-нибудь можете помочь?
_echo (2004-01-13 18:29:00) [4]
library mbintercept;
uses
Windows;
type
jmp_far=packed record
instr_push:byte;
push_operand:dword;
instr_ret:byte;
end;
var
old:array[1..6] of byte;
oldw:array[1..6] of byte;
adr_MessageBoxA:DWORD;
adr_MessageBoxW:DWORD;
written:DWORD;
buf:jmp_far;
bufw:jmp_far;
type mb=function (wnd:HWND;text:PCHAR;hdr:PCHAR;utype:UINT):integer;stdcall;
type mbw=function (wnd:HWND;text:PwideCHAR;hdr:PwideCHAR;utype:UINT):integer;stdcall;
function Intercept_MessageBoxA(wnd:HWND;text:PCHAR;hdr:PCHAR;utype:UINT):integer;stdcall;
var str:pchar;f:mb;
begin
str:=pchar('This Message from MessageBox Interception DLL Sample'#13#10#13#10'Original Message Was: '+text+#13#10#13#10#13#10'P.S WinAPI Rulezz');
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxA),@old,6,written);
@F:=pointer(adr_MessageBoxA);
result:=f(wnd,str,hdr,utype);
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxA),@buf,6,written);
end;
function Intercept_MessageBoxW(wnd:HWND;text:PWideCHAR;hdr:PWideCHAR;utype:UINT):integer;stdcall;
var str:widestring;f:mbw;
begin
str:='This Message from MessageBox Interception DLL Sample'#13#10#13#10'Original Message Was: '+text+#13#10#13#10#13#10'P.S WinAPI Rulezz';
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxW),@oldw,6,written);
@F:=pointer(adr_MessageBoxW);
result:=f(wnd,Pwidechar(str),hdr,utype);
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxW),@bufw,6,written);
end;
procedure InterceptFunctions;
begin
adr_MessageBoxA:=dword(GetProcAddress(GetModuleHandle('user32.dll'),'MessageBoxA'));
if adr_MessageBoxA=0 then
begin
MessageBox(0, 'Can`t get adr_MessageBoxA', 'Error!', 0);
exit;
end;
buf.instr_push:=$68;
buf.push_operand:=dword(@Intercept_MessageBoxA);
buf.instr_ret:=$C3;
ReadProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxA),@old,6,written);
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxA),@buf,6,written);
adr_MessageBoxW:=dword(GetProcAddress(GetModuleHandle('user32.dll'),'MessageBoxW'));
if adr_MessageBoxW=0 then
begin
MessageBox(0, 'Can`t get adr_MessageBoxW', 'Error!', 0);
exit;
end;
bufw.instr_push:=$68;
bufw.push_operand:=dword(@Intercept_MessageBoxW);
bufw.instr_ret:=$C3;
ReadProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxW),@oldw,6,written);
WriteProcessMemory(GetCurrentProcess,pointer(adr_MessageBoxW),@bufw,6,written);
end;
begin
InterceptFunctions();
end.
этот код работает, а FindNextFileA(W) не могу отловить, может она как-либо защищена
BiN (2004-01-13 18:14:00) [5]в ХР: установи права доступа пользователям
BiN (2004-01-13 18:12:00) [6]Рихтер
http://softs.h10.ru/literature.shtml?topic=visual&book=1&page=head22.htm
_echo (2004-01-13 18:12:00) [7]к примеру, я хочу, чтобы пользователь не мог удалить те файлы, которые удалять не должен, например системные.
Это не вирус!
_echo (2004-01-13 17:59:00) [8]я предполагаю использовать по первой причине, но с хуками, моя программа ловит messagebox`ы, а finnextfile не получается отловить
AKul (2004-01-13 17:55:00) [9]Смотря для чего это надо.
1. Можно перехватить вызов API-функции FindNextFileA известной программы.
2. Либо установить хук файловой системы - кажется он доступен только из уровня ядра (уровень привилегий = 0). Это конечно сильная штука (можно контролировать все функции файловой системы) и пользуется ей для написания вирусов - а это не хорошо!!!