Как взламывают .Net приложения?
От: nen777w  
Дата: 03.11.21 16:46
Оценка:
Добрый час.
Меня интересует как ломают .Net приложения.

Есть одно приложение от одной очень известной фирмы-производителя оптики.
Которое не хочет работать со "старым" оборудованием.
Хотя функционально они ничем не отличаются (старое оборудование от нового).

При подключении старого оборудования какое то время все работает и потом через время приложение ругается на то что оно (оборудование) не лицензионное.

Есть .Net собрка, предположительно написана на C# назовем ее license.dll в которой как мне кажется происходит вся "магия" проверки серийного номера оборудования.

В этой dll по сути два класса CKeyLicense с интересным методом isValid и DES в котором имплементирован как я предполагаю из название одноименноый алгоритм.
Проблема в том что весь код обфусцирован.

Все что можно подсмотреть я подсмотрел через dnSpy и dotPeek.

Что я уже делал: — побыстренькому набросал свою сборку с классом CKeyLicense в котором реализовал не обфусцированные методы. И подменил оригинальную dll своей.
Приложение стартует и даже работает. Но при подключении оборудования падает. Наверно потому что не все методы реализованы.

Вопрос 1: Можно ли как то деобфусцировать все прилоэение целиком и при этом сохранить его работоспособоность, так что бы поковырять/поправить его код.
Вопрос 2: Можно ли частично переписать/переопределить метод у класс у офусцированной dll
Вопрос 3: Приложение работает c оборудование через COM порт. Для этого оно утсанавливает драйвер com0com (http://vse-draivera.net/manufacturers/vyacheslav+frolov/others.html).
Можно ли как то подслушать что там ходит?

Что вообще можно сделать?
Какие инструменты, тулы и гайды посоветуете?
Re: Как взламывают .Net приложения?
От: alexander_r  
Дата: 03.11.21 17:19
Оценка:
Здравствуйте, nen777w, Вы писали:
N>Что вообще можно сделать?
N>Какие инструменты, тулы и гайды посоветуете?

можно просто пропатчить license.dll, что бы нужный метод возвращал правильные данные, dnSpy такое умеет
простого способа может не быть т.к в разных частях программы может быть проверка целостности важных dll для защиты от взлома и нужно все это искать и отключать...
Re[2]: Как взламывают .Net приложения?
От: nen777w  
Дата: 03.11.21 20:25
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>Здравствуйте, nen777w, Вы писали:

N>>Что вообще можно сделать?
N>>Какие инструменты, тулы и гайды посоветуете?

_>можно просто пропатчить license.dll, что бы нужный метод возвращал правильные данные, dnSpy такое умеет

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

Так не получается.
Выбираю из контекстного менб Edit Class C#
// Token: 0x0600008C RID: 140 RVA: 0x00004A20 File Offset: 0x00002E20
public bool IsValid(string p_LicenseKey, string p_LicenseNumber, string p_EquipmentNumber, int p_ApplicationVersion)
{ 
   return true; <-- сюда вписываю ЭТО. Тело было пустое почему то.
}

// Token: 0x0600008D RID: 141 RVA: 0x00004C00 File Offset: 0x00003000
private bool \u202C\u202D\u200F\u202C\u202E\u200F\u200D\u206F\u202A\u202A\u206E\u206B\u206B\u200E\u200D\u206C\u202C\u206E\u202E\u206B\u200C\u206F\u206F\u202E\u206F\u202A\u200B\u206F\u200D\u200D\u202E\u206F\u200F\u206A\u206D\u200B\u206D\u200F\u200E\u206C\u202E(byte[], byte[])
{
            /*
An exception occurred when decompiling this method (0600008D)
....


И не получается скомпилировать из за обфуцированных имен в этом же классе.
Или я не то делаю?
Re[2]: Как взламывают .Net приложения?
От: nen777w  
Дата: 05.11.21 08:40
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>Здравствуйте, nen777w, Вы писали:

N>>Что вообще можно сделать?
N>>Какие инструменты, тулы и гайды посоветуете?

_>можно просто пропатчить license.dll, что бы нужный метод возвращал правильные данные, dnSpy такое умеет

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

Что еще пробовал:
Взял dnSpy, взял исходную сборку.
Метод IsValid -> Edit Method Body
Добавил такой код:
0 0000 ldc.i4.1
1 0001 ret
Что есть return true;

При сохранении модуля установил
Keep Old MaxStack Value
Preserve Extra Signature Data

Но вижу такие предупреждения:

Instruction operand is null
Instruction is null
Operand is not a local/arg

После сохранения сборка все еще не рабочая — приложение не запускается.
Что можно сделать?
Re[3]: Как взламывают .Net приложения?
От: alexander_r  
Дата: 05.11.21 10:05
Оценка:
Здравствуйте, nen777w, Вы писали:
N>И не получается скомпилировать из за обфуцированных имен в этом же классе.
N>Или я не то делаю?
а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot
Re[4]: Как взламывают .Net приложения?
От: nen777w  
Дата: 05.11.21 14:05
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>Здравствуйте, nen777w, Вы писали:

N>>И не получается скомпилировать из за обфуцированных имен в этом же классе.
N>>Или я не то делаю?
_>а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot

Пробовал. Собирал de4dot из последних сырков, но он не детектит обфускатор.
Re[5]: Как взламывают .Net приложения?
От: alexander_r  
Дата: 05.11.21 16:53
Оценка:
Здравствуйте, nen777w, Вы писали:

N>Здравствуйте, alexander_r, Вы писали:


_>>Здравствуйте, nen777w, Вы писали:

N>>>И не получается скомпилировать из за обфуцированных имен в этом же классе.
N>>>Или я не то делаю?
_>>а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot

N>Пробовал. Собирал de4dot из последних сырков, но он не детектит обфускатор.


force mode и вручную создать правило для деобфускации пробовали??

https://github.com/de4dot/de4dot#forcing-detection-of-a-certain-obfuscator
Re[6]: Как взламывают .Net приложения?
От: nen777w  
Дата: 08.11.21 11:31
Оценка:
_>force mode и вручную создать правило для деобфускации пробовали??
_>https://github.com/de4dot/de4dot#forcing-detection-of-a-certain-obfuscator

Вот что пробовал:

Попробовал ExtremeDumper из статьи: https://xakep.ru/2021/03/04/dotnet-reversing/

Действительо получилось сдампить и даже dnSpy стал показывать исходный код!! Хотя он все еще обфусцирован.
Сдампленое приложение не запускается.

— Взял dnSpy и пересохранил License.dll подложил обратно к приложение и оно запустилось!!!
— Опять взял dnSpy и в License.dll — метод IsValid сделал return true. Не помогло видимо надо еще ковыряться.

Еще не пробовал, но получается что можно сделать 2 вещи:
1) Пересохранить каждый модуль и попробовать запустить сдампленое приложение.
2) Как то (пробовал de4dot пока не помогло) деобфусцировать все модули.
Сделать проекты, и собрать приложение, как говорится с 0-я из исходного кода.

В верном ли я направлении движусь?
Re[7]: Как взламывают .Net приложения?
От: nen777w  
Дата: 08.11.21 13:16
Оценка:
Update: Взломал.
В связи с чем вопрос.
Существует ли хоть какой то способ защитить .Net приложение?
ExtremeDumper + dnSpy это по сути как HexRays для IDA.

Разве что писать виртуальную машину... ?
Отредактировано 08.11.2021 13:16 nen777w . Предыдущая версия .
Re[8]: Как взламывают .Net приложения?
От: reversecode google
Дата: 08.11.21 13:19
Оценка: +1 :)
N>Update: Взломал.
N>Существует ли хоть какой то способ защитить .Net приложение?

[quote]либо крестик снимите либо трусы наденьте[/quote]
Re[9]: Как взламывают .Net приложения?
От: ӍїϛϮϠǷiя-ȺҜ Россия  
Дата: 08.11.21 13:39
Оценка:
Здравствуйте, reversecode, Вы писали:
R>[quote]либо крестик снимите либо трусы наденьте[/quote]

теперь наконец понял глубокий смысл данного выражения — православным хакерам не место среди нудистов-копирастов
Re[9]: Как взламывают .Net приложения?
От: nen777w  
Дата: 08.11.21 13:58
Оценка: +1
N>>Update: Взломал.
N>>Существует ли хоть какой то способ защитить .Net приложение?
R>[quote]либо крестик снимите либо трусы наденьте[/quote]

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

Спросил я потому что я до этого не ломал .Net приложения и потребовалось на это на так много время, как оказалось, с подсказками разумеется от знающих товарищей.
Потому и спросил. Т.к. сам в свое время разрабатывал защиту для своего нативного приложения.
Отредактировано 08.11.2021 14:00 nen777w . Предыдущая версия .
Re[10]: Как взламывают .Net приложения?
От: reversecode google
Дата: 08.11.21 15:00
Оценка:
я прекрасно помню как вы бегали по всему интернету
rsdn
cracklab
dou
...
с вопросами о своей защите
и было феерично увидеть пост о том как вам надо теперь взломать, а то производитель аяяй какой плохой
я ожидал что где то вы прилепите и вопрос о защите в этой теме
и запасся попкорном
наконец то бинго
Re[11]: Как взламывают .Net приложения?
От: nen777w  
Дата: 08.11.21 16:15
Оценка:
R>я прекрасно помню как вы бегали по всему интернету
R>rsdn
R>cracklab
R>dou
R>...
R>с вопросами о своей защите
R>и было феерично увидеть пост о том как вам надо теперь взломать, а то производитель аяяй какой плохой
R>я ожидал что где то вы прилепите и вопрос о защите в этой теме
R>и запасся попкорном
R>наконец то бинго

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

з.ы.
Железяка если что стоит чуть более 8000$.
Как то не кузяво (как мне кажется) довольно известной конторе, которая очень хорошо зарабатывает на оптике
, просить еще 8k за новую железку, только потому что они решили ограничить старое железо в софте.
Re[8]: Как взламывают .Net приложения?
От: Sinclair Россия https://github.com/evilguest/
Дата: 17.02.22 12:24
Оценка:
Здравствуйте, nen777w, Вы писали:
N>Разве что писать виртуальную машину... ?
Поднимаете ваше приложение в облаке, наружу торчит только API и UI. Доступа к исходникам и бинарям никому не даёте.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Как взламывают .Net приложения?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.02.22 15:03
Оценка: +1
Здравствуйте, nen777w, Вы писали:

N>Update: Взломал.

N>В связи с чем вопрос.
N>Существует ли хоть какой то способ защитить .Net приложение?
N>ExtremeDumper + dnSpy это по сути как HexRays для IDA.

N>Разве что писать виртуальную машину... ?

.Net Native без рефлекшина.
и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.