как использовать инъекции DLL? - PullRequest
0 голосов
/ 02 мая 2010

Я искал, как внедрить dll в программу (exe или dll и т. Д.). я googleing dll injecting, но я не нашел ничего очень полезного :(. Я не очень много работал с dll, поэтому я не уверен, что делать, я действительно мог бы помочь с этим.

эээ, единственное, что я действительно нашел, это setwindowshookex, но я не могу найти никаких примеров для этого, и я не знаю, как его использовать. любые вопросы просто задавайте, и я постараюсь помочь.

РЕДАКТИРОВАТЬ эй, я гуглил, и это похоже на инъекцию dll, на которую стоит взглянуть, но я не могу заставить код работать: \ ( Как подключить внешний процесс с помощью SetWindowsHookEx и WH_KEYBOARD )

1 Ответ

0 голосов
/ 02 мая 2010

Метод, с которым я больше всего знаком, был описан Джеффри Рихтером в Программирование приложений для Microsoft Windows . Я упоминаю об этом, потому что, даже если вы не попадаете в руки самой книги, возможно, существует пример кода. Я думаю, что он, возможно, также написал некоторые статьи журнала. Он также упоминает пару альтернативных подходов, из которых я опишу только один, по памяти. Он также, возможно, написал несколько статей MSJ / MSDN, которые имеют отношение к делу.

В любом случае, основная идея состоит в том, чтобы заставить процесс, который вы хотите загрузить, в DLL вызвать вызов <a href="http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx" rel="nofollow noreferrer">LoadLibrary</a>. Это делается с помощью <a href="http://msdn.microsoft.com/en-us/library/ms682437(VS.85).aspx" rel="nofollow noreferrer">CreateRemoteThread</a> с адресом LoadLibary для lpStartAddress и адресом строки, в которой указана ваша DLL, для lpParameter. Организация и поиск строки выполняется с помощью <a href="http://msdn.microsoft.com/en-us/library/aa366890(VS.85).aspx" rel="nofollow noreferrer">VirtualAllocEx</a> для выделения некоторой памяти в удаленном процессе и <a href="http://msdn.microsoft.com/en-us/library/ms681674(v=VS.85).aspx" rel="nofollow noreferrer">WriteProcessMemory</a> для заполнения ее строкой.

КОД PSEUDO:

void InjectDllIntoProcess(DWORD processId, char *dllName)
{
  HANDLE hRemoteProcess = OpenProcess(

  // Assumes that dll and function addresses are the same in different processes
  // on the same system. I think that this is true even with ASLR, only issue I
  // can think of is to make sure that the source and target process are both 32
  // or both 64 bit, not a mixture.
  // Note that it is asking for the ASCII version
  HMODULE hDll = LoadLibrary(_T("Kernel32.dll"));
  void *loadLibAddr = GetProcAddress(hDll, _T("LoadLibraryA"));


  // Inject the DLL name
  char * remoteAddr = 
        (char *)VirtualAllocEx(hRemoteProcess, NULL, strlen(dllName) + 1, ...
  WriteProcessMemory(hRemoteProcess, remoteAddr, dllName, strlen(dllName) + 1 ...

  CreateRemoteThread(hRemoteProcess, ??, 0, loadLibAddr, remoteAddr, ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...