Сейчас на форуме: 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

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



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

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

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

этот дедот уже древний и не помогает давным давно

если надо есть более свежий и крутой дедот, который "кушал" все подряд от Tianjiao:
h***s://github.com/Tianjiao/de4dot
h***s://github.com/Tianjiao/de4dot/releases/download/v3.1.41592.3405/de4dot.zip

но в отношении исследуемой программы в этот раз он поперхнулся. Здесь скорее всего одна из последних защит .Net Reactor 6.0




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

Создано: 11 июля 2019 09:58
· Личное сообщение · #3

rukop84 пишет:
этот дедот уже древний и не помогает давным давно
Вы видимо о каком то другом de4dot, т.к. репозиторий на гитхабе обновлен 16 дней назад.




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

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

Adler пишет:
обновлен 16 дней назад

ну так этож собирать надо
а тем, кому нужна кнопка "скачать и установить", приходится довольствоваться билдом пятилетней давности

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


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

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

-=AkaBOSS=-
Да что вы говорите, там и собранный есть 16 дней назад
Binaries
Get binaries from the build server.

-----
Everything is relative...




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

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

Народ хватит уже. Это другой протектор
hidsig забудь
Я в этой теме просил Вас высказать гипотезы что не так в методе. Ответа нет ни от кого

Добавлено спустя 2 минуты
Проверку подписи.. Смотри используемые апи

Добавлено спустя 4 минуты
Мой совет rucop: лучше плати автору программы исправно, не твой уровень это.




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

Создано: 11 июля 2019 18:19
· Личное сообщение · #7

Medsft пишет:
Я в этой теме просил Вас высказать гипотезы что не так в методе. Ответа нет ни от кого

IL вообще не знаю, но меня смущает это:
Code:
  1. IL_002d: 28                 call

Но видимо дело не в нем или не только в нем, т.к. если его занопить метод не принимает читаемый вид на C#.

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

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

Создано: 11 июля 2019 18:50
· Личное сообщение · #8

Adler пишет:
Вы видимо о каком то другом de4dot

тот, что у Вас по ссылке - это мой любимый дедот от Tianjiao. А тот, что древний - это от команды PC Ret, который можно найти в сети

Добавлено спустя 2 минуты
Medsft пишет:
Мой совет rucop: лучше плати автору программы исправно, не твой уровень это.

чувствую, что Мастер обиду на меня затаил. А за что - не говорит

Добавлено спустя 12 минут
Мастер Medsft, если речь идет именно об обходе защиты исследуемого приложения, то свои способы обхода я уже нашел и протестировал. Оба способа работают. Есть еще гарантированный 3-й способ, но для него не нашел еще спецсофт.

На текущий момент в этой теме я учусь и набираюсь опыта

Добавлено спустя 57 минут
Мастер Medsft. Дайте хотя бы еще недели 2-2,5 на решение заданных Вами задач. Если по истечении этого срока (до 28 июля включительно) решения не будут найдены, то признаюсь, что данная задача не по зубам и тему можно будет закрывать. Согласны?




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

Создано: 11 июля 2019 19:47
· Личное сообщение · #9

Medsft

> Я в этой теме просил Вас высказать гипотезы что не так в методе. Ответа нет ни от кого

Я ответил выше, что делать.

Есть чудесный вариант, он покрывает все задачи, универсальное решение - описываешь задачу и выдаётся решение --> Link <--

-----
vx




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

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

difexacaw пишет:
Есть чудесный вариант...

вариант известный, но сама тема создавалась с другой целью:

rukop84 пишет:
Задача:
- найти и обучиться способу...





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

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

rukop84

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

-----
vx


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

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

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

difexacaw, обучаюсь. Другое дело, что не сразу все доходит

Добавлено спустя 10 минут
difexacaw пишет:
символы смотрел

да-да-да!!!, WriteProcessMemory - это именно оно

Добавлено спустя 1 час 13 минут
Medsft пишет:
что не так в методе

а вот и ответ:
вызов функции WriteProcessMemory происходит из кусков склеенных констант (видать, чтобы ее не засекли)

Ай, да difexacaw! Ай, да молодец!



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

Создано: 11 июля 2019 22:28
· Личное сообщение · #13

Ну приведите метод к читаемому то))

Добавлено спустя 5 минут
А потом rukop запустит свой новый инструмент с заменой по маске)))

Добавлено спустя 6 минут
30 и 32 убирает пробелы в конце, 34 склеивает две строки



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

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

Medsft пишет:
Ну приведите метод к читаемому то))

call string System.String::WriteProcessMemory



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

Создано: 12 июля 2019 07:28
· Личное сообщение · #15

Ты сам то понял что написал?))) так апи не вызвать




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

Создано: 12 июля 2019 09:37 · Поправил: Adler
· Личное сообщение · #16

rukop84 пишет:
call string System.String::WriteProcessMemory

А не смущает, что в классе System.String нет функции WriteProcessMemory, т.к. это системная WinAPI из kernel32.dll которую еще надо импортировать:
Code:
  1. [DllImport("kernel32.dll", SetLastError = true)]
  2.   public static extern bool WriteProcessMemory(
  3.   IntPtr hProcess, 
  4.   IntPtr lpBaseAddress,
  5.   byte[] lpBuffer, 
  6.   Int32 nSize, 
  7.   out IntPtr lpNumberOfBytesWritten);


А в IL это должно выглядеть как-то так:
Code:
  1. .method public hidebysig static pinvokeimpl("kernel32.dll" lasterr winapi) 
  2.                  bool WriteProcessMemory (
  3.                         native int hProcess,
  4.                         native int lpBaseAddress,
  5.                         uint8[] lpBuffer,
  6.                         int32 nSize,
  7.                         [out] native int& lpNumberOfBytesWritten
  8.                  ) cil managed preservesig 
  9.          {
  10.          }

И вызываться примерно так:
Code:
  1. call      bool <класс в котором объявлена WriteProcessMemory>::WriteProcessMemory(native int, native int, uint8[], int32, native int&)


P.S.
Code:
  1. private static int f6sg(IntPtr \u0020, IntPtr \u0020, [In] [Out] byte[] \u0020, uint \u0020, out IntPtr \u0020)
Code:
  1. callvirt  instance int32 Qvp.lvl/ovN::Invoke(native int, native int, uint8[], uint32, native int&)
Code:
  1. private delegate int ovN(IntPtr hProcess, IntPtr lpBaseAddress, [In] [Out] byte[] buffer, uint size, out IntPtr lpNumberOfBytesWritten);

Прямо дежавю какое то...

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

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

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

Adler пишет:
Прямо дежавю какое то...
вово вызовов основных не нашел)))))))) туфта?

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




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

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

Medsft

> Короче фигня эта защита, ломанулась на ура

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

rukop84

> Ай, да difexacaw! Ай, да молодец!



-----
vx





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

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

difexacaw пишет:
защита уровня вм

Я уже писал ранее - отойди от дотнета, нехер тебе в нём делать..



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

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

Adler, у Вас получилось собрать обратно функцию WriteProcessMemory из кусков кода?

Я уже часов 6 ее собираю, не могу собрать:
- название библиотеки kernel32.dll есть
- название самой функции WriteProcessMemory есть
- передача параметров функции и вызов самой функции через делегат тоже есть
- а вот как извлечь из кусков кода данные импорта не догоняю

расписал скрин: --> Link <--

Если справились с задачей, то просьба сделать скрин уже отредактированного метода f6sg, включая измененные байты. Хоть поучусь как надо делать




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

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

rukop84 пишет:
у Вас получилось собрать обратно функцию WriteProcessMemory из кусков кода?

Даже не пытался, а зачем? Что вы от этой функции хотите?




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

Создано: 13 июля 2019 01:20 · Поправил: sefkrd
· Личное сообщение · #22

rukop84 пишет:
то просьба сделать скрин уже отредактированного метода f6sg

rukop84 пишет:
(до 28 июля включительно)

бля..
Снова напишу - учи этот ЯП..
Что он может, чего не..
Походу, будет как в школе - к нику добавят "zo"..



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

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

sefkrd, если проанализировать ваши сообщения на форуме, то выяснится, что помощи и дельных советов от вас НОЛЬ ЦЕЛЫХ, НОЛЬ ДЕСЯТЫХ. А ранг как пользователя у вас растет за счет подобных сообщений, в которых только троль, да насмешки...

Adler пишет:
Даже не пытался, а зачем? Что вы от этой функции хотите?

хм..., может я опять не въехал в постановку задачи от Мастера Medsft'a:

1)Medsft пишет:
И что нужно поправить чтоб понять откуда ноги

2) Medsft пишет:
Ну приведите метод к читаемому то))


Вот я и пытаюсь выполнить эти задачи

Понимаю это так:
- вызов функции winapi WriteProcessMemory разорван по кускам кода. И получается, чтобы привести метод к читаемому нужно его собрать обратно




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

Создано: 13 июля 2019 12:13 · Поправил: Adler
· Личное сообщение · #24

rukop84 пишет:
- вызов функции winapi WriteProcessMemory разорван по кускам кода. И получается, чтобы привести метод к читаемому нужно его собрать обратно

В моем представлении, надо в том же классе просто сделать объявление функции (второй пример кода из #16 сообщения) и просто напрямую из f6sg использовать WriteProcessMemory (третий пример кода из #16). Только типы переменных указать правильно.
Это мое предположение, проверять которое нет ни времени, ни желания.

P.S. В чем сакральный смысл данной функции я не знаю и что имел ввиду Medsft акцентируя внимание на данной функции я не знаю, т.к. вообще не разбирался, что там и для чего...

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

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

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

rukop все банальней, эти методы мусор оставшийся хер знает от чего. Моё мнение. Невозможно не используя джит каким либо образом их исполнить.

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


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

Создано: 13 июля 2019 22:52
· Личное сообщение · #26

sefkrd

> Я уже писал ранее - отойди от дотнета, нехер тебе в нём делать..

Я отлично знаю как это работает, так как я это крутил и отлаживал для данной задачи --> Link <--

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

> собрать обратно WriteProcessMemory

А что это значит, не понимаю. В моём понимании сборка процедуры - это её описание конструктором(граф) и последующий билд в маш код. Проще говоря обычный викс морф какого то кода. Зачем это в данной теме ?

-----
vx




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

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

difexacaw пишет:
Я отлично знаю как это работает, так как я это крутил и отлаживал для данной задачи --> Link <--

Круто!!!

дак вот значит чей мы ребус решаем?!

Добавлено спустя 11 минут
Мастер Medsft! Я кажется знаю ответ на задачу:
Medsft пишет:
чтоб понять откуда ноги





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

Создано: 18 июля 2019 20:06
· Личное сообщение · #28

rukop84

Напиши вопрос, когда сможешь сформулировать свою задачу, ну что бы не гадать, анализируй".

-----
vx




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

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

Все сделано, все задачи выполнены, цель создания темы достигнута. Через 2-3 дня Тему закрою.

Adler, большое Спасибо за помощь и за то, что принимали активное участие в Теме
И еще поправлюсь в своем сообщении по поводу дедотов:
- у Вас по ссылке и у меня по ссылке - это разные дедоты (но оба свежие). Не знаю почему я принял их за одно и тоже

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

Мастер, Medsft, Вы как всегда на высоте. Спасибо, что даете развитие и помогаете новичкам. Благодаря Вам и Вашему наставничеству задачи выполняются, а тема приобретает завершенный вид

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

- если ключевое слово в методах, то это должно быть отражено в байт коде. А раз так, то почему не подойдет какой-нибудь hex-редактор с notepad++ для замены байт кода?
- сам поиск по байт-коду нужно проводить, ведь также?



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

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

rukop84 пишет:
то почему не подойдет какой-нибудь hex-редактор
- ))) мы ж взрослые люди ))) и понимаем что если последовательность байт которую мы хотим изменить встречается более 1 раза МОЖЕТ располагаться не только в телах методов а и в любом другом месте.Поэтому алгоритм один: читать сборку вычислять offset методов их длину и потом там уже искать последовательность.
Поскольку ты хотябы заинтересовался программированием))) сделаю тебе за это подарок, когда то сделал контрол для работы с маской: в нем реализовано несколько методов ... нокоторые пригодны для для просто байт арреев, чтото для NET, отдам даже сырки чтобы ты понял что он умеет

https://github.com/Medsft2019/HexMaskEditorControl


rukop84 пишет:
Все сделано, все задачи выполнены
молодец

Добавлено спустя 59 минут
difexacaw пишет:
В моём понимании сборка процедуры
запутан код в методе который вызывает или не вызывает апи.Так как он выглядит сейчас нельзя вызвать эту апи

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