eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: soft (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Отладка приложения накрытого Themida
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 6.0 (гость)
Статус: Участник

Создано: 27 марта 2010 20:34 · Поправил: Модератор New!
Цитата · Личное сообщение · #1

Есть dllка, запакованная с помощью темиды. При чем опции там не сильно понаворочены.

Цель - посмотреть как работает одна из экспортированных функций в конкретной ситуации.

dll-ка является частью большой программы и интерес представляет то как эта функция отрабатывает именно в рамках этой программы (как я уже писал - в конкретной ситуации).

В эту программу могу заинжектить свою dllку, и в нужный момент перехватить вызов этой функции.

Что делаю (пробовал много разных вариаций, остановился пока на этом):
1) стопаю все потоки кроме того где был вызов (SuspendThread)
2) отключаю уведомления об атаче/детаче потоков во всех модулях. (тут возможно не надо, но в другой ситуации с этой прогой помогло)
3) ухожу в бесконечный цикл (типа while(true);)
4) атачусь олей к запущеной проге.

В потоках нахожу этот (активных только 2, 1 которым олли атачился и вот этот), пытаюсь его отлаживать.
Он, как и следовало ожидать, находится в моем бесконечном цикле.

Пробовал:
1) ставить брекпоинт на строчке следующей за текущей
2) просто делать степ
3) trace into/over

Всё это приводит к тому что прога переходит из Paused в Running и если после этого ее стопнуть то этот поток находится в недрах WaitForMultipleObjects.
Никак не могу понять как оно туда попало, ибо все потоки вроде как стопнуты, а этому никак мимо моего брекпоинта не пройти.

Очень интересует как оно меня так жестоко обходит, ну и "что делать?"

От модератора: русский язык научись уважать! Что ещё за "апликуха"?


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 27 марта 2010 21:35 New!
Цитата · Личное сообщение · #2

Zulkis
А зачем такой изврат?
Почему нельзя просто загрузить отлаживаемую прогу в отладчик и брякнуться на исследуемой
функцие в момент исполнения?

Ранг: 6.0 (гость)
Статус: Участник

Создано: 27 марта 2010 21:45 New!
Цитата · Личное сообщение · #3

1) До наступления нужного момента эта функция вызывается не одну сотню раз.
2) Программа запускается другой программой, и напрямую не запускается.
Тратить несколько дней на взлом только этого фокуса ну совсем не хочется.


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 27 марта 2010 21:54 New!
Цитата · Личное сообщение · #4

Такое впечатление, что произошёл заход внутрь sysenter со взведеным TF-флагом. Тогда Single Step не даёт планировщику переключить контекст, и поток зависает в состоянии ожидания. Возникает вопрос - с какими объектами хочет синхронизировать выполнение WaitForMultipleObjects? И ещё - для всех ли потоков SuspendThread завершается удачно?

Ранг: 6.0 (гость)
Статус: Участник

Создано: 27 марта 2010 22:08 New!
Цитата · Личное сообщение · #5

Оли вроде предупреждает что стоит TF флаг и что оне может сделать Step. Кстати он предлагает эту беду разрешить с помощью брейкпоинта. Что в моем случае не помогает.

С чем хочет - хз, с объектами которые насоздавала эта программа Там 60-70% потоков висит в этом вейте.
Вверх по стеку после Run-Pause там OpenAL олли показывает.

SuspendThread для всех удачен (логи в файл пишутся). +Я писал что олли показывает 2 активных потока, тот через который он инжектился и вот этот.


Ранг: 274.0 (наставник)
Статус: Участник
Advisor

Создано: 28 марта 2010 00:14 New!
Цитата · Личное сообщение · #6

хз..мож не в тему, но на всякий случай глянь в опциях, не стоит ли галка на " decode sse"


Ранг: 312.2 (мудрец)
Статус: Участник

Создано: 28 марта 2010 01:57 · Поправил: DenCoder New!
Цитата · Личное сообщение · #7

Тоже не знаю, поможет или нет, но попробовал бы новый Фантом со всеми включенными опциями драйвера и опцией Protect DRx и установить аппаратный бряк на выполнение...


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 28 марта 2010 02:08 New!
Цитата · Личное сообщение · #8

DenCoder
Вряд-ли поможет.

Zulkis
Попробуй хайды с опциями "anti anti attach". может быть поможет.
А вообще скорее всего прога запускается с ключами в командной строке, поэтому не запускается
просто через проводник. Думаю что всё-же легче разобраться почему прога не запускается, чем
бороться с глюками при аттаче. Как вариант, можешь попробовать последней беткой второй ольки
подцепиться. Вроде там пофиксили проблемы при аттаче


Ранг: 539.6 (!)
Статус: Участник
оптимист

Создано: 28 марта 2010 02:26 New!
Цитата · Личное сообщение · #9

daFix пишет:
Программа запускается другой программой, и напрямую не запускается

Вопрос именно другой программой? может экзешен накрыт армой с функцией дебуг блоск?


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 28 марта 2010 03:06 New!
Цитата · Личное сообщение · #10

Zulkis пишет:
Программа запускается другой программой, и напрямую не запускается.


Тут явно сказано что запускается ДРУГОЙ программой. Думаю что чел сказал бы об арме,
если бы она там была
Вариантов тут не очень много - скорее всего или командная строка или мьютексы, но если там
самопальная реализация наномитов или прочей дряни, тогда конечно легче цепануться


Ранг: 312.2 (мудрец)
Статус: Участник

Создано: 28 марта 2010 03:50 · Поправил: DenCoder New!
Цитата · Личное сообщение · #11

daFix пишет:
Как вариант, можешь попробовать последней беткой второй ольки
подцепиться. Вроде там пофиксили проблемы при аттаче


Да, в первой ольге есть баг при аттаче: иногда все потоки вдруг засыпают. Я решал эту проблему так: ПКМ->Resume {50 - 100} )))
ПКМ рука устанет, поэтому лучше Shift-F10.

Если у Zulkis'а такая же проблема, то для автоматизма борьбы с этим багом инжектирующая прога может получать состояние потока и будить его, пока он не проснется. NtQuerySystemInformation с классом SystemProcessesAndThreadsInformation даст больше информации о состоянии потока, чем возвращаемое значение ResumeThread.

Code:
  1. struct SYSTEM_THREADS
  2. {
  3.   LARGE_INTEGER KernelTime;
  4.   LARGE_INTEGER UserTime;
  5.   LARGE_INTEGER CreateTime;
  6.   ULONG WaitTime;
  7.   PVOID StartAddress;
  8.   CLIENT_ID ClientId;
  9.   ULONG Priority;
  10.   ULONG BasePriority;
  11.   ULONG ContextSwitchCount;
  12.   THREAD_STATE State;
  13.   KWAIT_REASON WaitReason;
  14. };


Process Explorer такжет поможет оживить нужный поток.

Ранг: 6.0 (гость)
Статус: Участник

Создано: 28 марта 2010 09:34 New!
Цитата · Личное сообщение · #12

Bronco
Decode SSE registers?
Включил - ситуация не поменялась.

DenCoder
Фантом вылетал при атаче. Оказалось что был старый. Сейчас буду мучить 1.54, или есть новее?

Что же касается стопнутых ниток, то мне как раз и надо что бы они все стояли. Т.к. там по ним раскиданы разного рода проверки на дебаг, которые наоборот мешаются.

daFix
Там какая то самопальная чекалка запуска. Точно не через командную строку.

Если заатачиться второй олькой то программа крашится. Опять таки непонятно почему, т.к. все потоки стопнуты.


Ранг: 274.0 (наставник)
Статус: Участник
Advisor

Создано: 28 марта 2010 10:24 New!
Цитата · Личное сообщение · #13

Zulkis пишет:
Включил

зря...с этой опцией олька как раз и тормозит при аттачах....
если либа не большая, заливай...посмотрим


Ранг: 1996.4 (!!!!)
Статус: Модератор
retired

Создано: 28 марта 2010 10:29 New!
Цитата · Личное сообщение · #14

Фима может скрывать свои потоки от отладчика. Так что я бы точно убедился, что ты глядишь именно на тот поток, что надо.
Что касается заход внутрь sysenter со взведеным TF-флагом. Тогда Single Step не даёт планировщику переключить контекст, и поток зависает в состоянии ожидания - то TF остаётся вообще во флагах на стеке, а в ринг0 флаги свои, как оно протащит ТФ в ринг0 я вообще хз.

Ранг: 6.0 (гость)
Статус: Участник

Создано: 28 марта 2010 10:33 New!
Цитата · Личное сообщение · #15

Использовал OllyDbg - 9in1 for Themida (взят отсюда: www.tuts4you.com/download.php?view.2012)
С ними происходит всё вышеописанное.

Попробовал PhantOm 1.54 и HideOD 0.182.
К этому они не цепляются т.к. так переименован экзешник Olly.
Если вернуть ему имя то во время атача высвечивается ошибка (см. аттач)
Далее можно нажимать хоть Да, хоть Нет. Через некоторое время (похоже как раз указанные 5 секунд) опять высвечивается она же. И так до бесконечности. По крайней мере я не додытал что бы она закончилась.

Если же взять PhantOm и HideOD с голым Olly, то после Attack/Run прилага вываливается, опять таки минуя брекпоинт.

{ Атач доступен только для участников форума } - 5sec.jpg

Ранг: 6.0 (гость)
Статус: Участник

Создано: 28 марта 2010 10:36 New!
Цитата · Личное сообщение · #16

Bronco
Либа часть игрушки, инсталяшка 4ГБ весит

Archer
Как поймать скрытые фимой потоки? Скорее всего там действительно спрятан поток который делает чек и всё выбивает.

Ранг: 30.5 (посетитель)
Статус: Участник

Создано: 28 марта 2010 10:53 · Поправил: obfuskator New!
Цитата · Личное сообщение · #17

дров фантома переименовал?

ADD.
Zulkis пишет:
Оно:HIDENAME=zoltan?

да, оно + на всякий случай переименовал CAPTEXT=

Ранг: 6.0 (гость)
Статус: Участник

Создано: 28 марта 2010 11:01 · Поправил: Zulkis New!
Цитата · Личное сообщение · #18

obfuskator
Оно:
HIDENAME=zoltan
?

CAPTEXT=Random

Эти два в сразу сделал когда PhantOm начал пробовать.


Ранг: 1996.4 (!!!!)
Статус: Модератор
retired

Создано: 28 марта 2010 12:13 New!
Цитата · Личное сообщение · #19

Да никак их не поймать. Не давать их скрыть. Я имел в виду, что скрывается от отладчика тред, стандартная антиотладка, гугл на HideThreadFromDebugger. Только после аттача будут сложности с ним. Поэтому и говорю, погляди на ИД тредов. Точно не проморгал это дело?

Ранг: 6.0 (гость)
Статус: Участник

Создано: 28 марта 2010 13:32 New!
Цитата · Личное сообщение · #20

Archer
Я сам стопаю через: CreateToolhelp32Snapshot. Все стопы вроде удачно проходят.
От этого тоже прячет?


Ранг: 312.2 (мудрец)
Статус: Участник

Создано: 29 марта 2010 10:10 · Поправил: DenCoder New!
Цитата · Личное сообщение · #21

Конечно. Лучше перехватывать потоки от старта процесса и не давать их скрыть.
____________________________________________________________________

Да, Archer, прав. Спасибо, Archer! Даже и не знал, что это возможно... так просто.

--> Антиотладочные трюки <--

Вот такой простой код
Code:
  1. push 0
  2. push 0
  3. ;HideThreadFromDebugger
  4. push 11h
  5. push -2 ;GetCurrentThread()
  6. call NtSetInformationThread


отсоединяет поток от отладчика.


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 29 марта 2010 23:46 New!
Цитата · Личное сообщение · #22

Чё-то всё равно не въехал - этот антидебаговый трюк не скрывает потоки от перечисления через те же Tool Help, так что заинжекченная либа всё равно их бы обнаружила и остановила с помощью SuspendThread. Или я чё-то путаю (на практике проверять лень - просто мысли).


Ранг: 312.2 (мудрец)
Статус: Участник

Создано: 30 марта 2010 00:07 · Поправил: DenCoder New!
Цитата · Личное сообщение · #23

Ой, блин. Я, похоже, запутался. Вообще если дословно понимать написанное в pdf, то этот трюк скрывает поток от отладчика только в плане исключений. Проверить никто не хочет? У меня времени не особо, к своей тулзе прикручу, чтоб без проблем можно было отладчиком в любой момент подцепиться. Но пока сейчас другое пишу.

_________________________
P.S. Время не будет переводиться на cracklab? )))


Ранг: 1996.4 (!!!!)
Статус: Модератор
retired

Создано: 30 марта 2010 18:15 New!
Цитата · Личное сообщение · #24

Он дисконнектит от отладчика: сообщения ему не приходят. И я имел в виду не то, что он не замрёт, а что он скрыт и после аттача бряк не работает.

Ранг: 6.0 (гость)
Статус: Участник

Создано: 30 марта 2010 19:18 · Поправил: Zulkis New!
Цитата · Личное сообщение · #25

Archer
Я нашел плагины которые не дают ставить этот флаг.
Вопрос такой. Надо что бы отлаживаемое приложение была запущено из под Olly, или достаточно просто запустить Olly до него?

Кстати, а если syser'ом попробовать дебажить, там не будет таких проблем?

Ранг: 116.5 (ветеран)
Статус: Участник

Создано: 30 марта 2010 19:21 New!
Цитата · Личное сообщение · #26

Zulkis пишет:
Кстати, а если syser'ом попробовать дебажить, там не будет таких проблем?

Раньше он при таком фокусе в синьку вылетал, щас не знаю...


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 30 марта 2010 20:34 New!
Цитата · Личное сообщение · #27

Zulkis пишет:
Надо что бы отлаживаемое приложение была запущено из под Olly

Именно. Тот же фантик мог бы избавить от этих HideThreadFromDebugger.

Valemox пишет:
Раньше он при таком фокусе в синьку вылетал

Но было это очень-очень-очень давно

Ранг: 6.0 (гость)
Статус: Участник

Создано: 30 марта 2010 22:54 New!
Цитата · Личное сообщение · #28

А снять этот HideThreadFromDebugger можно?


Ранг: 528.5 (!)
Статус: Участник
5KRT

Создано: 30 марта 2010 23:17 New!
Цитата · Личное сообщение · #29

Zulkis
На сколько я понял, это не прот, а просто опция защиты, так что если снимать, тогда только с Themid'ой. Чуть выше DenCoder, привёл пример этого трюка:
Code:
  1. push 0
  2. push 0
  3. ;HideThreadFromDebugger
  4. push 11h
  5. push -2 ;GetCurrentThread()
  6. call NtSetInformationThread

Чтобы его обойти, поймай вызов этой функции и не дай ей выполниться.
Сорри, если чего-то не понял


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 30 марта 2010 23:49 New!
Цитата · Личное сообщение · #30

Может, и можно - тут надо подумать...
. 1 . 2 . >>
 eXeL@B —› Основной форум —› Отладка приложения накрытого Themida

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS