Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› детект отладчика dotNet
Посл.ответ Сообщение

Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 19 февраля 2017 01:43 · Поправил: zds
· Личное сообщение · #1

смотрю две программы dotNet одного производителя с одинаковой защитой
в обоих программах при загрузке некоторых dll в них проверяется наличие отладчика
Code:
  1. if (Debugger.IsAttached)
  2.                               {
  3.                                    bool result = true;
  4.                                    return result;
  5.                               }
  6.                               IntPtr intptr_ = Class118.LoadLibrary("kernel32.dll");
  7.                               Class118.Delegate14 procAddress_ = Class118.GetProcAddress_3(intptr_, "IsDebuggerPresent");
  8.                               if (procAddress_ != null && procAddress_() != 0)
  9.                               {
  10.                                    bool result = true;
  11.                                    return result;
  12.                               }

что интересно, в первой программе этот код не палил отладчик и я спокойно мог отлаживать. Сейчас приступил ко второй и этот же самый код, на той же самой системе палит отладчик на второй проверке - IsDebuggerPresent. всю голову сломал почему так. пробовал и IlSpector и dnSpy и Dile. единственное отличие это первая прога на FrameWork 3.5, вторая на 4.
как то можно это обойти? патч пока не вариант, т.к. он потянет за собой патчи большого колличества проверок на хэши файлов, строгие имена, подписи сборок и т.д. в во многих файлах.




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

Создано: 19 февраля 2017 01:58
· Личное сообщение · #2

zds

Верните из этой апи результат, который должен быть при отсутствии отладчика. Это же очевидно ?

-----
vx




Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 19 февраля 2017 02:10
· Личное сообщение · #3

difexacaw
понятно, но как это сделать в IlSpector или dnSpy или Dile ?




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

Создано: 19 февраля 2017 02:11
· Личное сообщение · #4

zds

А какая собственно разница, если в памяти код апи тот же самый как и везде и всегда ?

-----
vx




Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 19 февраля 2017 02:30
· Личное сообщение · #5

difexacaw
блин видимо поздно и я туплю, но я все равно не понимаю
если бы это была Olly, то да, я захожу в модуль kernel32, нахожу функцию isdebuggerpresnt либо меняю в памяти код чтобы всегда возвращался 0 либо ставлю бряк в конце функции и руками меняю значение регистра
но как это все сделать в отладчике Net не представляю. они же не работаю с нативным кодом




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

Создано: 19 февраля 2017 02:36
· Личное сообщение · #6

zds

Залейтесь в процесс и делайте что угодно. Или залейтесь в этот ваш отладчик net".

-----
vx





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 19 февраля 2017 02:53
· Личное сообщение · #7

zds пишет:
руками меняю значение регистра

значение регистра возвращается и проверяется на procAddress_() != 0
представь что это test eax, eax

вообще, в чём проблема запатчить bool result = true; на false?

| Сообщение посчитали полезным: Jaa

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

Создано: 19 февраля 2017 11:13
· Личное сообщение · #8

есть три пути:
1. пустить из той же оли или x64dbg отладчик дотнета, а из него прогу
2. написать внешний хук на проверку отладчика
3. использовать scylla hide в режиме самостоятельной работы, ну или из отладчика их пункта 1



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 20 февраля 2017 10:28
· Личное сообщение · #9

ета фича запланирована в dnSpy на попозже (релиз версии 4.x) - см на хитгабе автора



Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 февраля 2017 10:48
· Личное сообщение · #10

Делай раз)))
1. Пишешь на NET свой лоадер в котором патчишь kernel32.dll функцию "IsDebuggerPresent" а затем просто им же подгружаешь свой проект в тот же домен.
И все)))



Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 20 февраля 2017 19:32
· Личное сообщение · #11

difexacaw пишет:
Залейтесь в процесс и делайте что угодно. Или залейтесь в этот ваш отладчик net".

пробовал - не получается. если загрузить прогу в IlSpector или dnSpy, то Olly уже не цепляется. если загрузить в Olly IlSpector или dnSpy, а в них уже прогу - то Olly все равно ее не видит.

-=AkaBOSS=- пишет:
вообще, в чём проблема запатчить bool result = true; на false?

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

Medsft пишет:
Делай раз)))
1. Пишешь на NET свой лоадер в котором патчишь kernel32.dll функцию "IsDebuggerPresent" а затем просто им же подгружаешь свой проект в тот же домен.
И все)))

тоже думал об этом, но все же нашел более простой для себя способ - нашел все проверки на деббагер до нужного мне места, поставил в dnSpy бряк на
Code:
  1.  bool result = true;
  2.  return result;
  3. }

и менял в вручную переменную result, благо dnSpy это позволяет сделать. Единственный минус каждый раз при запуске нужно было 7 раз менять значение. Но хорошо что потребовалось не так много запусков чтобы найти все что нужно




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

Создано: 20 февраля 2017 20:04 · Поправил: difexacaw
· Личное сообщение · #12

zds

> если загрузить прогу в IlSpector или dnSpy, то Olly уже не цепляется.

Потому что они тот же отладочный механизм используют, а отладчик один только у процесса может быть.

> если загрузить в Olly IlSpector или dnSpy, а в них уже прогу - то Olly все равно ее не видит.

Конечно, потому что под отладку берётся отладчик, а не его приложение.

Я имел ввиду подгрузиться в ваше приложение и там произвести нужные манипуляции. К примеру залиться как длл. Или можно это сделать в сам ваш отладчик и при взятии приложения им под отладку обнулять нужное поле в отлаживаемом приложении. Лучше конечно первый вариант. Могу пильнуть нужный для этих целей модуль, но только x32.

-----
vx




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 20 февраля 2017 20:44
· Личное сообщение · #13

Не грузите парня мой вариант самый - true.

zds пишет:
Единственный минус каждый раз при запуске нужно было 7 раз менять значение.
ну если Вам так нравится....




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

Создано: 21 февраля 2017 04:07
· Личное сообщение · #14

zds

Вот запилил вам дллку(x32) --> Link <--

Её нужно в процесс подгрузить - в импорт добавить или залить через инжект.

-----
vx


| Сообщение посчитали полезным: Hugo Chaves, zds

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 21 февраля 2017 13:31 · Поправил: Medsft
· Личное сообщение · #15

на доработке



Ранг: 57.0 (постоянный), 10thx
Активность: 0.050.08
Статус: Участник

Создано: 21 февраля 2017 23:57
· Личное сообщение · #16

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


мне еще конечно очень был интересен вопрос: почему один и тот же код, в одно и тоже время, на одной и той же системе и с одними и теми же инструментами на одной проге детектит деббагер, а на другой нет.




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

Создано: 22 февраля 2017 00:07
· Личное сообщение · #17

zds

В том модуле ошибка(не сохраняется один регистр, из за этого механизм отключается), позже выложу с фиксом.

> на одной проге детектит деббагер, а на другой нет.

Для этого нужно знать как он это делает. Может механизм детекта анстаб или приложение на этот механизм воздействует.

Добавлено спустя 3 часа 6 минут
Вот что получилось --> Link <--

Добавлено спустя 3 часа 14 минут
Я разделил исходную либу на две части. Что бы можно было по быстрому допилить фильтр другим компилем, дельфёй например.

-----
vx


| Сообщение посчитали полезным: zds, Orlyonok

Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 22 февраля 2017 15:09 · Поправил: Medsft
· Личное сообщение · #18

А сто пудово после инжекта она инициализируется? твоим методом Startup?
Заинжектил но все равно детектит




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

Создано: 22 февраля 2017 15:11
· Личное сообщение · #19

Medsft

Там проверка на флажёк в PEB. Если сброшен, то скипается. Так как тогда полагаем что отладчик не запущен. Хотя плаги или сам отладчик может это поле обнулять.

Добавлено спустя -46 минут
Вот простейший пример. Проверил на XP, 7, 8.

624f_22.02.2017_EXELAB.rU.tgz - Ij.rar

-----
vx




Ранг: 330.4 (мудрец), 334thx
Активность: 0.160.17
Статус: Участник
ILSpector Team

Создано: 27 февраля 2017 12:13 · Поправил: Medsft
· Личное сообщение · #20

difexacaw пишет:... ты manadged с unmandged особо не сравнивай
вот тест кривоватый но на основе конфузера сработанный
Как: Запускаем под отладчиком, жмем start protection если не упала радуемся на 50% затем вбиваем любые цифирки в окошечки и жмем посчитать (простое суммирование) если не упала радуемся на 100%
в папках релиз и дебаг есть скомпилированные exe

47c9_27.02.2017_EXELAB.rU.tgz - TestApp.zip




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

Создано: 27 февраля 2017 12:27 · Поправил: difexacaw
· Личное сообщение · #21

Medsft

Посмотрите лог при старте. Может это фишка отладчика, что обнуляет флаг.. Можно вообще данную проверку убрать.

Проверил ваш семпл. Так как это com-app, то инжект нужно немного пофиксить - заменить rEax на rEip(который в #19). На 7-ке под отладчиком без плагинов работает, не вылетает и вычисляет норм апликуха.

На 7-ке у меня не робит софт для записи видео. Поэтому пофиксил в пе хидере версию системы, но в отличие от 7-ки на XP не запускается отладчик при int3 в нэйтиве, поэтому я туда вписал jmp $ --> Link <--

-----
vx



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


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