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

Discussion in 'WASM.WIN32' started by krol, Aug 9, 2011.

  1. krol

    krol New Member

    Blog Posts:
    0
    Joined:
    Aug 6, 2011
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    Прочитать из PE заголовка.
     
  3. T800

    T800 Member

    Blog Posts:
    0
    Joined:
    Dec 7, 2006
    Messages:
    293
    Location:
    Moscow
    krol
    Дай калькулятору запуститься то.
    Перед снятием дампа "останови" все потоки калькулятора.
    Узнай базу основного модуля и читай секции через VirtualQueryEx.
     
  4. krol

    krol New Member

    Blog Posts:
    0
    Joined:
    Aug 6, 2011
    Messages:
    19
    Booster, это я могу, но не факт, что программа спроецирована по тому же адресу? В 7-ке разве не по рандомным адресам мапится?
     
  5. Booster

    Booster New Member

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    krol
    Программы всегда спроецированы по фиксированному адресу, рандомными могут быть только базы библиотек(и то не всех, а которые поддерживают это).
     
  6. shchetinin

    shchetinin Member

    Blog Posts:
    0
    Joined:
    May 27, 2011
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Nov 26, 2004
    Messages:
    4,860
    shchetinin
    Много приложений юзают /DYNAMICBASE?
    Ещё можно запросить закоммиченые страницы и сделать по ним поиск сигнатуры.
     
  8. krol

    krol New Member

    Blog Posts:
    0
    Joined:
    Aug 6, 2011
    Messages:
    19
    shchetinin
    То что нужно!
    Только флаг CreateProcessA(... CREATE_SUSPENDED...) - нужно убрать а поставить DEBUG_ONLY_THIS_PROCESS
     
  9. shchetinin

    shchetinin Member

    Blog Posts:
    0
    Joined:
    May 27, 2011
    Messages:
    715
    krol
    Да именно так !