Сейчас на форуме: rmn, _MBK_ (+7 невидимых)

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

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

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

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

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

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

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

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

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

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

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

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

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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

-----
Research For Food




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

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

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




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.




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

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

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

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

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

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

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

-----
IZ.RU





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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

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

-----
Research For Food





Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

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

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

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

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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


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

-----
Research For Food





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 28 марта 2010 03:50 · Поправил: DenCoder
· Личное сообщение · #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 такжет поможет оживить нужный поток.

-----
IZ.RU




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

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

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

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

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

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

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

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

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

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



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

Создано: 28 марта 2010 10:33
· Личное сообщение · #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 прилага вываливается, опять таки минуя брекпоинт.

29ae_28.03.2010_CRACKLAB.rU.tgz - 5sec.jpg



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

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

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

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



Ранг: 30.5 (посетитель), 5thx
Активность: 0.010
Статус: Участник

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

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

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

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



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

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

obfuskator
Оно:
HIDENAME=zoltan
?

CAPTEXT=Random

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



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

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

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




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

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

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

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

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

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


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

-----
IZ.RU





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

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

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

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

-----
IZ.RU





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

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

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



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

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

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

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



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

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

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

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




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

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

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

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

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

-----
Stuck to the plan, always think that we would stand up, never ran.




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

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

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




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

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

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

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

-----
Research For Food





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

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

Может, и можно - тут надо подумать...

-----
Stuck to the plan, always think that we would stand up, never ran.



. 1 . 2 . >>
 eXeL@B —› Основной форум —› Отладка приложения накрытого Themida
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати