Сейчас на форуме: tyns777 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Патчинг обфусцированных приложений
. 1 . 2 . >>
Посл.ответ Сообщение

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

Создано: 04 июля 2019 13:24
· Личное сообщение · #1

Здравствуйте, ув. Профессионалы!

Исходные данные:
- программа, написанная на C# и обфусцированная .Net Reactor (скорее всего последней версии). Даже сам дедот пишет "Detected Unknown Obfuscator"
- изменить код в dnSpy нельзя
- сделать инжект dll + патчинг с помощью ILSpector нельзя
- нельзя даже изменить значения переменных во время отладки в dnSpy

- максимум, что можно сделать дак это изменить значения переменных, когда отладчик dnSpy входит в саму библиотеку mscorlib

Задача:
- найти и обучиться способу изменять код в обфусцированных приложениях




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

Создано: 04 июля 2019 13:44
· Личное сообщение · #2

rukop84 пишет:
программа, написанная на C# и обфусцированная .Net Reactor

А взглянуть на неё можно?



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

Создано: 04 июля 2019 13:50 · Поправил: Medsft
· Личное сообщение · #3

rukop84 пишет:
- изменить код в dnSpy нельзя
- сделать инжект dll + патчинг с помощью ILSpector нельзя
- нельзя даже изменить значения переменных во время отладки в dnSpy
это фантастика)
Хотя ...
Дай посмотреть!
Хотя ...
Все что ты описал связано с проверкой цифровой подписи.
Для начала надо пропатчить вызов этой проверки.
А потом делай что хочешь)
Хотя...
Если мне не изменяет память reactor прячет тела методов поэтому что ты там патчить без снятия протектора собрался я не знаю.

Добавлено спустя 8 минут
rukop84 пишет:
Даже сам дедот пишет
- это не самый умный специалист по детекции протекторов



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

Создано: 04 июля 2019 14:06
· Личное сообщение · #4

Adler пишет:
А взглянуть на неё можно?

пожалуйста --> Link <--

только просьба не афишировать название программы

Добавлено спустя 8 минут
Medsft пишет:
Если мне не изменяет память reactor прячет тела методов поэтому что ты там патчить без снятия протектора собрался я не знаю.

ну, не знаю... в dnSpy по методам делаю -> щёлк -> щёлк -> щёлк -> щёлк ->...-> Анализировать -> Присваивается... -> щёлк и нашел нужный для модификации метод



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

Создано: 04 июля 2019 14:43
· Личное сообщение · #5

Значит так существуют пожалуй ТОП программы с рейтингом по запросам на взлом (одна из них твоя). У меня складывается стойкое убеждение что самые большие любители халявы это трейдеры.
На паблике ты не найдешь ничего.
Сам не справишься
И это не реактор



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

Создано: 04 июля 2019 15:03 · Поправил: rukop84
· Личное сообщение · #6

Medsft пишет:
У меня складывается стойкое убеждение что самые большие любители халявы это трейдеры

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

Мастер, Medsft! Ну, не знаю я почему Вы так не любите этот софт

Medsft пишет:
Сам не справишься

поэтому, и обратился за помощью и советам к Профессионалам

Medsft пишет:
И это не реактор

а что это, если позволите узнать?



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

Создано: 04 июля 2019 17:32
· Личное сообщение · #7

rukop84 пишет:
цель должна окупать затраченные на нее средства
увеличивайте обьемы контрактов))

rukop84 пишет:
а что это, если позволите узнать?
коктеиль

почисти от cflow метод M6sF и поймешь как таргет защищается от патчинга



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

Создано: 04 июля 2019 20:13
· Личное сообщение · #8

Medsft пишет:
почисти от cflow метод M6sF

занопил тело метода в hex-редакторе. Получилось так (скрин): --> Link <--

дальше во время отладки в dnSpy получил необработанное исключение (скрин): --> Link <--




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

Создано: 04 июля 2019 21:40 · Поправил: Adler
· Личное сообщение · #9

rukop84 пишет:
занопил тело метода в hex-редакторе. ...
дальше во время отладки в dnSpy получил необработанное исключение...


Да не может быть, прямо мистика какая то тыц
Да и то, что эта функция что-то возвращать должна ни разу не смутило?

P.S. Может все таки лучше 2,5кР/мес?



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

Создано: 04 июля 2019 22:09 · Поправил: rukop84
· Личное сообщение · #10

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




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

Создано: 04 июля 2019 22:15 · Поправил: Adler
· Личное сообщение · #11

rukop84, с чего вы взяли, что я знающий? Я чайник, но занупить функцию используемую в 100500 местах, которая к тому же принимает что-то, и что-то возвращает, это на столько очевидно глупо, что я даже не знаю...



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

Создано: 04 июля 2019 23:10 · Поправил: rukop84
· Личное сообщение · #12

А-а-а-а, вспомнил - я этот метод (M6sF) анализировал ранее:
- суть метода в том, что он превращает цифры в очень нужные для программы текстовые строки, без которых никуда
- создан этот метод обфускатором .Net Reactor, чтобы запутать читабельность кода

А отсюда, получается начало доходить и что от меня хочет Мастер Medsft:
- в общем надо полностью удалить этот метод, а каждое место, откуда он вызывался следует заменить на соответствующую текстовую константу, так?



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

Создано: 05 июля 2019 08:45
· Личное сообщение · #13

Примерно) Скажем так что автор реализовал при доставании очередного стринг проверку на целостность сборки

Добавлено спустя 3 минуты
А пока думаешь над строками, подумай что в этом методе не так что в нем мусор и мусор ли это)
Code:
  1. // Qvp.lvl
  2. .method private hidebysig static 
  3.          int32 f6sg (
  4.                  native int p0,
  5.                  native int p1,
  6.                  [in] [out] uint8[] p2,
  7.                  uint32 p3,
  8.                  [out] native int& p4
  9.          ) cil managed noinlining 
  10. {
  11.          // Method #US Index 225831
  12.          // Method #US NameSpaceIndex 10525
  13.          // Method begins at RVA 0xb0aac
  14.          // Method offset 0x000AEEAC
  15.          // Method token 0x06002b50
  16.          // Code size 94 (0x5e)
  17.          // Count locals 1
  18.          // Count instructions 25
  19.          // Count exceptionHandlers 0
  20.          .maxstack 7
  21.          .locals init (
  22.                  [0] native int
  23.          )
  24.  
  25.          IL_0000: 7E4E110004         ldsfld Qvp.lvl.ovN Qvp.lvl::S6Ao
  26.          IL_0005: 3A43000000         brtrue IL_004d
  27.  
  28.          IL_000a: 28542B0006         call native int Qvp.lvl::Gw88Z4ryvx()
  29.          IL_000f: 72A0020070         ldstr "Write "
  30.          IL_0014: 6F5800000A         callvirt instance string System.String::Trim()
  31.          IL_0019: 72AE020070         ldstr "Process "
  32.          IL_001e: 6F5800000A         callvirt instance string System.String::Trim()
  33.          IL_0023: 72C0020070         ldstr "Memory"
  34.          IL_0028: 28D101000A         call string System.String::Concat(string, string, string)
  35.          IL_002d: 28                 call
  36.          IL_0032: 0A                 stloc.0
  37.          IL_0033: 06                 ldloc.0
  38.          IL_0034: D007030002         ldtoken Qvp.lvl.ovN
  39.          IL_0039: 284F00000A         call System.Type System.Type::GetTypeFromHandle(System.RuntimeTypeHandle)
  40.          IL_003e: 28EC0C000A         call System.Delegate System.Runtime.InteropServices.Marshal::GetDelegateForFunctionPointer(native int, System.Type)
  41.          IL_0043: 7407030002         castclass Qvp.lvl.ovN
  42.          IL_0048: 804E110004         stsfld Qvp.lvl.ovN Qvp.lvl::S6Ao
  43.  
  44.          IL_004d: 7E4E110004         ldsfld Qvp.lvl.ovN Qvp.lvl::S6Ao
  45.          IL_0052: 02                 ldarg.0
  46.          IL_0053: 03                 ldarg.1
  47.          IL_0054: 04                 ldarg.2
  48.          IL_0055: 05                 ldarg.3
  49.          IL_0056: 0E04               ldarg.s p4
  50.          IL_0058: 6F952B0006         callvirt instance int32 Qvp.lvl.ovN::Invoke(native int, native int, uint8[], uint32, native int&)
  51.          IL_005d: 2A                 ret
  52. // end of method lvl::f6sg
  53.  


Добавлено спустя 3 минуты
И что нужно поправить чтоб понять откуда ноги

Добавлено спустя 40 минут
Дам тебе rukop84 дельный совет (с условием что поделишься, у самого времени нет)
Чтобы справиться со сборкой нужен инструмент заменяющий в методах по маске последовательность байт на последовательность байт. Раз собираешься заниматься реверсингом NET без него не обойтись. А может в сети такой найдешь хз. Ключевое слово в методах а значит notepad++ не пойдет)))

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

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

Создано: 05 июля 2019 13:55
· Личное сообщение · #14

Medsft пишет:
автор реализовал при доставании очередного стринг проверку на целостность сборки

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

Medsft пишет:
подумай что в этом методе не так

над задачкой подумаю чуть позже, там нужно вникнуть

Medsft пишет:
нужен инструмент заменяющий в методах по маске последовательность байт на последовательность байт

дак, вроде такой инструмент уже известен, дедот называется. Вот ссылка на страницу с небольшим примером в самом низу страницы "Using a different rename regex" --> Link <--

Также еще нарыл на гитхабе: dnDeflow - Control flow deobfuscation using Z3 and ILAst. Вот ссылка: --> Link <--
Но ни скомпилированного релиза, ни документации, ни справки - нет. И пока неизвестно подойдет ли для нашего случая



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

Создано: 05 июля 2019 14:22
· Личное сообщение · #15

Пиши сам я тебе говорю. Нет инструмента а он тебе нужен



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

Создано: 05 июля 2019 15:14
· Личное сообщение · #16

Medsft пишет:
Пиши сам я тебе говорю. Нет инструмента а он тебе нужен

Мастер Medsft, Вы переоцениваете способности ученика

Если для того, чтобы исследуемое приложение стало доступным для патчинга новичку надо самому создавать какие-то инструменты, значит следует признать, что выбранные способы слишком сложны и отказаться от них. Все Гениальное - пРОСТое и ведет к РОСТу, к результату. А сЛОЖное - ведет по ЛОЖному пути или приводит в тупик

Предлагаю тогда оставить обсуждение того, что защищено со всех сторон и практически неуязвимо. И перейти к обсуждению объекта с меньшим способом защиты - библиотеки mscorlib, которую использует программа и в которой можно беспрепятственно менять значения переменных, переданных основным приложением

Тогда постановка задачи будет следующая:
- какие способы/методы существуют в крэкинге, чтобы изменять код в библиотеки mscorlib?
- как можно приложению подсунуть модифицированную mscorlib?
- как подменять вычисляемые значения переменных библиотеки mscorlib для конкретного приложения?



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

Создано: 05 июля 2019 17:23
· Личное сообщение · #17

rukop84- ты неисправим
а ты знаешь что патчить в сборке?



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

Создано: 05 июля 2019 17:38
· Личное сообщение · #18

Medsft пишет:
а ты знаешь что патчить в сборке?

да:
1) нужно сделать в сборку инжект моей dll (которую надо немного доработать, так как усложнился алгоритм проверки у исследуемого приложения)
2) после этого пропатчить 8 или 9 функций (какие функции патчить знаю)

Всё, как учили!!!




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

Создано: 05 июля 2019 17:40 · Поправил: Dr0p
· Личное сообщение · #19

Я написал пост с ответом, но оказалось что заблокирован. Поэтому увы. Второй раз набирать текст нет смысла.



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

Создано: 08 июля 2019 09:22
· Личное сообщение · #20

rukop84
Функционал таргета не интересен мне.Меня интересует техника защиты приложения.Я готов был помочь при условии активного содействия над распаковкой программы. Раз у нас с Вами разные цели дальнейшего разговора не получится.

Добавлено спустя 2 минуты
Бесплатно я не работаю над взломом целевых таргетов



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

Создано: 08 июля 2019 11:12 · Поправил: rukop84
· Личное сообщение · #21

Medsft пишет:
Функционал таргета не интересен мне.Меня интересует техника защиты приложения.Я готов был помочь при условии активного содействия над распаковкой программы. Раз у нас с Вами разные цели дальнейшего разговора не получится.

я Вас понял.
А в направлении того, что Вам интересно можно будет продолжать тему форума? Да и относительно решения заданных Вами ранее задач?



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

Создано: 08 июля 2019 12:46
· Личное сообщение · #22

Почему нет)




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

Создано: 08 июля 2019 18:21
· Личное сообщение · #23

Dr0p пишет:
Я написал пост с ответом, но оказалось что заблокирован. Поэтому увы. Второй раз набирать текст нет смысла.

Рекомендую поставить какое-нибудь расширение, сохраняющее текст. Например https://addons.mozilla.org/ru/firefox/addon/textarea-cache/
Тогда в случае чего сможете достать набранный текст и сохранить уже в текстовик =)



Ранг: 7.1 (гость), 2thx
Активность: 0.070.04
Статус: Участник

Создано: 08 июля 2019 18:31
· Личное сообщение · #24

Haoose-GP он забанен




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

Создано: 08 июля 2019 18:43
· Личное сообщение · #25

Nihil enim

Кто забанен
Учитывая всплеск банов, не удивительно почему форум глюкнул.

Haoose-GP

На всех форумах есть автосохранение обычно. Обновляться нужно, что бы всё работало нормально. А тут копировать нужно через пять предложений, что бы не набирать заново.



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

Создано: 08 июля 2019 18:47 · Поправил: Medsft
· Личное сообщение · #26

Не знаю что там написал Dr0p))) но когда ставят вопрос таким образом:
rukop84 пишет:
Тогда постановка задачи будет следующая:
- какие способы/методы существуют в крэкинге, чтобы изменять код в библиотеки mscorlib?
- как можно приложению подсунуть модифицированную mscorlib?
- как подменять вычисляемые значения переменных библиотеки mscorlib для конкретного приложения?


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



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

Создано: 10 июля 2019 17:42 · Поправил: rukop84
· Личное сообщение · #27

Medsft пишет:
но когда ставят вопрос таким образом...

дак, не пойму: а на что так срезонировал Ваш организм? На то, что я покушался на библиотеку mscorlib?

Medsft пишет:
Не знаю что там написал Dr0p)))

а Dr0p`a забанили в другой обсуждаемой теме, по другому поводу, и было это давно

Medsft пишет:
нужен инструмент заменяющий в методах по маске последовательность байт на последовательность байт

Мастер Medsft, можете привести пример или простую задачку в рамках исследуемой программы:
- что конкретно на что конкретно нужно заменить (байт код на байт код)

Когда для мозга появляется конкретика в постановке задачи, то он перестает бунтовать и начинает генерировать решения и перебирать способы и методы

Если я найду способ или софт решить одну простую такую задачку, то это действие можно будет затем масштабировать на всю исследуемую программу




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

Создано: 10 июля 2019 17:49 · Поправил: difexacaw
· Личное сообщение · #28

rukop84

Если байт код(данные для транслятора/компилера) изменены, то я бы попробовал связать их через саму вм. Если для неё есть дебаг символы(не факт что есть, для тех версий что я не так давно смотрел их небыло), то это вашу задачу существенно упрощает наверно. Если какой то блок и вовсе вырезан из исходного хранилища(образа), то как определить без известных вызовов что там вызывается при трансляции - никак, если только связать сами данные с известными действиями вм.

-----
vx




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

Создано: 10 июля 2019 20:28 · Поправил: rukop84
· Личное сообщение · #29

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

Мастер Medsft, подправьте, если можно ход моих мыслей:

Защита 1:
- расположена в методе M6sF
- суть защиты в том, что при каждом возвращении текстовой константы происходит еще и проверка на целостность кода

Защита 2 (гипотеза):
- где-то в коде существуют проверки цифровой подписи
- скрывают эту проверку методы с ключевым словом hidebysig

Таким образом:
1) удалив все ключевые слова hidebysig в методах, станет ясно где в коде происходит проверка цифровой подписи
2) удалив проверку цифровой подписи и
3) удалив проверку на целостность кода в методе M6sF
мы все защиты протектора и снимем, так?



Ранг: 7.1 (гость), 2thx
Активность: 0.070.04
Статус: Участник

Создано: 10 июля 2019 20:46
· Личное сообщение · #30

команда pc ret делала деобфускатор на основе de4dot, есть "de4dot .NET Reactor 5.0" в сети. Не помогает?


. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Патчинг обфусцированных приложений
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати