Отладка hooked dll в VS 2008 C++

Тема в разделе "WASM.WIN32", создана пользователем hdc, 11 дек 2009.

  1. hdc

    hdc New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    5
    Добрый день.

    Подскажите пожалуйста как можно отладить длл, инжекнутую в чужое АП? Я использую SetWindowHookEx для глобального хука. Нужно отладить несколько функций прямо внутри целевого процесса. Всвязи с этим пытаюсь инжектнуть дебаггером длл в целевой процесс.

    Пытаюсь в VS 2008 Express (C++) поступить следующим образом: жму Debug->Attach to process, выбираю нужный процесс из списка и... судя по всему длл туда не подгружается! Ставлю несколько брейкпоинтов на дллмэйн + прописал туда мессаджбокс, итог — на брейкапоинтах не останавливается, месседжбокс не выскакивает. Processs explorer от Марка Русиновича не находит библиотеку в ОП.

    BOOL WINAPI DllMain ()
    {
    MessageBoxA(NULL,"OK",NULL,0);
    ...
    }

    В чем может быть проблема и как мне все-таки заставить дебаггер ВС работать?
     
  2. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    hdc
    как вы надоели. ДАвай сюда код! ты что привел нам дллмайн? даже тебе стало очевидно что инжекта не происходит. Значит ищи ошибку в коде инжекта. Просто проверяй какая функция возвращает ошибку GetLastError в зубы тебе. Тут телепатов нету.
     
  3. hdc

    hdc New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    5
    Да дело не в коде! Возьмем к примеру проект состоящий из одного файла и одной функции:

    #include <Windows.h>

    BOOL APIENTRY DllMain (HINSTANCE hInstance, DWORD reason, LPVOID reserved)
    {
    MessageBoxA(NULL, "OK", NULL, 0);

    switch (reason)
    {
    case DLL_PROCESS_ATTACH:
    break;
    case DLL_PROCESS_DETACH:
    break;
    case DLL_THREAD_ATTACH:
    break;
    case DLL_THREAD_DETACH:
    break;
    }

    return TRUE;
    }

    По идее для отладки ее в АП другого процесса нужно:
    1. Debug -> Attach to process
    2. выбрать нужный процесс и нажать Аттач

    Должен появится месседж бокс "ОК", но ничего не появляется. Кроме того после указанных действий все брейкпоинты становятся неактивными. Пробовал релиз и дебаг - результат один.

    В чем может быть проблема? Я так пологаю какието настройки студии или не установлено чтото в винде (студия стоит на винХР немного порезанной). Помогите!!!
     
  4. hdc

    hdc New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    5
    может я чегото не понимаю, но код инжекта тут вообще не при чем! В описанном выше случае (где в коде длл тока дллмэйн), инжектить длл должна сама студия, но этого не происходит, и я не понимаю почему...
     
  5. hdc

    hdc New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    5
    да и к тому же сам код инжекта, который я использую рабочий на 100%. найти нужно причину почему студия не инжектит длл в указанный ей процесс!
     
  6. hdc

    hdc New Member

    Публикаций:
    0
    Регистрация:
    11 дек 2009
    Сообщения:
    5
    видимо дело в символах (pdb, может их нужно куданить скопировать?) и настройках проекта, нужно чтото поменять и возможно аттач ту процесс заработает)

    Может ли влиять версия DbgHelp.dll в винде на это?
     
  7. djmans

    djmans New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2006
    Сообщения:
    312
    ))) жесть, иди изучай че такое "Debug -> Attach to process"
     
  8. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    hdc
    Грузи в свою длл в свой же процесс и отлаживай там. А уже потом в другой. Читай Рихтера ,в общем
     
  9. Gnil

    Gnil New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2008
    Сообщения:
    41
    Attach to process не инжектит dll, которую собирает в студии, в отлаживаемый процесс, а только аттачит дебаггер.

    Для отладки напиши простейший тул, который заинжектит твою длл в указаный pid (например, используя CreaterRemoteThread). И перед или после аттача к целевому процессу инжекти длл при помощи этой проги.

    Все брейкпоинты будут работать.
     
  10. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Теперь понятно. Attach цепляет только отладчик. То что ты собирал до данного момента в Студии в этом процессе не участвует.
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Понимаете, это уже не смешно. Тут вообще не смешно уже. Просто ЖЕСТЬ.