Gs.

Тема в разделе "WASM.RESEARCH", создана пользователем Clerk, 28 авг 2010.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Здрасте.
    Допустим изменили мы регистр Ds на Gs, добавив префикс 0x65. Как отлаживать в таком случае код, например потрассировать такой:
    Код (Text):
    1.     assume fs:nothing, gs:nothing
    2.     push ds
    3.     mov eax,fs:[TEB.Peb]
    4.     pop gs
    5.     mov eax,gs:PEB.Ldr[eax]
    6.     mov eax,gs:PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
    7.     mov eax,gs:LDR_DATA_TABLE_ENTRY.InLoadOrderModuleList.Flink[eax]
    8.     mov ebx,gs:LDR_DATA_TABLE_ENTRY.DllBase[eax]    ; ntdll.dll
     
  2. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Не изменили, а заменили. )
    А потрассировать - что ты имеешь ввиду? В отладчике ручками?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    Да.
     
  4. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clerk
    Эм.. В 32 битной среде с трейсом будут проблемы да и вообще - если просто тупо вставить такой код - он не выполнится. Ибо при попытке доступа, ос генерит сепшен, и сбрасывает GS в NULL. А в 64 битной среде gs доступен на сколько я помню. И там такое проканает.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    Говорим про x86. Этот код выполнится без проблем, попробуйте(если не трассировать). Просто так я бы не спросил ;)
     
  6. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Clerk
    Проблема с трассировкой в WinDbg?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    green
    Отладчик и мод не имеют значения.
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clerk
    На какой OS вы его выполняете? На 7-ке пробовали?
    ADD: Хотя пофиг и на XP не пашет.
    Падает тут
    Код (Text):
    1. 0040111E   .1E              PUSH DS
    2. 0040111F   .64:A1 30000000  MOV EAX, DWORD PTR FS:[30]
    3. 00401125   .0FA9            POP GS                                   ;  Modification of segment register
    4. 00401127   .65:8B40 0C      MOV EAX, DWORD PTR GS:[EAX+C]                 <-----
    5. 0040112B   .65:8B40 09      MOV EAX, DWORD PTR GS:[EAX+9]
    6. 0040112F   .65:8B00         MOV EAX, DWORD PTR GS:[EAX]
    7. 00401132   .65:8B58 18      MOV EBX, DWORD PTR GS:[EAX+18]
    и еще раз говорю что и без отладчика падает ).
    Может я что-то не так делаю )
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    На XP. На 7 тоже работать должен(не проверял, но судя по ядру так), а трассировать не получится.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    Вы из под отладчика не запускайте. И не на песочнице желательно.
     
  11. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clerk
    Сорри - работает
    убрал ненужное (видимо у меня смещения кривые были. Ибо хз откуда брал их щас). Вот это оставил.
    Код (Text):
    1. mov eax,fs:[30h]
    2. pop gs
    3. mov eax,gs:PEB.Ldr[eax]
    4. mov eax,gs:PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
    Так не падает.

    Хороший способ защиты от трейса. )
     
  12. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Способ защиты старый ведь уже.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    У вас просто смещение инвалидное, возникает #AV. Должно быть так(сам код только пример, главное адресация через Gs):
    Код (Text):
    1.     1E                  push ds
    2.     64:A1 30000000      mov eax,dword ptr fs:[30]
    3.     0FA9                pop gs
    4.     65:8B40 0C          mov eax,dword ptr gs:[eax+C]
    5.     65:8B40 0C          mov eax,dword ptr gs:[eax+C]
    6.     65:8B00             mov eax,dword ptr gs:[eax]
    7.     65:8B58 18          mov ebx,dword ptr gs:[eax+18]
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    sysexit
    Вспомнил его из вашего топика.
     
  15. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clerk
    да я это уже понял ) В посте предыдущем исправил. Странно, а структуры у вас брал кстати (быстрым поиском по васму, вы давали их) для масма.
    ну не важно уже.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    Есть идеи как оно функционирует и как трассировать ?
     
  17. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Clerk
    Да, действительно... при трассировке возникает AV - адрес получается какой-то левый.
    Причём вот что интересно - в сл. коде
    Код (Text):
    1.        
    2.                 push ds
    3.         pop  gs
    4.         mov eax, gs:var
    проблема возникает, даже если установить бряк не на саму инструкцию доступа к gs-адресу, а на pop gs.
    Может отладчик некорректно патчит код при установке/снятии бряка?
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    green
    Нет, проблема не в этом :)
     
  19. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Clerk
    Мои предположения (по первым впечатлениям) в том, что отладчик сбрасывает GS в NULL ) Вот тока почему - я не знаю, надо копать. Скорее всего он придерживается некоторым правилам. Либо сам использует GS в некоторых целях.
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    TermoSINteZ
    Посредством манипуляций с контекстом потока(CONTEXT) нельзя прочитать регистр Gs. Тут отладчик не имеет значения.