Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

FindNextFileA   Найти похожие ветки 

 
_echo ©   (2004-01-13 16:43) [0]

помогите pls (кодом) поймать вызов функции другой(чужой) программой (любой)


 
AKul ©   (2004-01-13 17:55) [1]

Смотря для чего это надо.
1. Можно перехватить вызов API-функции FindNextFileA известной программы.
2. Либо установить хук файловой системы - кажется он доступен только из уровня ядра (уровень привилегий = 0). Это конечно сильная штука (можно контролировать все функции файловой системы) и пользуется ей для написания вирусов - а это не хорошо!!!


 
_echo ©   (2004-01-13 17:59) [2]

я предполагаю использовать по первой причине, но с хуками, моя программа ловит messagebox`ы, а finnextfile не получается отловить


 
BiN ©   (2004-01-13 18:12) [3]

Рихтер
http://softs.h10.ru/literature.shtml?topic=visual&book=1&page=head22.htm


 
_echo ©   (2004-01-13 18:12) [4]

к примеру, я хочу, чтобы пользователь не мог удалить те файлы, которые удалять не должен, например системные.
Это не вирус!


 
BiN ©   (2004-01-13 18:14) [5]

в ХР: установи права доступа пользователям


 
_echo ©   (2004-01-13 18:29) [6]


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) не могу отловить, может она как-либо защищена


 
_echo ©   (2004-01-13 18:32) [7]

работает, в том смысле, что ловит все messagebox`ы
но, когда переписываю, для отлавливания FindNextFile - перестаёт работать!
может, чем-нибудь можете помочь?


 
AKul ©   (2004-01-14 09:48) [8]

Если это пробовалось под WinXP, то посмотри на адрес перехваченой FindNextFileA(W), думаю все станет ясно.


 
_echo ©   (2004-01-14 11:57) [9]

Со всем справился, кроме того, что скрывает следующий файл из списка, а не тот, что указан мною, но работает ведь!
Главная моя ошибка была в указании библиотеки, содержащей функцию findnextfile(вместо kernel32.dll, стояла user32.dll).

Спасибо всем поучаствовавшим!



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
14-1077690128
Kerk
2004-02-25 09:22
2004.03.28
Злой автобус


1-1078393062
Бывающий
2004-03-04 12:37
2004.03.28
Как средствами ShellExecute распечатать документ?


14-1078001008
VID
2004-02-28 23:43
2004.03.28
Мне нужен ваш совет


1-1078505662
Ivolg
2004-03-05 19:54
2004.03.28
Splah form


1-1078821828
Dima_________
2004-03-09 11:43
2004.03.28
Работа с Word