Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.041 c
3-1077201038
STANT
2004-02-19 17:30
2004.03.28
Проблема с кодировкой Paradox-таблиц


1-1078401813
Аноним
2004-03-04 15:03
2004.03.28
Потоки


1-1078642888
elloner
2004-03-07 10:01
2004.03.28
Создать свое событие


4-1073917408
TURKDL
2004-01-12 17:23
2004.03.28
Клавишы


9-1058953838
3d[Power]
2003-07-23 13:50
2004.03.28
Вышла новая версия моей игры Need For Kill - Quake3 в 2D.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский