Запуск под отладчиком изменяет адрес PEB.Ldr

Тема в разделе "WASM.RESEARCH", создана пользователем leo, 8 сен 2004.

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Как то решил сравнить содержимое PEB под ОllyDbg и без нее в XP (sp1).

    Получилась интересная вещь, что кроме байта BeingDebugged и разного "мусора" четко различаются значения указателя PEB.Ldr (смещение 0Ch). Пример:

    0С: 00241E90 - без отладчика

    0С: 00241EA0 - под OllyDbg => +10h - какие-то 16 байт

    Кто что думает по этому поводу ?

    Может ось все таки вставляет какие-то ссылочки на дебаггер в контекст процесса ? Или это опять частный случай ?



    special for volodya: что говорят на этот счет твои "упаковщики" ?



    PS: я по прежнему под мастдаем парюсь, так что подробнее покопаться не получается
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Вот тебе ещё результаты из других осей



    00071E90h - w2ksp4

    00071EA0h - w2ksp4 + olly

    00131DC8h - nt4.0

    00131DD0h - nt4.0 + olly
     
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus

    Спасибо за результаты из других осей.

    В теории я не силен, но вроде бы значения не зависят от запуска других приложений. Как твое впечатление ?



    PS: Ой.. Насчет "других приложений" - это пивной глюк. Пить меньше надо.., но не получается..
     
  4. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Что значит других , у других своё пространство . Тебя же интересует запуск под отладчиком . Я проверял не только с олли , действительно это значение разное . А почему разное , так это надо курить PEB , для чего оно там используеться .
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus

    Да, насчет других приоложений я чушь спорол, прошу прощения (хотел поправить да не успел, ты меня опередил).



    А теоретики, сегодня отдыхают ?
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Пока вопросы плодятся быстрее чем ответы..



    1) Пытался "выйти на след" отладчика через OutputDebugString, но погряз в дебрях. В отличие от 9х, никакой предварительной проверки наличия отладки не делается. "Тупо" устанавливается SEH с каким-то запутанным обработчиком и вызывается kernel32.RaiseException. Что дальше ? Где будет обработано это исключение, в этом SEH или в глубинных "потрохах" ситемы ?



    2) Промотр ntdll.ConnectToDbg показывает, что еще какой-то признак отладки пишется в TEB.DbgSsReserved (dword TEB+F24h). Если он не 0, то на выход с песнями. Если 0, то ссылочка на это поле передается в ntdll.ZwCreateDebugObject. Дальше - дебри.
     
  7. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Промотр ntdll.ConnectToDbg показывает, что еще какой-то признак отладки пишется в TEB.DbgSsReserved (dword TEB+F24h). Если он не 0, то на выход с песнями. Если 0, то ссылочка на это поле передается в ntdll.ZwCreateDebugObject. Дальше - дебри.





    Слушай, я дико занят. У меня сейчас курсы по MySQL. Эти дебри - это LPC. А DbgSsReserved - это два DWORD'a. В третьих упаковщиках эта тема ДЕТАЛЬНО прорабатывается. Все там будет. Не морочь пока себе этим голову.
     
  8. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    volodya

    Как говориться, и на том спасибо.



    "А DbgSsReserved - это два DWORD'a"

    Знаю, знаю. Я хотел сказать, что ConnectToDbg проверяет на 0 только первый dword.



    А как скоро ожидаются твои "третьи" ?
     
  9. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Я хотел сказать, что ConnectToDbg проверяет на 0 только первый dword.





    NtCurrentTeb()->DbgSsReserved[0] - это объект синхронизации

    NtCurrentTeb()->DbgSsReserved[1] - хендл LPC-порта на стороне клиента.



    А как скоро ожидаются твои "третьи" ?



    Третьи состоят из двух частей. Т.к. вводится очень большой объем криптографии, то пишется математическое введение. На данный момент введение доросло до 20 страниц. Полагаю, еще столько же - и можно класть на сайт :) Третья часть тоже пока только 20 страниц. Сначала закончу мат. введение. Положу на сайт. Потом крепко возьмусь за собственно статью. Очень много интересных наработок и много людей подключено.
     
  10. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    2 volodya

    До выпуска долгожданной статьи обратите ,пожалуйста ,внимание на Titanium 4.0 от BitArts . В нем используется на мой взгляд интересный метод защиты и упаковки.
     
  11. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    manOwar

    А не дашь ли линк, нато что тебе понравилось?
     
  12. man0war

    man0war New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2004
    Сообщения:
    85
    Адрес:
    Albania
    У меня есть только программа , защищенная Titanium 4.0 ,

    а самого протектора нет.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Кто знает, что за байтик или двордик сидит в PEB по смещению 68h ?

    В XP(sp1) без отладчика этот дворд = 0, а с Olly = x70h.

    В мастдае в этом месте всегда 0, а как насчет w2k ? Проверьте, кому не трудно, плииз..

    <font color="gray]<font size=2>mov eax,fs:[30h]

    mov eax,[eax+68h] ;= ???</font><!--size--></font><!--color-->



    volodya, обещанных упаковщиков 3 года ждут ?
     
  14. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Там Peb.NtGlobalFlag (см. KmdKit)

    В w2k также как у тебя (под отладкой там 70h), но в NT4.0 там 0h

    Попробуй http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=7309&page=0#12

    Там такой вариант:
    Код (Text):
    1. mov     eax,[fs:18h]
    2. mov     eax,[eax+30h]
    3. mov     eax,[eax+18h]
    4. cmp     dword [eax+10h],0
    5. jnz     debugged
    А вообще, если порыть, то таких мест ой-ёй-ой можно понаходить, даже многие api отрабатывают по-разному если под отладкой или без, ещё можно в виндовых сорцах включить поиск по слову "debug", тоже будет не мало интересного
     
  15. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Это NtGlobalFlag под всеми NT-виндами.



    PEB STRUCT

    . . .

    NtGlobalFlag DWORD ? ; 0068h

    . . .

    PEB ENDS



    Enable heap tail checking 0x10

    Enable heap free checking 0x20

    Enable heap parameter checking 0x40
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Точно! и я как раз нарвался, трассируя прогу, что *Неap* ф-ции под отладкой вообще по другим ветвлениям (jcc) ходили
     
  17. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    bogrus

    Суперспасибо за суперответ !



    PS: Four-F тоже суперспасибо (торможу однако..)
     
  18. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    volodya, обещанных упаковщиков 3 года ждут ?



    У меня и так 10-12 часовой рабочий день :dntknw:

    Во-вторых, сначала выйдет КНИГА. Моя с Рельфом. О математике в криптографии. Без нее 3-ю часть читать будет полубесполезно.