Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выгрузка модуля 
:(
    Опции темы
ASGDeveloper
Дата 20.9.2006, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: нет
Всего: 1



Большая просьба подсказать как можно выполнить реинжект модуля (без сторонних компонент типа madCodeHook).  


M
Girder
Поиск...
http://forum.vingrad.ru/index.php?showtopi...st&p=339720

PM MAIL   Вверх
Yanis
Дата 20.9.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



ASGDeveloper
Сегодня какой то непонятный день. Мож я невыспался smile
А что такое модуль?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ASGDeveloper
Дата 20.9.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: нет
Всего: 1



Цитата(Yanis @  20.9.2006,  11:27 Найти цитируемый пост)
А что такое модуль?

Ну обычная длл-ка. То есть, "инжект модуля" - это внедрение dll-ки в чужое адресное пространство, а "реинжект модуля" - это выгрузка dll-ки из чужого адресного пространства.

Делаю так:
Код

type
TFreeLibraryCode=packed record
 FreeLibPushOp: byte;
 FreeLibPushArg: dword;
 FreeLibCallOp: word;
 FreeLibCallArg: dword;
 ExitThreadPushOp: byte;
 ExitThreadPushArg: dword;
 ExitThreadCallOp: word;
 ExitThreadCallArg: dword;
 FreeLibraryAddress: dword;
 ExitThreadAddress: dword;
end;

function GetCodeBase(CodeSize: integer; pID: integer): Pointer;
var
 hProcess: integer;
begin
 hProcess:=OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, false, pID);
 result:=VirtualAllocEx(hProcess, nil, CodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
 CloseHandle(hProcess);
end;

function ExCodeInRemoteProcess(pCode: Pointer; CodeSize: integer; CodeBase: Pointer; pID: integer): boolean;
var
 hProcess: integer;
 BytesWritten: Cardinal;
 hThread: integer;
 ThreadID: Cardinal;
begin
 hProcess:=OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION, FALSE, pID);
 if (hProcess=0) then
  begin
   result:=false;
   exit;
  end;

 result:=WriteProcessMemory(hProcess, CodeBase, pCode, CodeSize, BytesWritten);
 if (not result) then
  begin
   CloseHandle(hProcess);  
   exit;
  end;

 hThread:=CreateRemoteThread(hProcess, nil, 0, CodeBase, nil, 0, ThreadID);
 if (hThread=0) then
  begin
   VirtualFreeEx(hProcess, CodeBase, CodeSize, MEM_RELEASE);
   CloseHandle(hProcess);
   result:=false;
   exit;
  end;

 WaitForSingleObject(hThread, INFINITE);
 VirtualFreeEx(hProcess, CodeBase, CodeSize, MEM_RELEASE);
 CloseHandle(hProcess);
 
 result:=true;
end;


function FreeLibraryInProcess(pID: integer; LibName: string): boolean;
var
 FreeLibraryCode: TFreeLibraryCode;
 pCode: Pointer;
 hLib: THandle;
begin
 pCode:=GetCodeBase(sizeof(FreeLibraryCode), pID);

 FreeLibraryCode.FreeLibPushOp:=OPCODE_PUSH;
 hLib:=LoadLibrary(PChar(LibName));
 FreeLibraryCode.FreeLibPushArg:=GetModuleHandle(PChar(LibName));
 FreeLibrary(hLib);
 FreeLibraryCode.FreeLibCallOp:=OPCODE_CALL;
 FreeLibraryCode.FreeLibCallArg:=DWORD(pCode)+DWORD(@FreeLibraryCode.FreeLibraryAddress)-DWORD(@FreeLibraryCode);

 FreeLibraryCode.ExitThreadPushOp:=OPCODE_PUSH;
 FreeLibraryCode.ExitThreadPushArg:=0;
 FreeLibraryCode.ExitThreadCallOp:=OPCODE_CALL;
 FreeLibraryCode.ExitThreadCallArg:=DWORD(pCode)+DWORD(@FreeLibraryCode.ExitThreadAddress)-DWORD(@FreeLibraryCode);

 FreeLibraryCode.FreeLibraryAddress:=DWORD(GetProcAddress(GetModuleHandle('kernel32.dll'), 'FreeLibrary'));
 FreeLibraryCode.ExitThreadAddress:=DWORD(GetProcAddress(GetModuleHandle('kernel32.dll'), 'ExitThread'));

 result:=ExCodeInRemoteProcess(@FreeLibraryCode, sizeof(FreeLibraryCode), pCode, pID);
end;

PM MAIL   Вверх
ne0n
Дата 20.9.2006, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


PlayBoy
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 5.8.2005
Где: Н.Новгород

Репутация: 4
Всего: 11



Вот хороший код нарыл у себя:
Код

uses tlhelp32; 
 
procedure FreeLibraryPID(pID:Cardinal; NameDLL:string); 
type 
 TInjectCode=packed record 
  Push:Byte; 
  PushValue:DWord; 
  Call:Byte; 
  CallValue:DWord; 
  IsZero:Word; 
  JmpZero:Word; 
  Ret:Byte; 
 end; 
var H:THandle; 
    Module32:TModuleEntry32; 
    InjectCode:TInjectCode; 
    KernelDLL:DWord; 
    oProcess,oProcessThread:DWord; 
    PID_Mem:Pointer; 
    t:DWord; 
begin 
 InjectCode.CallValue:=0; 
 KernelDLL:=LoadLibrary('Kernel32.dll'); 
 if KernelDLL<>0 then 
  begin 
   InjectCode.CallValue:=DWord(GetProcAddress(KernelDLL,'FreeLibrary')); 
   FreeLibrary(KernelDLL); 
  end; 
 if (pID=0)or(InjectCode.CallValue=0) then exit; 
 oProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PID); 
 if oProcess=0 then exit; 
 PID_Mem:=VirtualAllocEx(oProcess,nil,SizeOf(InjectCode),MEM_RESERVE or MEM_COMMIT,PAGE_EXECUTE_READWRITE); 
 if PID_Mem=nil then 
  begin 
   CloseHandle(oProcess); 
   exit; 
  end; 
 NameDLL:=trim(NameDLL); 
 H:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE,pID); 
 if H<>INVALID_HANDLE_VALUE then 
  begin 
   InjectCode.Push:=$68; 
   InjectCode.Call:=$e8; 
   InjectCode.IsZero:=$C021; 
   InjectCode.JmpZero:=$F275; 
   InjectCode.Ret:=$C3; 
   Module32.dwSize:=SizeOf(TModuleEntry32); 
   if Module32First(H,Module32) then 
    repeat 
     if AnsiCompareText(NameDLL,Module32.szModule)=0 then 
      begin 
       InjectCode.PushValue:=DWord(Module32.modBaseAddr); 
       InjectCode.CallValue:=InjectCode.CallValue-DWord(PID_Mem)-10; 
       if (WriteProcessMemory(oProcess,PID_Mem,@InjectCode,SizeOf(InjectCode),t)and(t=SizeOf(InjectCode))) then 
        begin 
         oProcessThread:=CreateRemoteThread(oProcess,nil,0,PID_Mem,nil,0,t); 
         if oProcessThread<>0 then 
          begin 
          if WaitForSingleObject(oProcessThread,1000)<>WAIT_TIMEOUT then //Даем на выгрузку одну секунду. 
            ShowMessage('Один есть!'); 
           CloseHandle(oProcessThread); 
          end; 
        end; 
      end; 
    until (Module32Next(H,Module32)=false); 
   CloseHandle(H); 
  end; 
 VirtualFreeEx(oProcess,PID_Mem,0,MEM_RELEASE);   
 CloseHandle(oProcess); 
end; 
 


да кстати  "реинжект" делать можно только с динамичеси загруженными dll  smile 
PM MAIL ICQ   Вверх
ASGDeveloper
Дата 21.9.2006, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


developer
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 1.4.2006

Репутация: нет
Всего: 1



Цитата(ne0n @  20.9.2006,  16:18 Найти цитируемый пост)
Вот хороший код нарыл у себя:

О, сенкс!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0810 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.