Какие есть еще методы перехватить исключение?

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

  1. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Я попробовал - даже если сделать вот так:
    Код (Text):
    1. mov dword [fs:0], 0
    2. mov byte [0], 0
    хоть мы и затираем сех, RtlDispatchException получает управление. Ее можно сплайснуть
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Если можно 2-ой процес создать, то под отладку брать этот код, и там ловить.
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    asd
    у него этот код типа стаба у какого-то пакера или шифровщика. так что второй процесс отменяется
     
  4. tylerdurden

    tylerdurden New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2004
    Сообщения:
    322
    > значит, без обертки...
    Как это без обертки, вы в отладчик посмотрите, хп грузит kernel32.dll напару с ntdll _всегда_ потому что ntdll юзает ф-ии из kernel32 ! Это связанно с их базой данных sysmain.sdb в которую к примеру винда лезет чтобы проверить приложение на предмет совместимости с DEP
     
  5. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    это что за новости =\
    NTDLL ничего не импортирует и предоставляет только шлюзы через INT 2e или SYSENTER в ядро. Ну + несколько простых функций. Но kernel она точно не импортирует и не может импортировать по определению, т.к. лежит она на уровень ниже kernel.
    Вообще, архитектура примерно такая:
    Приложение <--> KERNEL32.DLL (Win32 API) <--> NTDLL.DLL (Native API) <--ring0--> NTOSKRNL.EXE (Native API, ring0)
    (без учета WIN32K.SYS)
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    ха, это еще не все на что билли способен
    не импортирует это да, но юзает сцуко
    конкретно BaseQueryModuleData()
     
  7. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    это функция kernel32.dll, которую использует ntdll?
     
  8. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Есть подобная проблема, по обработке исключений.
    push MyFunk
    push fs:[0]
    mov fs:[0],esp
    mov [0000],eax
    MyFunk:
    ............
    Код работает отлично ели находится в секции кода, если этот код перенести в новодобавленую секцию, обработчик перестает получать управление.
    Где находится поле которое отвечает за использование SEH.
     
  9. GorluM

    GorluM николай gorl

    Публикаций:
    0
    Регистрация:
    6 дек 2003
    Сообщения:
    61
    Адрес:
    Москва
    может быть у секции нету прав на выполнение кода?
     
  10. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    GorluM
    Флаги прав секции одинаковые что у первой что у последней.
     
  11. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    да
     
  12. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    PaCHER, если ты чтото кудато переносишь, оно должно быть базонезависемым, приведенный тобой код не является таковым
     
  13. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    похоже на то.. но это только начиная с sp2
    а что она вообще делает?
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    2003сп1+ ХПсп2+

    MS родил новый сервис "Application Experience Lookup Service"
    типа хачить модули на лету, а то дох траблов с компатибилити

    сначала накосячат так что без ундокументед и версион-чекинга только "хело ворлд" работает
    а потом борятся за кастомера, который платит-то не за винду, постоянно "улучшающуюся"
     
  15. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    FreeManCPM
    Ептыть, да базонезависимый он, привел я стандартный код установки обработчика.
    Код (Text):
    1. 0101E029  CALL NOTEPAD.0101E032
    2. 0101E02E  AND AL,0F5
    3. 0101E030  ADC AL,BYTE PTR DS:[EAX]
    4.  
    5. 0101E032  POP EAX
    6. 0101E033  PUSH EAX
    7. 0101E034  MOV DWORD PTR DS:[EAX],ESP
    8. 0101E036  MOV DWORD PTR DS:[EAX+29],EAX
    9. 0101E03C  ADD DWORD PTR SS:[ESP],27
    10. 0101E043  PUSH DWORD PTR FS:[0]
    11. 0101E04A  MOV DWORD PTR FS:[0],ESP
    12. 0101E051  MOV DWORD PTR DS:[ECX],EAX ; ЕCX=0
    13. 0101E053  RETN
    14. 0101E054  RETN
    15. 0101E055  MOV ESP,DWORD PTR DS:[44BAC6]
    16. 0101E05B  POP DWORD PTR FS:[0]
    17. 0101E062  ADD ESP,4
    Если этот код исполнять на ОЕП то все отлично, если в новодобавленой секции то обработчик не получает управления.

    Вот опкоды чтоб не переписывать код:
    E8 04 00 00 00 24 F5 12 00 58 50 89 20 89 80 29 00 00 00 81 04 24 27 00 00 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 0F 06 C3 C3 8B 25 C6 BA 44 00 64 8F 05 00 00 00 00 83 C4 04
     
  16. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Вобщем так повелось, что приходится на свои вопросы отвечать самому :)
    Проблема была в том что несрабатывал обработчик исключения (обработчик базонезависимый) в одном файле работает в другом работает только в первой секции в третем вообще несрабатывает.
    Благодаря нескольким людям и тыканьем носом, нашел причину проблемы.
    Код (Text):
    1. 7C9108A1 Main     PUSH EBP
    2. 7C9108A2 Main     MOV EBP,ESP                               ; EBP=0012FB84 ;EAX=addr PE signature
    3. 7C9108A4 Main     MOVZX ECX,WORD PTR SS:[EBP+10]            ; ECX=0000000A
    4. 7C9108A8 Main     MOV EAX,DWORD PTR SS:[EBP+18]
    5. 7C9108AB Main     CMP ECX,DWORD PTR DS:[EAX+74]
    6. 7C9108AE Main     JNB ntdll.7C910C52
    7. 7C9108B4 Main     MOV EDX,DWORD PTR DS:[EAX+ECX*8+78]       ; EDX=00000000 указатель на поле LoadConfig Rva (0C8h от PE)
    8. 7C9108B8 Main     TEST EDX,EDX
    9. 7C9108BA Main     JE ntdll.7C910C52 ;если да то управление передасца на обработчик если нет то процес теминейтится
    Так что если поле LoadConfig Rva будет !=0 не будет срабатывать обработчики исключений через FS:[0] (или будут глюки в зависимости от таблицы LoadConfig). В описание PE на это полк стоят ??
    Эта таблица создается если файл скомпилен с CRT.
    Глубже не смотрел, так что что есть то есть.

    Ссылки по теме:
    http://rsdn.ru/Forum/?mid=1581287
    http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!712.entry
     
  17. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Вот нашел еще один кусочег при обработке сэха системой
    7C9379D6 Main TEST BYTE PTR DS:[EAX+5F],4 ; EAX=ADDR 'PE'
    7C9379DA Main JNZ ntdll.7C94F6AF

    Как написано в описании ПЕ это поле DLL Flags и если 2ой байт его будет = 4 процес будет закрыт
    4 означает Image do not use SEH вот такая вот штука.
    а в описании написано "Устарел и не используется" видать не совсем устарел.
     
  18. like_a

    like_a New Member

    Публикаций:
    0
    Регистрация:
    13 дек 2006
    Сообщения:
    16
    В другом описании, однако, написано другое

    т.е. этот флаг отвечает за то что dll будет информирована, когда к нему подключится поток.

    Для случая .exe очистка флага помогает - обработчик структурного исключения начинает работать, а вот если отключить этот флаг у .dll, то получаем "программа не может обработать исключение".
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Любой обработчик исключения начинается с ntdll!KiUserExceptionDispatcher, если это сплайснуть - будет полный контроль
     
  20. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    если процесс не грохнется в KiDispatchException.

    А если трассировкой посмотреть в каком месте падает?

    Да никак, ибо он после VEH/SEH'a вызывается, если последние не смогли обработать исключение.