Среда, 28.06.2017, 11:54 Приветствую вас Гость | Группа "Гости" 


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: xXxSh@dowxXx, Anton93, Волк-1024 
delfcode » Delphi » Вопросы по Delphi » function InjectLib
function InjectLib
QWILIДата: Понедельник, 22.10.2012, 20:20 | Сообщение # 1
Группа: Удаленные



Хотелось бы сделать инжектер dll. Нашел функцию, но delphi xe2 ругается на 31 строчку
Code

function InjectLib(process_id: DWORD; lib_name: PChar): Integer;
var
pfnRemote, premote_mem: Pointer;
hProcess, hThread: THandle;
mem_size: Integer;
ret: LongBool;
BytesWritten: DWORD;
ThreadId: DWORD;
begin
pfnRemote:= GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA');
if (pfnRemote = nil) then
begin
Result:= -1;
Exit;
end;
hProcess:= OpenProcess(MAXIMUM_ALLOWED, False, process_id);
if hProcess = 0 then
begin
Result:= -1;
Exit;
end;
mem_size:= strlen(lib_name) + 1;
premote_mem:= VirtualAllocEx(hProcess, nil, mem_size, MEM_COMMIT, PAGE_READWRITE);
if (premote_mem = nil) then
begin
CloseHandle(hProcess);
Result:= -1;
Exit;
end;
BytesWritten:= 0;
ret:= WriteProcessMemory(hProcess, premote_mem, lib_name, mem_size, BytesWritten);
if (ret = false) then
begin
VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
CloseHandle(hProcess);
Result:= -1;
Exit;
end;
ThreadId:= 0;
hThread:= CreateRemoteThread(hProcess, nil, 0, pfnRemote, premote_mem, 0, ThreadId);
if (hThread = 0) then
begin
VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
CloseHandle(hProcess);
Result:= -1;
Exit;
end;
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess, premote_mem, 0, MEM_RELEASE);
CloseHandle(hProcess);
CloseHandle(hThread);
Result:= 0;
end;


Ошибка:
Code
[DCC Error] Unit1.pas(72): E2033 Types of actual and formal var parameters must be identical


Сообщение отредактировал QWILI - Понедельник, 22.10.2012, 20:22
 
Волк-1024Дата: Вторник, 23.10.2012, 00:13 | Сообщение # 2
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 467
Статус: Offline
Ну, тут же компилятор четко написал проблему. Он сказал, что передаваемые параметры должны быть идентичны тем, что объявлены в прототипе функции.
Например, тут mem_size объявлена как Integer, а 4-й параметр WiteProcessMemory, как DWORD. Ведь Integer<>0, а DWORD может быть только DWORD>0. Поэтому он может и заругаться. Я не знаю, как с этими делами обстоит в XE2, ибо я юзаю Delphi 7, поэтому делаю предположения навскидку.
 
delfcode » Delphi » Вопросы по Delphi » function InjectLib
Страница 1 из 11
Поиск:

delfcode.ru © 2008 - 2017 Хостинг от uCoz