Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
ВнизВнедрение кода в чужой процесс Найти похожие ветки
← →
Inch © (2004-12-26 20:17) [0]Пытаюсь выполнить сабж с помощью способа описанного Рихтером - удаленных потоков. Ничерта не выходит. Может кто-нть дать пример (на дельфи!)? или помогите найти ошибку в ниже следующем коде.
-----------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
PathToDll:pchar;
mHandle,hProcess:THandle;
hThread,dwThread,PID,BytesWritten:DWORD;
_LoadLibraryA,pTarget: Pointer;
InjectInfo: TRemoteData;
begin
PathToDll:="d:\Coding\compiled\injdll.dll"+#0;
PID:=StrToInt(ePID.text);
if PID = GetCurrentProcessId then
begin MessageBox(0,"Да ты шутник однако!","!",mb_ok); exit;end;
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,PID);
mHandle:=GetModuleHandle(nil);
_LoadLibraryA:=GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");
if (hProcess = 0) then
begin
MessageBox(0,"Ошибка при попытке получения доступа к
процессу.","Капут",mb_iconerror);
exit;
end;
pTarget:=VirtualAllocEx(hProcess,nil,Length(PathToDll),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if pTarget = nil then MessageBox(0,"Ошибка при попытке выделения
памяти.","Ошибка",mb_iconerror);
WriteProcessMemory(hProcess, pTarget, @PathToDll, Length(PathToDll), BytesWritten);
hThread:=CreateRemoteThread(hProcess,nil, 0,_LoadLibraryA,pTarget,0,dwThread);
WaitForSingleObject(hThread, INFINITE);
MessageBox(0,"Все прошло как надо.","!",mb_iconinformation);
end;
-----------------------------------------------------------------
Вот dll"ка:
-----------------------------------------------------------------
library injdll;
uses
windows;
procedure DLLMain(Reason: Integer);
begin
MessageBox(0,"DLL Loaded.","!",mb_iconinformation);
end;
begin
DLLProc:=@DLLMain;
end.
-----------------------------------------------------------------
← →
Anton_K © (2004-12-26 20:38) [1]А выделять память для PathToDll кто будет?
← →
Piter © (2004-12-26 23:05) [2]http://delphimaster.net/view/4-1100098886/
← →
Игорь Шевченко © (2004-12-27 00:40) [3]
> WriteProcessMemory(hProcess, pTarget, @PathToDll, Length(PathToDll),
> BytesWritten);
Как минимум, одна ошибка здесь. Лишний знак @.
Кроме того, большинство API-функций возвращает рузультат своего выполнения. Его тоже следует проверять.
С уважением,
← →
n0name (2004-12-27 09:54) [4]А DllProc(REASON_ATTACH) кто делать будет?
Между begin и end в DLL.
Если не поможет - смотри рабочий исходник:
program dllinject_m2;
{$APPTYPE CONSOLE}
uses
SysUtils,
windows,
shellapi,
procs in "procs.pas";
function InjectDllToTarget(dllName : string; TargetProcessID : DWORD ): boolean;
var
LibName : pointer;
hProcess , ThreadHandle : Thandle;
BytesWritten , TheadID : DWORD;
begin
result := false;
hProcess := OpenProcess( PROCESS_ALL_ACCESS, FALSE, TargetProcessID );
if (hProcess = 0) then exit;
// alocate and write the dll name to the remote process
LibName := VirtualAllocEx(hProcess , 0, length(dllName) + 5 , MEM_COMMIT , PAGE_READWRITE) ;
if ( LibName <> nil) then
begin
WriteProcessMemory(hProcess , LibName, pchar(dllName) , length(dllName) , BytesWritten );
end ;
ThreadHandle := CreateRemoteThread( hProcess , nil , 0, GetProcAddress(LoadLibrary("kernel32.dll"), "LoadLibraryA") , LibName ,0 , TheadID );
result := ThreadHandle <> 0;
WaitForSingleObject( ThreadHandle , INFINITE); //wait for the thread to execute
// free the memory we allocated for the dll name
VirtualFreeEx( hProcess , LibName , 0 , MEM_RELEASE);
CloseHandle(hProcess);
end;
var
PID : Dword;
dll_to_inject : string;
begin
GetDebugPrivs; // give us debug privalages
dll_to_inject := "F:\Source\Delphi\Examples\2HideMod2\Method 2\Lib.dll"; //just an example, it can be anything
{
for the perous of this demo we will just inject into
our own process but PID could be any process we want
}
PID := GetCurrentProcessID();
if InjectDllToTarget(dll_to_inject, PID) then
writeLn("Dll Injected" )
else
writeLn("Dll Inject failed");
writeLn("Press enter to exit");
ReadLn(dll_to_inject);
end.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.071 c