Главная страница
    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.039 c
3-1077110672
VictorT
2004-02-18 16:24
2004.03.28
Опять избавление от вложенного запроса. На этот раз внутри UPDATE


1-1079012018
Budy
2004-03-11 16:33
2004.03.28
Обработчик для кнопок


1-1078815743
_Lamer_
2004-03-09 10:02
2004.03.28
Запуск программы


7-1073473649
Seldon
2004-01-07 14:07
2004.03.28
Язык системы


14-1074855022
mfender
2004-01-23 13:50
2004.03.28
Беда!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский