Последние записи
- Как запустить программу указанную в Edit.Text
- Скачать файл с использованием потока
- Поиск слова в Memo
- Распаковщик формата .img из GTA San Andreas
- Подсчет количества повторяющихся букв в файле
- Простейший скрипт загрузки картинки с помощью php
- Рассылка. Выпуск 154
- Получение картинки с веб-камеры
- Скопировать определённый кусок image
- Сделать printscreen экрана и сохранить
13th
Янв
Нужно при запуске программы извлечь dll из ресурсов во временный каталог и проинжектить в другой процесс
Posted by Chas under Delphi
Как это сделать?
Пепел Феникса
procedure InjectDll(TargetId: cardinal; DllName: String);
var
BytesWrite : cardinal;
ParamAddr : pointer;
pThreadStart : pointer;
Hdl : cardinal;
hThread : cardinal;
hRemoteThread : Cardinal;
begin
ChangePrivilege('SeDebugPrivilege', True);
Hdl := OpenProcess(PROCESS_ALL_ACCESS, false, TargetId);
ParamAddr := VirtualAllocEx(Hdl, nil, Length(DllName)+1, MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);//терминал тоже надо.*
WriteProcessMemory(Hdl, ParamAddr, PAnsiChar(AnsiString(DllName)), Length(DllName)+1, BytesWrite);//аналогично+именно тут нам нужна строка нужного формата(Ansi)*
pThreadStart := GetProcAddress(GetModuleHandle('KERNEL32.DLL'),'LoadLibraryA');
hThread := CreateRemoteThread(Hdl, nil, 0, pThreadStart, ParamAddr, 0,hRemoteThread);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
VirtualFreeEx(Hdl,ParamAddr,0,MEM_RELEASE);//уборка за собою.
CloseHandle(Hdl);//тоже надо.
end;
function AutoInject(param:pointer):integer;stdcall;//прототип пишем как положено.*
var
pID: cardinal;
begin
while True do
begin
pID := GetProcessID('notepad.exe');
if pID <> 0 then
begin
Temp := GetEnvironmentVariable('TEMP');
InjectDll(pID,Temp+'/1.dll');//вы на типы вообще смотрите?*
Sleep(500);
PostMessage(Form1.Handle, WM_CLOSE, 0, 0);
end
else
Sleep(500);
end
end;

