Добрый час.
Меня интересует как ломают .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).
Можно ли как то подслушать что там ходит?
Что вообще можно сделать?
Какие инструменты, тулы и гайды посоветуете?
Здравствуйте, nen777w, Вы писали: N>Что вообще можно сделать? N>Какие инструменты, тулы и гайды посоветуете?
можно просто пропатчить license.dll, что бы нужный метод возвращал правильные данные, dnSpy такое умеет
простого способа может не быть т.к в разных частях программы может быть проверка целостности важных dll для защиты от взлома и нужно все это искать и отключать...
Здравствуйте, alexander_r, Вы писали:
_>Здравствуйте, nen777w, Вы писали: N>>Что вообще можно сделать? N>>Какие инструменты, тулы и гайды посоветуете?
_>можно просто пропатчить license.dll, что бы нужный метод возвращал правильные данные, dnSpy такое умеет _>простого способа может не быть т.к в разных частях программы может быть проверка целостности важных dll для защиты от взлома и нужно все это искать и отключать...
Так не получается.
Выбираю из контекстного менб Edit Class C#
// Token: 0x0600008C RID: 140 RVA: 0x00004A20 File Offset: 0x00002E20public bool IsValid(string p_LicenseKey, string p_LicenseNumber, string p_EquipmentNumber, int p_ApplicationVersion)
{
return true; <-- сюда вписываю ЭТО. Тело было пустое почему то.
}
// Token: 0x0600008D RID: 141 RVA: 0x00004C00 File Offset: 0x00003000private 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)
....
И не получается скомпилировать из за обфуцированных имен в этом же классе.
Или я не то делаю?
Здравствуйте, 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
После сохранения сборка все еще не рабочая — приложение не запускается.
Что можно сделать?
Здравствуйте, nen777w, Вы писали: N>И не получается скомпилировать из за обфуцированных имен в этом же классе. N>Или я не то делаю?
а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot
Здравствуйте, alexander_r, Вы писали:
_>Здравствуйте, nen777w, Вы писали: N>>И не получается скомпилировать из за обфуцированных имен в этом же классе. N>>Или я не то делаю? _>а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot
Пробовал. Собирал de4dot из последних сырков, но он не детектит обфускатор.
Здравствуйте, nen777w, Вы писали:
N>Здравствуйте, alexander_r, Вы писали:
_>>Здравствуйте, nen777w, Вы писали: N>>>И не получается скомпилировать из за обфуцированных имен в этом же классе. N>>>Или я не то делаю? _>>а деобфусцировать не пробовали? т.е можно убрать юникодные символы с помощью https://github.com/de4dot/de4dot
N>Пробовал. Собирал de4dot из последних сырков, но он не детектит обфускатор.
force mode и вручную создать правило для деобфускации пробовали??
Действительо получилось сдампить и даже dnSpy стал показывать исходный код!! Хотя он все еще обфусцирован.
Сдампленое приложение не запускается.
— Взял dnSpy и пересохранил License.dll подложил обратно к приложение и оно запустилось!!!
— Опять взял dnSpy и в License.dll — метод IsValid сделал return true. Не помогло видимо надо еще ковыряться.
Еще не пробовал, но получается что можно сделать 2 вещи:
1) Пересохранить каждый модуль и попробовать запустить сдампленое приложение.
2) Как то (пробовал de4dot пока не помогло) деобфусцировать все модули.
Сделать проекты, и собрать приложение, как говорится с 0-я из исходного кода.
Update: Взломал.
В связи с чем вопрос.
Существует ли хоть какой то способ защитить .Net приложение?
ExtremeDumper + dnSpy это по сути как HexRays для IDA.
N>>Update: Взломал. N>>Существует ли хоть какой то способ защитить .Net приложение? R>[quote]либо крестик снимите либо трусы наденьте[/quote]
Вы так говорите будто бы уверены, что я буду что-то распространять.
Софт без железки которая стоит овердофига долларов бесполезен.
Проблема была только в хитропопом менеджменте — "У нас новый софт а у вас старая железяка
за овердохрена долларов и поэтому Вы теперь не получите новый функционал. Идите и купите новую железяку."
А как оказалось старое железо еще вполне себе рабочее.
Спросил я потому что я до этого не ломал .Net приложения и потребовалось на это на так много время, как оказалось, с подсказками разумеется от знающих товарищей.
Потому и спросил. Т.к. сам в свое время разрабатывал защиту для своего нативного приложения.
я прекрасно помню как вы бегали по всему интернету
rsdn
cracklab
dou
...
с вопросами о своей защите
и было феерично увидеть пост о том как вам надо теперь взломать, а то производитель аяяй какой плохой
я ожидал что где то вы прилепите и вопрос о защите в этой теме
и запасся попкорном
наконец то бинго
R>я прекрасно помню как вы бегали по всему интернету R>rsdn R>cracklab R>dou R>... R>с вопросами о своей защите R>и было феерично увидеть пост о том как вам надо теперь взломать, а то производитель аяяй какой плохой R>я ожидал что где то вы прилепите и вопрос о защите в этой теме R>и запасся попкорном R>наконец то бинго
Ну да. Процесс то итерационный. Ломаешь и учишься. Не вижу ничего плохого в том что бы поинтересоваться тем, как нужно правильно защищать .Net приложения.
Самому пока не нужно, но мало ли понадобится решить такую задачу.
з.ы.
Железяка если что стоит чуть более 8000$.
Как то не кузяво (как мне кажется) довольно известной конторе, которая очень хорошо зарабатывает на оптике
, просить еще 8k за новую железку, только потому что они решили ограничить старое железо в софте.
Здравствуйте, nen777w, Вы писали: N>Разве что писать виртуальную машину... ?
Поднимаете ваше приложение в облаке, наружу торчит только API и UI. Доступа к исходникам и бинарям никому не даёте.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, nen777w, Вы писали:
N>Update: Взломал. N>В связи с чем вопрос. N>Существует ли хоть какой то способ защитить .Net приложение? N>ExtremeDumper + dnSpy это по сути как HexRays для IDA.
N>Разве что писать виртуальную машину... ?
.Net Native без рефлекшина.
и солнце б утром не вставало, когда бы не было меня