адрес & модуль

Тема в разделе "WASM.BEGINNERS", создана пользователем RamMerLabs, 29 янв 2007.

  1. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Есть адрес виртуальной памяти пользовательского диапазона. Как узнать какой модуль расположен по этому адресу?
     
  2. yuzvir

    yuzvir New Member

    Публикаций:
    0
    Регистрация:
    20 май 2005
    Сообщения:
    97
    Наверное просмотреть все LDR_MODULE через PEB_LDR_DATA.InLoadOrderModuleList и смотреть пересечения
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    а прямого метода нету? чтоб не перебором
     
  4. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Может и не прямой, но успешно применяется:

    Декрементировать адрес и смотреть пока не 'MZ' или пока каспер поток не прибьет ))) уж больно не шеллкод будет смахивать )))
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    ну и на этом спасибо, ща буду пробовать!
     
  6. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    Так, на заметку........

    В 2001 мсдне были сорсы dr Watson :), а он по адресу может модуль определять в любой системе.
     
  7. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    B.E.A.U.T.I.F.U.L.!

    только где msdn 2001 найти?
     
  8. slackhead

    slackhead New Member

    Публикаций:
    0
    Регистрация:
    29 янв 2007
    Сообщения:
    66
    а хэндл процесса есть ?
     
  9. _Serega_

    _Serega_ New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    288
    RamMerLabs
    Хорошая аббревиатура... кстать а как расшифровуется?

    У меня когда то был :). Могу недели через 3 найти и выслать на мыло:)
     
  10. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Да никак не расшифровуется, так просто вспомнил "Эйс Вентура" с оригинальной (английской) озвучкой.

    есть

    А он сильно объёмный, а то у меня траф ограничен - 100Мб. Потом за каждый метр по 1,5 рубля, а степуха не раньше 15 февраля.
     
  11. DelExe

    DelExe New Member

    Публикаций:
    0
    Регистрация:
    22 авг 2005
    Сообщения:
    165
    Код (Text):
    1. CString GetModName_of_Addr_PID(DWORD pid, DWORD Addr)
    2. {
    3.     // Получить моментальный снимок процесса.
    4.     HANDLE hthSnapshot = NULL;
    5.     hthSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
    6.     MODULEENTRY32 me = {sizeof(me)};
    7.     Module32First(hthSnapshot,&me);
    8.     do
    9.     {
    10.         if (((DWORD)me.hModule < Addr) &&
    11.             (((DWORD)me.hModule + me.modBaseSize) > Addr))
    12.         {
    13.             CloseHandle(hthSnapshot);
    14.             return me.szExePath;
    15.         }
    16.     } while(Module32Next(hthSnapshot,&me));
    17.    
    18.     CloseHandle(hthSnapshot);
    19.     return "";
    20. }
    Так можна с юзер режима. Аналогично через PEB c ядра как писал yuzvir
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    ну эту ф-ию я и сам сделал (только через PSAPI), но адрес у меня получается указывает на kernel32.dll, ещё разбираюсь.
     
  13. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    RamMerLabs
    <Есть адрес виртуальной памяти пользовательского диапазона. Как узнать какой модуль расположен по этому адресу?
    >
    Никогда не думал что там может быть расположена куча или выделеные куски памяти ? тогда ты никак модуль не определишь, единствено проверить адреса куч.
     
  14. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    но как же это сделано в Process Explorere? (см свойства процесса, вкладка threads)
     
  15. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    RamMerLabs
    Ну и в большинстве случаев вижу там именно kernel32 (GetModuleFileName + N или CreateThread + N).
     
  16. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    разобрался! Всем спасибо!