Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.03.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c