Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Не удается присоединиться к нужному процессу созданной dll
Посл.ответ Сообщение

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 08 мая 2012 00:57
· Личное сообщение · #1

Создал ниже приведенную длл. Идея была присоединиться к процессу, к которому принадлежит окно класса "MQ_UIManager", с именем "Disciples II". В DllMain прописано, чтобы хук сразу же и выгрузился. Он нужен для того, чтобы получить handle процесса и присоединиться посредством хука к нему. Тогда длл будет загружаться в нужное пространствою Это возможно еще и позволяет улучшить производительность за счет использования хука + loadlibrary, где работающий код подгружается при загрузке библиотеки а хук выгружается.

Так вот, приведенный ниже код работает, но не так, как нужно. Он не присоединяется к нужному процессу, а создает свой. Соотвественно, никаких функций из библиотеки при запуске основной программы не видно.

Функции внизу приведены раньше DllMain, так как в таком порядке их требует компилятор.

Code:
  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include <stdlib.h>
  4.  
  5. ///////////////////////////////////////////////////////////////////////////////
  6. // Instruct the compiler to put the g_hHook data variable in
  7. // its own data section called Shared. We then instruct the
  8. // linker that we want to share the data in this section
  9. // with all instances of this application.
  10. #pragma data_seg("Shared")
  11. HHOOK g_hHook = NULL;
  12. DWORD g_dwThreadIdDIPS = 0;
  13. #pragma data_seg()
  14. // Instruct the linker to make the Shared section
  15. // readable, writable, and shared.
  16. #pragma comment(linker, "/section:Shared,rws")
  17.  
  18. HINSTANCE g_hInstDll = NULL;
  19.  
  20. LRESULT WINAPI GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam){
  21.          return(CallNextHookEx(g_hHook, nCode, wParam, lParam));
  22. }
  23.  
  24. BOOL WINAPI SetNoCDHook(DWORD dwThreadId) {
  25. BOOL bOk = FALSE;
  26. if (dwThreadId != 0) {
  27.  
  28. // Save our thread ID in a shared variable so that our GetMsgProc
  29. // function can post a message back to the thread when the server
  30. // window has been created.
  31. g_dwThreadIdDIPS = GetCurrentThreadId();
  32. // Install the hook on the specified thread
  33. g_hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, g_hInstDll,dwThreadId);
  34. bOk = (g_hHook != NULL);
  35. if (bOk) {
  36. // The hook was installed successfully; force a benign message to
  37. // the thread's queue so that the hook function gets called.
  38. bOk = PostThreadMessage(dwThreadId, WM_NULL, 0, 0);
  39. }
  40. else {
  41.  
  42. bOk = UnhookWindowsHookEx(g_hHook);
  43. g_hHook = NULL;
  44. }
  45. return(bOk);
  46. }
  47.  
  48. BOOL APIENTRY DllMain( HINSTANCE hInstDll,
  49.                        DWORD  ul_reason_for_call,
  50.                        LPVOID lpReserved )
  51. {
  52.     if( ul_reason_for_call == DLL_PROCESS_ATTACH )
  53.     {
  54.         // Increase reference count via LoadLibrary
  55.         char lib_name[MAX_PATH];
  56.                  
  57.                  g_hInstDll = hInstDll;
  58.                  
  59.  
  60.                  HWND hWndLV = FindWindowW(TEXT("MQ_UIManager"),TEXT("Disciples II"));
  61.  
  62.                  SetNoCDHook(GetWindowThreadProcessId(hWndLV, NULL));
  63.  
  64.                  ::GetModuleFileNameA( 0, lib_name, MAX_PATH );
  65.         ::LoadLibraryA( lib_name );
  66.  
  67.         // Safely remove hook
  68.         ::UnhookWindowsHookEx( g_hHook );
  69.     }    
  70.     return TRUE;
  71. }




Ранг: 191.8 (ветеран), 46thx
Активность: 0.170
Статус: Участник

Создано: 08 мая 2012 02:16
· Личное сообщение · #2

Вспомнился простой метод логгирования с помощью DebugView.exe
http://www.unixwiz.net/techtips/outputdebugstring.html

| Сообщение посчитали полезным: Dim77

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 09 мая 2012 20:18 · Поправил: Dim77
· Личное сообщение · #3

Похоже, что человек использовал --> loaddll.exe из Оли для того же самого <--, что я пытаюсь сделать. Только там, где у него картинка прикреплена ничего не видно ибо разрешение у картинки мелкое. Он как-то подцепил loaddll.exe к проекту в VS?

Ratinsh пишет:
Вспомнился простой метод логгирования с помощью DebugView.exe


Спасибо. Посмотрю.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 09 мая 2012 21:40
· Личное сообщение · #4

Ratinsh пишет:
Он как-то подцепил loaddll.exe к проекту в VS

нет. По хукам почитай Ms-Rem'a на wasm'e и с detours где-то в сети лежат примеры.

| Сообщение посчитали полезным: Dim77

Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 11 мая 2012 19:39
· Личное сообщение · #5

NikolayD пишет:
Ms-Rem'a на wasm'e и с detours где-то в сети лежат примеры.

Нашел и то и другое. Ms Rem читать одно удовольствие.



Ранг: 9.7 (гость)
Активность: 0.020
Статус: Участник

Создано: 21 мая 2012 00:53
· Личное сообщение · #6

К процессу не подцепился, но длл прицепил при помощи инжектора. Инжектор пока что неидеально работает ибо его можно использовать только если процесс уже стартовал. В ждущем режиме инжектор пока барахлит, как описано --> здесь <--. Эту тему закрываю.


 eXeL@B —› Вопросы новичков —› Не удается присоединиться к нужному процессу созданной dll
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати