Сколькими способами можно передать управление в другую часть кода(или аля jmp )

Тема в разделе "WASM.ASSEMBLER", создана пользователем EvilsInterrupt, 27 май 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Вобщем я собираю премудрости, пока способы передачи управления мне известны такие:



    jmp a1

    a1:



    и различные вариации:

    mov eax,a1

    jmp eax



    push a1

    retn

    a1:



    Как еще можно передать управление?
     
  2. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    call, retf, iretd, различные Jcc



    возможны извратные способы вроде сех, или SetThreadContext.



    Если смотреть более широко, то можно передать управление даже с помошью команды mov eax, [eax] (в системный обработчик исключения). Сюда также можно отнести все привелигированые команды (вызывающие исключение), а также int, into, int3, icebp, sysenter, sysexit, syscall.

    С помощью инвалидного опкода тоже можно передать управление :)

    Но если ограничиваться ринг3 кодом (и не трогать возможности ОС), то фактически все сводиться к набору команд jmp, call, Jcc, ret, retf, iret.
     
  3. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    call a1 :)



    Или вот:

    stc

    jc a1



    Или:

    mov cl, 1

    loop a1



    <<<<<<<<<<<<<<<<<

    Ms Rem меня обогнал, IceStudent извини
     
  4. spn_dd

    spn_dd New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    22
    Адрес:
    Ukraine
    самое неприятное(возможно)



    1) перепрограммировать контроллер прерываний(послать туда новые адреса обработчиков и сохранить реальные конечно).

    2) выполнить переход с помощью программного вызова апаратного прерывания.

    3) восстановить адрес обработчика(перепрограммировать обратно контроллер).

    4) ну и на последок придется после передачи управления с помощью апаратного прерывания послать контроллеру сигнал для сброса соответствующего разряда регистра состояния ПКП



    хотя конечно я не пробовал и может не прокатить так как возможно не получится записать OCW в контроллер просто так.



    вобщем это просто идея...
     
  5. _KLAUS_

    _KLAUS_ New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    7
    1)setle cl;

    2)setge cl;

    Конструкции IF-THEN-ELSE
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"




    Уж эти команды точно никуда не передают управление :))
     
  7. spn_dd

    spn_dd New Member

    Публикаций:
    0
    Регистрация:
    24 май 2006
    Сообщения:
    22
    Адрес:
    Ukraine
    _KLAUS_





    Это ты, вобще к чему сказал?
     
  8. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    div AH

    div DX

    div EDX

    все они полюбому дергают деление на ноль
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    mix_mix см выше

    так уж сводятся ???
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Rockphorr



    Нет, либо деление на ноль, либо переполнение.
     
  11. mix_mix

    mix_mix Михаил

    Публикаций:
    0
    Регистрация:
    8 окт 2005
    Сообщения:
    277
    Адрес:
    Токио
    Rockphorr

    в смысле?
     
  12. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    установкой флажка TF

    через SEH
     
  13. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    EvilsInterrupt



    Изврашенные способы

    - mov eax,[0FFFFFFFEh]

    - Делаешь страницу памяти неприсутствующей и перехватываешь int 0Eh

    - sysenter

    - syscall

    - переключение на задачу с измененным CR3 - это самый извращенный метод. Т.е. Ты создаешь новое отображение памяти.

    - db 0F1h - ызывает исклчение неверный код операции
     
  14. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348




    F1 - int 1
     
  15. doctor_Ice

    doctor_Ice New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    845
    Адрес:
    Russia
    rmn

    f1 это не неверный код операции это icebp =)
     
  16. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    я об этом же
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Основная трабла защит как всегда скрыть "тот самый" je который ведет на валидную ветку.



    Интересно как можно задрапировать je?
     
  18. PROFi

    PROFi New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2003
    Сообщения:
    690
    EvilsInterrupt

    В интелах (не знаю как в АМД) возможна отладка от одной branch к другой, а не пошаговая используя MSR и TF.

    трабла защит как всегда скрыть "тот самый" je

    Ну не знаю - обычно ищу адрес памяти а не je (составляя карту памяти где выполняется код, а где нет - главное скорость нахождения "того самого").

    А je это уже вчерашний день, хотя текущий уровень защит столь наивен, что ...
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    в смысле есть ещё способы более извращенные
     
  20. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    ud2 - db 0fh, 0bh