+ Reply to Thread
Results 1 to 2 of 2

Thread: Как передать исключение в отлаживаемую программу?

  1. #1

    Default Как передать исключение в отлаживаемую программу?

    имею код
    Code:
    CPU Disasm
    Address   Hex dump          Command                                  Comments
    0040B960  /$  55            PUSH EBP                                 ; Abduction_Crackme_new.0040B960(guessed void)
    0040B961  |.  8BEC          MOV EBP,ESP
    0040B963  |.  6A FE         PUSH -2
    0040B965  |.  68 60F94000   PUSH OFFSET 0040F960
    0040B96A  |.  68 004B4000   PUSH 00404B00
    0040B96F  |.  64:A1 0000000 MOV EAX,DWORD PTR FS:[0]
    0040B975  |.  50            PUSH EAX
    0040B976  |.  83C4 EC       ADD ESP,-14
    ; тут еще немного всякой чепухи
    0040B9AE  |.  6A 04         PUSH 4                                   ; /Protect = PAGE_READWRITE
    0040B9B0  |.  68 00100000   PUSH 1000                                ; |AllocType = MEM_COMMIT
    0040B9B5  |.  68 00000100   PUSH 10000                               ; |Size = 65536.
    0040B9BA  |.  6A 00         PUSH 0                                   ; |Address = NULL
    0040B9BC  |.  8B35 30E04000 MOV ESI,DWORD PTR DS:[<&KERNEL32.Virtual ; |
    0040B9C2  |.  FFD6          CALL ESI                                 ; \KERNEL32.VirtualAlloc
    0040B9C4  |.  8945 E0       MOV DWORD PTR SS:[LOCAL.8],EAX
    0040B9C7  |.  C600 C3       MOV BYTE PTR DS:[EAX],0C3
    0040B9CA  |.  8945 E0       MOV DWORD PTR SS:[LOCAL.8],EAX
    0040B9CD  |.  FF75 DC       PUSH DWORD PTR SS:[LOCAL.9]              ; /pOldProtect => [LOCAL.9]
    0040B9D0  |.  68 20010000   PUSH 120                                 ; |NewProtect = PAGE_EXECUTE_READ|PAGE_GUARD
    0040B9D5  |.  6A 10         PUSH 10                                  ; |Size = 16.
    0040B9D7  |.  50            PUSH EAX                                 ; |Address
    0040B9D8  |.  8B35 3CE04000 MOV ESI,DWORD PTR DS:[<&KERNEL32.Virtual ; |
    0040B9DE  |.  FFD6          CALL ESI                                 ; \KERNEL32.VirtualProtect
    0040B9E0  |.  FF55 E0       CALL DWORD PTR SS:[LOCAL.8]
    собственно логика понятна, выделяем кусок памяти, делаем PAGE_GUARD и вызываем его, делая исключение. Вопрос: как попасть на обработчик прерывания, который устанавливается программой? я делал так: ставлю аппаратную точку останова на обработчик (00404B00), затем в ольке отключаю обработку всех исключений, F9 и олька все равно стопорится на вызове CALL DWORD PTR SS:[LOCAL.8]. Не вопрос, думаю я, затем иду на обработчик и New origin here, но какаказалось на стеке нет информации об исключении и все уходит в небытие... Как побороть? скрин настроек оли

  2. #2
    JKornev's Avatar

    Default Re: Как передать исключение в отлаживаемую программу?

    Попробуйте поставить бряк на ntdll!KiUserExceptionDispatcher, далее если символы подгружены трассируем и входим в RtlDispatchException затем будет раскрутка в цикле, вам нужно войти в RtlpExecuteHandlerForException -> ExecuteHandler -> ExecuteHandler2 -> тут собственно будет вызов пользовательского обработчика. Это верно для моей Win7 x64 в других осях возможно по другому, но суть та же ставим бряк на ntdll!KiUserExceptionDispatcher и трассируем или сразу на ntdll!ExecuteHandler2 ставьте

    P.S. сам так не делал, просто глянул в отладчике на дизасм
    High tech, low life

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 03:27
vBulletin® Copyright ©2000 - 2017
www.reverse4you.org