Снять дамп запущенного процесса?

Тема в разделе "WASM.WIN32", создана пользователем krol, 9 авг 2011.

  1. krol

    krol New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    19
    Запускаю калькулятор CreateProcessA(... CREATE_SUSPENDED...)
    Нужно найти базу, по которой он загружен в памяти, при этом само приложение не должно начать работать.

    Пробовал с CreateToolhelp32Snapshot( TH32CS_SNAPMODULE..) - дает пустой список модулей (если запустить без флага CREATE_SUSPENDED - то все ок).
    Та же беда через ZwQueryInformationProcess - узнаю PEB и читаю указатели. Когда процесс "стартует замороженным" поле PPEB_LDR_DATA Ldr; еще пустое.

    Вопрос: как сделать? (нужно именно самому научиться дампить).
    Причем Process Explorer от Марка показывает адрес модуля и ntdll.dll (только их 2). Тут только юзермод.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Прочитать из PE заголовка.
     
  3. T800

    T800 Member

    Публикаций:
    0
    Регистрация:
    7 дек 2006
    Сообщения:
    293
    Адрес:
    Moscow
    krol
    Дай калькулятору запуститься то.
    Перед снятием дампа "останови" все потоки калькулятора.
    Узнай базу основного модуля и читай секции через VirtualQueryEx.
     
  4. krol

    krol New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    19
    Booster, это я могу, но не факт, что программа спроецирована по тому же адресу? В 7-ке разве не по рандомным адресам мапится?
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    krol
    Программы всегда спроецированы по фиксированному адресу, рандомными могут быть только базы библиотек(и то не всех, а которые поддерживают это).
     
  6. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Booster
    Address Space Layout Randomization (ASLR)

    ASLR moves executable images into random locations when a system boots, making it harder for exploit code to operate predictably. For a component to support ASLR, all components that it loads must also support ASLR. For example, if A.exe consumes B.dll and C.dll, all three must support ASLR. By default, Windows Vista and later will randomize system DLLs and EXEs, but DLLs and EXEs created by ISVs must opt in to support ASLR using the /DYNAMICBASE linker option.

    ASLR also randomizes heap and stack memory:

    When an application creates a heap in Windows Vista and later, the heap manager will create that heap at a random location to help reduce the chance that an attempt to exploit a heap-based buffer overrun succeeds. Heap randomization is enabled by default for all applications running on Windows Vista and later.
    When a thread starts in a process linked with /DYNAMICBASE, Windows Vista and later moves the thread's stack to a random location to help reduce the chance that a stack-based buffer overrun exploit will succeed.
    http://msdn.microsoft.com/en-us/library/bb430720.aspx



    krol
    Смотри в сторону трасировки, а не через ж** делать ...
    CreateProcessA(... CREATE_SUSPENDED...)
    do {
    WaitForDebugEvent();
    switch ()
    {
    case CREATE_PROCESS_DEBUG_EVENT:
    //Это то место где вы хотите сделать дамп, тольк зачем его сдесь делать? это без смысленно ...
    break;
    }
    } while ( ContinueDebugEvent() );
     
  7. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    shchetinin
    Много приложений юзают /DYNAMICBASE?
    Ещё можно запросить закоммиченые страницы и сделать по ним поиск сигнатуры.
     
  8. krol

    krol New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2011
    Сообщения:
    19
    shchetinin
    То что нужно!
    Только флаг CreateProcessA(... CREATE_SUSPENDED...) - нужно убрать а поставить DEBUG_ONLY_THIS_PROCESS
     
  9. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    krol
    Да именно так !