| Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez-, testrev1337 (+3 невидимых) |
| eXeL@B —› Крэки, обсуждения —› Взлом программы написанной на .NET с зашифрованными с помощью SHA строками |
| Посл.ответ | Сообщение |
|
|
Создано: 08 апреля 2011 03:19 · Поправил: fl4r3 · Личное сообщение · #1 Здравствуйте. Вторая тема которую я создаю здесь за 2 года, но я опять не справляюсь (если кому то интересно, то предыдущая тема здесь:). Есть весьма узкоспециализированный софт. Ломаю лично для себя. Программа весьма объемная. Строки внутри хешированы SHA. Декомпилятор .NET выдает исходный код без проблем (кроме хешированных строк, конечно). Кросс референсы не бьются. Всего существует несколько различных лицензий для этой программы, каждой из версий присваивается значение const int: 1) datalogger = -1 2) Developer = 4 3) Free = 0 4) Pro_Demon = 1 5) Pro_Ostrich = 2 6) Tuner = 3 Все это хранится в eCtune.Data->eCtuneVersions. В меню программы есть Help->Registration. Есть привязка к Machine ID. Но я думаю можно обойтись и без написания кейгена, а просто поправить проверку версии при старте, хотя конечно это помогло бы получать новые обновления для этой программы. Надо найти где при запуске программы проверяется версия и поправить код. Под отладчиком отказывается работать. Цель: заполучить версию Tuner. Пожалуйста, тыкните носом, куда копать. Заранее благодарен. Сам софт можно скачать по ссылке: ![]() |
|
|
Создано: 08 апреля 2011 05:22 · Личное сообщение · #2 |
|
|
Создано: 08 апреля 2011 07:35 · Поправил: fl4r3 · Личное сообщение · #3 |
|
|
Создано: 08 апреля 2011 09:28 · Личное сообщение · #4 Строки с помощью SAE деобфусцируются как раз без проблем. Основная проблема, как по мне, потом переподписать или убрать подпись файла строгим именем, чтобы запустить поправленый .ехе. Еще поубирать все ловушки типа - Code:
![]() |
|
|
Создано: 08 апреля 2011 10:39 · Поправил: fl4r3 · Личное сообщение · #5 uncleua За SAE спасибо, правда у меня не получилось получить читабельные строки все равно, видимо я что то делаю не так, никогда не пользовался SAE. При попытке деобфусцировать получаю: "Could not load file or assembly 'eCtune, Version=0.0.2.3, Culture=neutral, PublicKeyToken=6ab39c1170c85a55' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A)" Кстати, чем был получен приведенный выше код? ![]() |
|
|
Создано: 08 апреля 2011 10:43 · Личное сообщение · #6 |
|
|
Создано: 08 апреля 2011 10:51 · Личное сообщение · #7 |
|
|
Создано: 08 апреля 2011 10:58 · Личное сообщение · #8 Не знаю, получаю ошибку (если только не выбрать вариант в опциях Flow without boolean function, который не дает никакого эффекта в деобусцировании строк): Could not load file or assembly 'eCtune, Version=0.0.2.3, Culture=neutral, PublicKeyToken=6ab39c1170c85a55' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A) at System.Reflection.Assembly.nLoadFile(String path, Evidence evidence) at System.Reflection.Assembly.LoadFile(String path) at SimpleAssemblyExplorer.AssemblyUtils.LoadAssemblyFile(String assemblyFile) at SimpleAssemblyExplorer.Deobfuscator.DeobfBoolFunction(String assemblyFile, MethodDefinition searchInMethod) at SimpleAssemblyExplorer.Deobfuscator.DeobfFlow(String file, MethodDefinition method) at SimpleAssemblyExplorer.Deobfuscator.HandleConstructor(TypeDefinition type, String file) at SimpleAssemblyExplorer.Deobfuscator.HandleType(TypeDefinition type, String file) at SimpleAssemblyExplorer.Deobfuscator.Deobf(AssemblyDefinition assemblyDef, String file) at SimpleAssemblyExplorer.Deobfuscator.Go() at SimpleAssemblyExplorer.frmDeobf.btnOK_Click(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) Strong name validation failed. (Exception from HRESULT: 0x8013141A) ![]() |
|
|
Создано: 08 апреля 2011 11:21 · Поправил: PE_Kill · Личное сообщение · #9 fl4r3 тебе же написали uncleua пишет: Основная проблема, как по мне, потом переподписать или убрать подпись файла строгим именем, чтобы запустить поправленый .ехе. Как думаешь что означает строчка?: fl4r3 пишет: Strong name validation failed. PS Походу SAE пытается что то изменить в сборке при деобфускации. ----- Yann Tiersen best and do not fuck ![]() |
|
|
Создано: 08 апреля 2011 11:31 · Поправил: fl4r3 · Личное сообщение · #10 |
|
|
Создано: 08 апреля 2011 23:04 · Личное сообщение · #11 uncleua пишет: Основная проблема, как по мне, потом переподписать или убрать подпись файла строгим именем, чтобы запустить поправленый .ехе. Вот в этом не вижу проблемы. Можно анализировать деобфусцированный файл, а править исходный. Найти те куски из деобфусцированного файла в исходном не составляет труда. Ищем просто по последовательности HEX значений. ![]() |
|
|
Создано: 09 апреля 2011 00:08 · Личное сообщение · #12 |
|
|
Создано: 09 апреля 2011 07:48 · Поправил: fl4r3 · Личное сообщение · #13 |
|
|
Создано: 09 апреля 2011 15:38 · Личное сообщение · #14 |
|
|
Создано: 09 апреля 2011 19:17 · Личное сообщение · #15 Как я уже писал, я ломаю для себя. Поэтому, то что он не запуститься где то еще, это абсолютно не критично. А вообще конечно можно написать кейген и это решит все проблемы. Правда программа при старте думает, что она PRO_Demon лицензия и не дает даже возможности вводить Serial ID, который генерируется на основе Machine ID и включает в себя и ваше имя и название компании и т.д. ![]() |
|
|
Создано: 10 апреля 2011 07:28 · Поправил: fl4r3 · Личное сообщение · #16 Вообще, в принципе, единственное отличие версии от версии это активизация определнных меню. Сейчас они установлены в Enabled = false. При создании новой прошивки меню File->Save as Binary недоступно. Осталось локализовать участок кода отвечающий за проверку и установку этого меню в .Enabled = true. Насколько я понимаю мне надо искать коллекцию типа MenuItemCollection в коде? ![]() |
|
|
Создано: 10 апреля 2011 08:22 · Поправил: fl4r3 · Личное сообщение · #17 Собственно вот интересный кусок кода: Code:
Строку h0nd@eC7un€ они используют как пароль, 473470 как соль, 2 - количество итераций. Строка h0nd@eC7un€ видимо по их мнению выглядит как завуалированное название программы ![]() Сам алгоритм шифрования: Code:
и дешифрования: Code:
Несовпадения отлавливают эксепшеном по Out Of Bounds. В директории %systemroot%\system32\ лежат два файла: TMSetp.dbf и TMSetp2.dbf Содержимое TMSetp.dbf = ј7ѓfЗ”у™РE‘°ПЇЙНЭUі и меняется при каждом запуске. TMSetp2.dbf - пустой. ![]() |
|
|
Создано: 10 апреля 2011 09:05 · Поправил: fl4r3 · Личное сообщение · #18 Формат файла license.xml: Code:
Насколько я понял потом из этого файла создается файл lic.xml. Как видно часть полей хешируется SHA1, а именно: LicID LicType LicExpDate LicPayType Похоже скоро можно будет писать генератор лицензий. Буду рад любой помощи. Пока не совсем понимаю где используется Machine ID. Есть подозрение что это LicKey. Апдейт: Попробовал создать файл license.xml по описаному выше шаблону найденному в коде. Получилось следующее: Code:
Теперь надо зашифровать функцией m0001c3 поля LicID, LicType, LicExpDate, LicPayType. Зашифрованный вид: Code:
Если подсунуть данную лицензию программе, то в %systemroot%\system32\ она создаст кроме TMSetp.dbf еще и непустой файл TMSetp2.dbf, но почти мгновенно его удалит и выйдет с ошибкой Contact eCtune(info@ectune.com) with MSGID 003H. Содержимое TMSetp.dbf: Code:
Содержимое TMSetp2.dbf: Code:
Хотя из данного кода: Code:
видно, что license.xml должен быть зашифрован, а его расшифрованный вариант будет храниться в lic.xml. | Сообщение посчитали полезным: Jim DiGriz |
|
|
Создано: 10 апреля 2011 09:17 · Личное сообщение · #19 |
|
|
Создано: 10 апреля 2011 12:04 · Поправил: fl4r3 · Личное сообщение · #20 Archer Приношу извинения за нарушение правил форума. Замечания приняты. Получается, что файл license.xml зашифрован целиком функцией m0001c3, а получившийся файл lic.xml содержит шифрованные с помощью той же функции значения LicId, LicType и т.д.? То есть насколько я понимаю логику разработчиков, они пошли данным путем, чтобы даже если пользователь во время запуска программы найдет файл lic.xml, то он увидит лишь криптованные строки. Вообщем, я написал криптор декриптор файла license.xml и lic.xml. Вот код: Code:
Если успеть словить файл TMSetp2.dbf и дешифровать его то получим следующее содержимое: Code:
то есть MachineID. Ребята, очень нужна ваша помощь, я стараюсь как могу, вроде все проясняется, но вот одно неизвестное поле ставит меня в тупик(LicKey, которое я принял равным MachineID, может быть ошибочно). А еще не понятно как на момент запуска программа определяет свой тип версии (Pro_Demon, Tuner, Developer и т.д.), потому что не похоже, что она берет это из файла лицензии. ![]() |
|
|
Создано: 10 апреля 2011 13:21 · Личное сообщение · #21 |
|
|
Создано: 10 апреля 2011 14:19 · Поправил: fl4r3 · Личное сообщение · #22 yanus0 Это то верно, но я не могу пока на 100% утверждать какой формат у XML файла license.xml. То есть сам криптор я написал и он работает, а что должно быть в самом файле еще до шифрования я могу только догадываться. В итоге постоянно вылетает эксепшн, который отлавливается программой, когда я пытаюсь своим криптованным файлом её кормить. Есть файл XML с обычными настройками. Подсмотрел там формат. Исправил свой файл примерно так: Code:
Закриптовал. Подсунул программе. Все равно ловит эксепшн вот этот: Code:
Сейчас буду пытаться поменять в коде на MessageBox.Show(exception.Message); чтобы понять, что же ей не нравиться. Основная проблема найти этот участок кода в exe файле. А еще я знаю, что пока что в этой теме есть только один человек который способен мне помочь. Это zeppe1in ![]() |
|
|
Создано: 10 апреля 2011 16:35 · Поправил: fl4r3 · Личное сообщение · #23 В предыдущее сообщение не влазило: Насколько я понимаю, из этого куска кода(возможно так не тривильно понять, но запустите его на исполнение с промежуточным выводом и все станет понятно) из LicID генерируется строка такого же формата как MachineID. То есть по сути LicID введенный криптуется и сверяется с MachineID: Code:
Теперь возникает вопрос как написать кейген для заданного MachineID. И всё же надо выяснить что такое LicKey в XML. ![]() |
|
|
Создано: 11 апреля 2011 04:54 · Поправил: fl4r3 · Личное сообщение · #24 Алгоритм вычисления строки формата MachineID из LicID с моими комметариями. Там есть еще неполное обратное преобразование и я не знаю где оно используется и зачем. Code:
| Сообщение посчитали полезным: bnufb |
| eXeL@B —› Крэки, обсуждения —› Взлом программы написанной на .NET с зашифрованными с помощью SHA строками |










Для печати