Выполнение кода в основном потоке с помощью внедрения DLL - PullRequest
0 голосов
/ 21 мая 2018

Мне нужно внедрить dll в основной поток процесса (иначе мой процесс завершится сбоем). Как мне поступить?Моя DLL находится в C ++, очевидно, мой метод инъекции, хотя использует C # и CreateRemoteThread.Я пытался использовать std :: thread (func), но это не сработало (конечно, это, вероятно, не сработало бы, поскольку, скорее всего, создает новый поток). Я не знаю, является ли это проблемой для моей DLL или моейинжектор, поэтому вся помощь и попытки помочь приветствуются.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Ваш DllMain будет работать в контексте каждого потока ... выяснить, какой из них является основным потоком.

Поскольку вы не можете сделать много, пока удерживается блокировка загрузчика, создайте обратный вызов с помощьюсходство потоков (например, с использованием SetTimer) и выполнение всей работы с этим обратным вызовом.

0 голосов
/ 21 мая 2018

Вы можете приостановить целевой процесс и использовать CreateRemoteThread () для внедрения, но учтите следующие ограничения:

  1. Вы должны скопировать основную подпрограмму потока для удаленного потока в адресное пространствоцелевой процесс.
  2. Этот код не может содержать никаких внешних ссылок (например, CRTL или прямые вызовы WinApi).Обычно я ограничиваю этот код загрузкой DLL и либо выполняю из нее функцию, либо полагаюсь на DllMain для выполнения необходимой вам работы.Чтобы вызвать методы LoadLibrary и GetProcAddress, я получаю их адреса и копирую структуру, содержащую эту информацию, целевому процессу и передаю адрес удаленной структуры в качестве аргумента для основной процедуры потока в CreateRemoteThread ().Вы можете использовать VirtualAllocEx () для выделения памяти в удаленном процессе,
  3. Удаленный поток в этой ситуации будет выполняться перед основным потоком, включая процесс и некоторую инициализацию Win32 / 64.Поэтому не каждый Win32 API безопасен для вызова в этом состоянии.

Вы можете прочитать больше здесь: http://blogs.microsoft.co.il/pavely/2017/03/14/injecting-a-dll-without-a-remote-thread/

...