Создано: 05 июня 2005 23:32 · Поправил: Модератор   · Личное сообщение ·  #1 
Помогите перевести на асм вот этот код:
 
 Function InjectDll(Process: dword; ModulePath: PChar): boolean;
 var
   Memory:pointer;
   Code: dword;
   BytesWritten: dword;
   ThreadId: dword;
   hThread: dword;
   hKernel32: dword;
   Inject: packed record
            PushCommand:byte;
            PushArgument WORD;
            CallCommand:WORD;
            CallAddr WORD;
            PushExitThread:byte;
            ExitThreadArg:dword;
            CallExitThread:word;
            CallExitThreadAddr Word;
            AddrLoadLibrary:pointer;
            AddrExitThread:pointer;
            LibraryName:array[0..MAX_PATH] of char;
           end;
 begin
   Result := false;
   Memory := VirtualAllocEx(Process, nil, sizeof(Inject),
                            MEM_COMMIT, PAGE_EXECUTE_READWRITE);
   if Memory = nil then Exit;
 
   Code := dword(Memory);
   //инициализация внедряемого кода:
   Inject.PushCommand    := $68;
   inject.PushArgument   := code + $1E;
   inject.CallCommand    := $15FF;
   inject.CallAddr       := code + $16;
   inject.PushExitThread := $68;
   inject.ExitThreadArg  := 0;
   inject.CallExitThread := $15FF;
   inject.CallExitThreadAddr := code + $1A;
   hKernel32 := GetModuleHandle('kernel32.dll');
   inject.AddrLoadLibrary := GetProcAddress(hKernel32, 'LoadLibraryA');
   inject.AddrExitThread  := GetProcAddress(hKernel32, 'ExitThread');
   lstrcpy(@inject.LibraryName, ModulePath);
   //записать машинный код по зарезервированному адресу
   WriteProcessMemory(Process, Memory, @inject, sizeof(inject), BytesWritten);
   //выполнить машинный код
   hThread := CreateRemoteThread(Process, nil, 0, Memory, nil, 0, ThreadId);
   if hThread = 0 then Exit;
   CloseHandle(hThread);
   Result := True;
 end; 
  | Сообщение посчитали полезным:  |