Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Перехват вызовов API-функций на Delphi №2

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Обсуждение статей] >> Перехват вызовов API-функций на Delphi №2
Имя
Сообщение << Старые топики   Новые топики >>
Перехват вызовов API-функций на Delphi №2 - 2009-07-26 05:49:52.303333   
ArtAdmin

Сообщений: 11556
Оценки: 14
Присоединился: 2007-01-17 16:55:01.430000
Обсуждение статьи "Перехват вызовов API-функций на Delphi №2"
Post #: 1
RE: Перехват вызовов API-функций на Delphi №2 - 2009-07-26 05:49:52.430000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Фигасе статейка. Сложновато все как-то.
Post #: 2
RE: Перехват вызовов API-функций на Delphi №2 - 2010-06-25 14:24:23.690000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Офигеть. Слооожно оно.
Post #: 3
RE: Перехват вызовов API-функций на Delphi №2 - 2010-11-07 22:29:34.183333   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Я сам только начинаю winapi и без комментариев как-то сложно все понять.
Post #: 4
RE: Перехват вызовов API-функций на Delphi №2 - 2010-11-07 22:31:35.016666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Но автору спасибо сейчас буду новые функции тестировать.
Post #: 5
RE: Перехват вызовов API-функций на Delphi №2 - 2010-11-07 23:22:32.570000   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Не хватает функций:
uses TLHelp32;

const
OPCODE_PUSH=$68;
OPCODE_CALL=$15FF;



function GetCodeBase(CodeSize: integer; pID: integer): Pointer;
var
hProcess: integer;
begin
hProcess:=OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, false, pID);
result:=VirtualAllocEx(hProcess, nil, CodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
CloseHandle(hProcess);
end;

function GetPidByName (szName:pchar):DWORD;
var
hProcessSnap:THANDLE;
pe32:TProcessEntry32;
dwRet:DWORD;
begin
hProcessSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if (hProcessSnap = INVALID_HANDLE_VALUE) then
begin
Result:=0;
Exit;
end;

pe32.dwSize:=sizeof(pe32);
dwRet:=0;
if Process32First(hProcessSnap,pe32) then
begin
repeat
if UpperCase(strpas(szName))=UpperCase(pe32.szExeFile) then
begin
dwRet:=pe32.th32ProcessID;
break;
end;
until (Process32Next(hProcessSnap,pe32)=FALSE);
end;
CloseHandle(hProcessSnap);
Result:=dwRet;
end;

function ExCodeInRemoteProcess(pCode: Pointer; CodeSize: integer; CodeBase: Pointer; pID: integer): boolean;
var
hProcess: integer;
BytesWritten: Cardinal;
hThread: integer;
ThreadID: Cardinal;
begin
hProcess:=OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, FALSE, pID);
if (hProcess=0) then
begin
result:=false;
exit;
end;

result:=WriteProcessMemory(hProcess, CodeBase, pCode, CodeSize, BytesWritten);
if (not result) then
begin
CloseHandle(hProcess);
exit;
end;

hThread:=CreateRemoteThread(hProcess, nil, 0, CodeBase, nil, 0, ThreadID);
if (hThread=0) then
begin
VirtualFreeEx(hProcess, CodeBase, CodeSize, MEM_RELEASE);
CloseHandle(hProcess);
result:=false;
exit;
end;

WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess, CodeBase, CodeSize, MEM_RELEASE);
CloseHandle(hProcess);

result:=true;
end;
Post #: 6
RE: Перехват вызовов API-функций на Delphi №2 - 2010-11-11 01:18:39.986666   
Guest

Сообщений: 83368
Оценки: 51
Присоединился: None
Thank you.
Post #: 7
Страниц:  [1]
Все форумы >> [Обсуждение статей] >> Перехват вызовов API-функций на Delphi №2







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.