• XSS.stack #1 – первый литературный журнал от юзеров форума

Реверс странного .exe (компилятор Матлаб)

gliderexpert

CPU register
Забанен
Регистрация
17.02.2021
Сообщения
1 440
Решения
1
Реакции
2 336
Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет.
В "софтверном" взломе/реверсе не очень силен, не мой профиль. Подскажите - с чего подступиться к такой задаче?
Существует некий софт под винду, созданный для математической обработки радиосигнала. Лицензия стоит очень дорого.
Хочу прикрутить его к своей железке.
Принцип действия следующий - железка пишет лог, грубо говоря .csv файл, который потом загружается в софт и он его обрабатывает, рисует всякие красивые картинки и прочее. Этот функционал (загрузки данных с внешнего файла) есть в платной версии программы.
В бесплатной демоверсии - кнопочка "открыть файл" заблокирована, серого цвета. Но в этой же демоверсии существует несколько примеров сигналов, используя которые можно поиграться с программой. Примеры похоже что хранятся внутри exe файла.
Задача - либо разблокировать кнопку "открыть файл", либо подменить тестовые сигналы в демке на свои.
С чего начать анализ exe'шника? Похоже что он скомпилирован напрямую из матлаба.

Какой путь более перспективен - дизассемблировать exe и что-то в нем править, или патчить напрямую данные в озу в рантайме?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Демо версия (exe) отличается от лицензионной?
Как активация происходит? Тебе ключ дают какой-то и ты вводишь в софт или она стучится куда-то и проверяет по твоему условному hwidу?

Если проблема только в кнопке, то теоретически можешь попробовать внешним софтом её разлочить, например, при помощи EnableWindow (https://learn.microsoft.com/ru-ru/w...r/nf-winuser-enablewindow?redirectedfrom=MSDN)
https://github.com/westoncampbell/SpyPlusPlus в помощь для поиска окна кнопки.

Если проблема в лицензии, то ковыряй место, где происходит активация.
Может тебе даже и патчить ничего не придется, а просто нужно будет поднять локально серв и сделать записи в hosts.
 
Всем привет.
В "софтверном" взломе/реверсе не очень силен, не мой профиль. Подскажите - с чего подступиться к такой задаче?
Существует некий софт под винду, созданный для математической обработки радиосигнала. Лицензия стоит очень дорого.
Хочу прикрутить его к своей железке.
Принцип действия следующий - железка пишет лог, грубо говоря .csv файл, который потом загружается в софт и он его обрабатывает, рисует всякие красивые картинки и прочее. Этот функционал (загрузки данных с внешнего файла) есть в платной версии программы.
В бесплатной демоверсии - кнопочка "открыть файл" заблокирована, серого цвета. Но в этой же демоверсии существует несколько примеров сигналов, используя которые можно поиграться с программой. Примеры похоже что хранятся внутри exe файла.
Задача - либо разблокировать кнопку "открыть файл", либо подменить тестовые сигналы в демке на свои.
С чего начать анализ exe'шника? Похоже что он скомпилирован напрямую из матлаба.

Какой путь более перспективен - дизассемблировать exe и что-то в нем править, или патчить напрямую данные в озу в рантайме?
Если цель в работе проги, а не в наборе опыта, то не проще на ru-board'е запрос на бесплатный взлом Демки создать? - возможно в ней полный функционал доступен.
 
By any chance, if it's a MATLAB compiled program, they often bundle a MATLAB runtime plus .m files turned into bytecode or they embed partial func as C/C++. When you open these bins in a disassembler, you'll see lots of extraneous lib code. Something might be hidden behind such runtime calls.
 
возможно в ней полный функционал доступен.
Ключевое слово "Возможно" кнопка не активна, верно говоришь, кода может и не быть, если авторы опытные, тогда кода там не будет. Полный код всех функций, скорее всего будет в полной версии лицензии.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Демо версия (exe) отличается от лицензионной?
Как активация происходит? Тебе ключ дают какой-то и ты вводишь в софт или она стучится куда-то и проверяет по твоему условному hwidу?

Не известно. Доступна только демоверсия, выложенная на сайте разработчика. Платной версии нет, она порядка 6к долларов стоит.

Если проблема только в кнопке, то теоретически можешь попробовать внешним софтом её разлочить, например, при помощи EnableWindow (https://learn.microsoft.com/ru-ru/w...r/nf-winuser-enablewindow?redirectedfrom=MSDN)
https://github.com/westoncampbell/SpyPlusPlus в помощь для поиска окна кнопки.

Сейчас посмотрю, спасибо!

Если цель в работе проги, а не в наборе опыта, то не проще на ru-board'е запрос на бесплатный взлом Демки создать? - возможно в ней полный функционал доступен.

И прога нужна, и набор опыта, и интересно поковырять-посмотреть что за алгоритмы используются внутри. То что на руборде хакнут - маловероятно, софт узкоспециализированный.

Ключевое слово "Возможно" кнопка не активна, верно говоришь, кода может и не быть, если авторы опытные, тогда кода там не будет. Полный код всех функций, скорее всего будет в полной версии лицензии.
Пока не ясно. Не понимаю даже можно ли дизассемблировать матлабовский код, т.к. существуют упоминания в интернете что exeшник шифрован AESом, а закрылый ключ находится в matlab runtime либах которые вызываются при запуске экзешника. Т.е. ключ как-бы есть на локальном хосте, но как его извлечь из этих либ - хз.
 
Пока не ясно. Не понимаю даже можно ли дизассемблировать матлабовский код, т.к. существуют упоминания в интернете что exeшник шифрован AESом, а закрылый ключ находится в matlab runtime либах которые вызываются при запуске экзешника. Т.е. ключ как-бы есть на локальном хосте, но как его извлечь из этих либ - хз.
Я думаю идой можно попробовать, даже просто пока понять _есть ли код в неактивной кнопки или нет. Ну даже если ключ и достать, он может тоже сверху накрыт ещё чем-то.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Небольшое продвижение:
если принудительно прервать загрузку приложения (например заранее замедлив и выключив в нужный момент времени виртуальную машину с софтом) - в папке c:\program files\названиепроги\ создается папка mcr_cache_v78, в которой лежит куча файлов с расширением .m (матлаб), а так же .chm (хелп в открытом виде, можно посмотреть), картинки (тоже открытые).
m-файлы похоже что шифрованы AESом, вместо кода внутри мусор вида

V1MCC4000MEC1000MCR1000x ґЦЄЌњц 7,"ИПxCih•№¤сnБф_ЬЌyф">№#ЛvўSЂГЫ$ьлca "ђJLЫљ#є8ЖюJµNWOЦ«УceC"Xw6уд¶ъ;3bї VЛE¶ЏM·44њ\Z’lќ—ОФжTґSм!ћо€Ь{mњМuеЇEµ@™eх-ҐЫ|p%ґ@ыѓ[ ЙqЪ:qѓь¦r’ї_ќo,}Рr}"Єі юЁRЎ†`в©вЕ Юќ

Получается что при загрузке-старте программы матлабовский рантайм либ встроенным ключом расшифровывает эти файлы и подсовывает на вход интерпретатора - или я не правильно мыслю?

Так же в этой папке нашлись файлы с расширением .efd где находятся демонстрационные сигналы. Заголовок такой
MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Tue Jan 14 12:32:40 2025 IM °М xњl™ЊeЖ?bЎ
–ІРG=`Aю±а*
)RмммE
lґД•,±(†
‚ ):@)G)p…RЋRМт7gеПЃµяЪЩќ“ћHр Z‹bі"†‚Т

В теории нужно вместо них подсовывать свои данные. Пока не понятно шифрованы ли они чем-то.
 
Последнее редактирование:
Можешь еще API Monitor'ом глянуть какие win api вообще дергаются, какие файлы и где создаются, какие ключи реестра создаются\просматриваются, какие функции CryptoAPI вызываются, с какими параметрами и т.п.
 
Получается что при загрузке-старте программы матлабовский рантайм либ встроенным ключом расшифровывает эти файлы и подсовывает на вход интерпретатора - или я не правильно мыслю?
если программа не требует подключения к интернету, то есть не качает ключ с сервера разработчика, то правильно, и ключ лежит где-то в ехе файле.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
если программа не требует подключения к интернету, то есть не качает ключ с сервера разработчика, то правильно, и ключ лежит где-то в ехе файле.
Не требует, можно запускать на изолированной машине. Как думаешь - можно ли чем-то посмотреть дамп памяти виртуалки чтобы извлечь этот ключ, примерно как снимают шифрование со всяких трукрипт контейнеров?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не требует, можно запускать на изолированной машине. Как думаешь - можно ли чем-то посмотреть дамп памяти виртуалки чтобы извлечь этот ключ, примерно как снимают шифрование со всяких трукрипт контейнеров?
дамп виртуалки и volatility (https://github.com/volatilityfoundation/volatility)?
 
Всем привет.
В "софтверном" взломе/реверсе не очень силен, не мой профиль. Подскажите - с чего подступиться к такой задаче?
Существует некий софт под винду, созданный для математической обработки радиосигнала. Лицензия стоит очень дорого.
Хочу прикрутить его к своей железке.
Принцип действия следующий - железка пишет лог, грубо говоря .csv файл, который потом загружается в софт и он его обрабатывает, рисует всякие красивые картинки и прочее. Этот функционал (загрузки данных с внешнего файла) есть в платной версии программы.
В бесплатной демоверсии - кнопочка "открыть файл" заблокирована, серого цвета. Но в этой же демоверсии существует несколько примеров сигналов, используя которые можно поиграться с программой. Примеры похоже что хранятся внутри exe файла.
Задача - либо разблокировать кнопку "открыть файл", либо подменить тестовые сигналы в демке на свои.
С чего начать анализ exe'шника? Похоже что он скомпилирован напрямую из матлаба.

Какой путь более перспективен - дизассемблировать exe и что-то в нем править, или патчить напрямую данные в озу в рантайме?
для начала определить запакован файл или нет, если не упакован крякнуть ее будет на много проще чем пакованную, потом определить на каком языке написана программа для понимания какими инструментами в ней ковырять ... если хочешь сам крякнуть тогда курсы по реверсу. Для новичков рекомендую "Введение в крэкинг с нуля, используя OllyDbg" , думаю проще и лучше кого-нибудь попросить.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Не требует, можно запускать на изолированной машине. Как думаешь - можно ли чем-то посмотреть дамп памяти виртуалки чтобы извлечь этот ключ, примерно как снимают шифрование со всяких трукрипт контейнеров?
дамп виртуалки и volatility (https://github.com/volatilityfoundation/volatility)?
хотя не, херня. Как ты будешь искать ключ? Ты же не знаешь, есть ли у него заголовок, по которому можно было бы найти его.
Так что твоя задача выливается в поиск последовательности байт среди других последовательностей байт..
 
хотя не, херня. Как ты будешь искать ключ? Ты же не знаешь, есть ли у него заголовок, по которому можно было бы найти его.
Так что твоя задача выливается в поиск последовательности байт среди других последовательностей байт..
Ну, на поставленный вопрос ответ был дан верно , но не думаю что ему нужен именно этот метод, если ключ к примеру расшифровывается в памяти то реверсом сможет достать его
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
для начала определить запакован файл или нет, если не упакован крякнуть ее будет на много проще чем пакованную, потом определить на каком языке написана программа для понимания какими инструментами в ней ковырять ...

Матлаб. EXE собранный при помощи Matlab Compiler - при запуске распаковывает на диск в директорию своего кэша .m-файлы . Эти файлы содержат упрощенный код программы (там выкинуты комментарии, названия процедур и т.д.), который зашифрован AES'ом.
exeшник запускает выполнение некоего Matlab Runtime Lib, который расшифровывает налету aes и передает полученный код на исполнение в интерпретатор.

Еще находка с сайта матлаба
1. Only the MATLAB files in a deployed application are protected by encryption. However, the names of the MATLAB files are not obscured, neither is the directory structure of the application.
2. The binaries generated by the MATLAB Compiler (the library or executable wrapper code) contain very little of the intellectual property inherent in the application.
3. Any data shipped with a deployed application (MAT-files or other data files) is not secured by the MATLAB Compiler. You should expect that users can easily access the content in these files unless you encrypt them yourself.
есть шанс что тестовые данные не шифрованы и туда можно подставить свои.

Параллельно нашел интересный софт для деобфускации матлаб p-файла обратно в m-файл. Пока не проверял.
Вдруг кому интересно будет - https://github.com/niklas-timpe/ptom_c
 
Не требует, можно запускать на изолированной машине. Как думаешь - можно ли чем-то посмотреть дамп памяти виртуалки чтобы извлечь этот ключ, примерно как снимают шифрование со всяких трукрипт контейнеров?
я только сейчас заметил, что софт нормально работает в виртуалке.
это значит, что тебе сильно повезло - автор вообще не заморачивался с защитой софта, и, скорее всего, софт будет легко взломать. для начала попробуй загрузить его в дебаггер типа OllyDBG и ввести неправильный серийник в меню лицензии. теоретически, можно будет заменить команды JMP с кодом "вы ввели неправильный серийник" на NOP, чтобы проверка неправильного серийника выдала результат, как будто он правильный. вроде тут были статьи, как это делать.

по поводу ключа шифрования - если действительно используется AES, то есть шанс, что ключ можно будет найти в дампе оперативы с помощью aeskeyfind, findaes, или подобного софта из volatility framework.
 
Всем привет.
В "софтверном" взломе/реверсе не очень силен, не мой профиль. Подскажите - с чего подступиться к такой задаче?
Существует некий софт под винду, созданный для математической обработки радиосигнала. Лицензия стоит очень дорого.
Хочу прикрутить его к своей железке.
Принцип действия следующий - железка пишет лог, грубо говоря .csv файл, который потом загружается в софт и он его обрабатывает, рисует всякие красивые картинки и прочее. Этот функционал (загрузки данных с внешнего файла) есть в платной версии программы.
В бесплатной демоверсии - кнопочка "открыть файл" заблокирована, серого цвета. Но в этой же демоверсии существует несколько примеров сигналов, используя которые можно поиграться с программой. Примеры похоже что хранятся внутри exe файла.
Задача - либо разблокировать кнопку "открыть файл", либо подменить тестовые сигналы в демке на свои.
С чего начать анализ exe'шника? Похоже что он скомпилирован напрямую из матлаба.

Какой путь более перспективен - дизассемблировать exe и что-то в нем править, или патчить напрямую данные в озу в рантайме?
Есть ли доступ к лицензионной версии, но без ключа?
Прикрепил бы бинарник\ссылку хоть, чтобы поглядеть

Посмотри отправляет ли софт запросы
Посмотри вызовы апи в апи мониторе

А по поводу подмены тестовых данных - можешь поковырять папки софта, мб там гдето лежит - подменить да и дело с концом
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Решил запилить пост с расширенной информацией. Есть призрачная надежда, что тема перерастет в инструкцию по взлому приложений написанных на Матлабе.
К сожалению бюджета чтобы "обратиться к профессионалам" или купить готовый софт у меня нет, поэтому приходится разбираться.

Исходные данные.
Предмет интереса (софт который ломаю) - программа обработки данных с георадара Georadar-Expert .

grp1.PNG
grp6.PNG


Что это такое и зачем нужно. Длинное предисловие.
Краткая справка - георадар, это специальное устройство, которое излучает мощные электромагнитные импульсы и ими "просвечивает" землю. Грубо говоря, как медицинский "узи", ультразвук, только для строительства (и использует радиоволны а не УЗ-колебания). Прокатываешь антенны по интересующему участку - и видишь что находится под землей на глубине до 10...20 метров. Видны кабели, трупы, тоннели метро 2, ядерные бункеры и прочие остатки недоразвитой цивилизации ). Внешне георадар выглядит как тележка с антеннами. Ее надо катить вручную, при этом происходит запись отраженных сигналов.
radar2.jpg
166242982919324509.jpg

Георадар после измерения создает текстовый файл, где каждой точке измерения соответствует одномерный массив из 512 штук signed int-type чисел. т.е. в каждой точке собирается примерно вот такой график. Ось X - время прихода отражения, ось Y - интенсивность сигнала.
ascan.jpg

Подобные графики при движении антенны записываем с интервалом каждые 10 сантиметров.
Таким образом георадар формирует текстовый файл, состоящий из строк, где кол-во строк равно кол-ву измерений, а в каждой строке 512 штук signed INTов.
При визуализации этих данных получается B-scan. Каждый вертикальный слолбец - это один 512 символьный массив из того файла.
bscan.png
radar1.jpg

Собственно эта картинка и показывает что находится под землей. Вертикальный разрез вдоль линии по которой двигали антенну.
Вы тоже тут видите блондинку в красном железобетонную сваю? Нет? А она тут есть. Аномалия по оси дистанции x=7м. А на x=12м наблюдается металлическая труба или кабель.
Картинки не доступны для интерпретации "простыми смертными", поэтому существует спец. софт который облегчает их расшифровку, улучшает качество изображения и прочее. Его то мы и ломаем.


Как должна работать лицензионная программа.
Открываем .txt файл с исходными данными, полученными с антенны (см выше). Прога выполняет некую математическую магию, называемую BSEF , после чего создает файл в своем внутреннем формате с расширением .efd . В этом файле должны содержаться все исходные данные, плюс результаты математики-расчета BSEF (предварительная догадка что это должен быть двухмерный массив размерностью такой же, как массив входных данных).
Далее полученный efd файл загружаем в программу, и строим красивые картинки-визуализацию, используя BSEF данные. Картинки потом можно экспортировать в виде графических файлов, отдельно - сохранить параметры визуализации, настройки в файл .geprm

ДЕМКА и ее fucking ограничения
Автор софта выложил на сайт демоверсию программы https://www.georadar-expert.ru/download/ge_demo_rus.pdf (в pdf все ссылки откуда качать-как ставить).
Ограничения - нет возможности загрузить внешний файл. Внутри "зашиты" примеры сигналов, в формате efd (внимательный читатель заметит, что этот формат содержит уже обработанные данные). Нет возможности сохранить настройки, сохранить результаты обработки. Нет возможности повторно запустить математику BSEF. Софт под 32 битную операционку. Перед установкой демки ставится matlab compiler runtime 7.8
1.png

После установки приложения, в папке c:\program files образовывается экзешник весом 129 мегабайт и файлы настроек к тестовым сигналам (файлы имеют расширение .geprm). Плюс всякие не интересные мелочи - иконки, деинсталлер и т.п.
5.png



Примеры сигналов подгружаются из меню "файл". При этом в папке проги самих примеров нет.
exampl.jpg

На сайте автор немного лукавит - на самом деле кнопка Open Data File активна, но при нажатии на нее прога посылает нас куда-то далеко
2.png
3.png


Менюшка для запуска основной математики расчета bsef не активна. Т.е. файлы примеров УЖЕ предварительно обработаны и содержат результат работы программы.
4.png


МАТЛАБ

Пока мы не знаем на чем написана программа, но т.к. при установке она требует обязательного наличия Matlab Compiler Runtime (далее MCR), да еще и строго определенной версии 7.8 - можно предположить, что при разработке использовалась среда программирования Матлаб.
Изначально матлаб это интерпретируемый, но не компилируемый язык - в файлах которые создает пользователь (расширение .m) находится текст программы.
MCR всего лишь создает sfx-архив с расширением .exe, который содержит файлы с исходным текстом.
А т.к. некоторые люди зачем-то хотят скрыть свои исходники, то MCR шифрует эти файлы AES'ом, но расшифровывает их только в ОЗУ перед загрузкой в интерпретатор. Как это происходит - пока что дело темное )

При запуске sfx- exe файла в папке программы MCR создает временную директорию, называемую mcr_cache_v78, содержащую огромное количесво интересных файлов:
gecache.jpg


Содержимое папки MATLAB_PROGRAMMS/demo выглядит так:
6.png



Тут мы видим внутренности 130мб sfx- exe архива georadar_expert_demo.exe в распакованном виде.
Из интересного - множество .m файлов с исходниками (шифрованы AESом). Все остальное - в plain text!
А именно - хелп в формате .chm, образцы сигналов в странном формате .efd, картинки, некий файл WindowApi.mex32 и т.д.

Подменяем образцы сигналов
Так как мы знаем что матлаб при создании exe-бандла шифрует только исходники программы, а остальные файлы не трогает - есть шанс на подмену "тестовых" демонстрационных данных которые идут в комплекте с демкой, на свои "боевые" файлы. Изучим что внутри .efd, открыв его при помощи обычного тектового редактора:
7.png



В заголовке видим MATLAB 5.0 MAT-file Platform; PCWIN.
Эти строки обозначают, что перед нами находится обычный матлабовский бинарник с сохраненной в него структурой данных и самими данными. Но, не понятно в какой версии матлаба открывать. Немного покопаемся в папке с кэшом MCR'а - находим .xml с метаданными автора софта:

autor.jpg


Из нужных нам моментов - версия компилятора, она "засвечена" в пути program files\MATLAB\R2008a\bin
Качаем этот матлаб с торрентов. К сожалению r2008a не нашел, но есть более новый r2012b - почти тоже самое, формат записи MAT данных там одинаковый.

Копируем из директории кэша и переименовываем тестовый файл GPR 400 MHz, Railway.efd в файл test.mat , запускаем матлаб и открываем файл. УРА! Видим структуры данных в plaintext'е и сами данные:
8.png


Массив "a" очень похож на исходные данные (511...512 строк ,1323 измерения), единственно что столбцы-строки заменены местами, но это видимо у разных производителей оборудования может быть по разному сделано.
Массив "epslist" -вероятно те данные, которые получаются после выполнения мат.анализа BSEF, и они являются результатом работы программы.
Исходная картинка (не модифицированная) выглядит так:
9.png


Попробуем как-то воздейстовать на файл, чтобы проверить можно ли подгружать в него свои данные, и убедиться в том что софт не проверяет контрольную сумму файла при загрузке тестовых данных. Для этого заполним часть строк массива "a" - нулями, и часть столбцов - тоже нулями. По идее, на картинке мы должны будем наблюдать "крест" из серых горизонтальных и вертикальных полос.
10.png

Далее, сохраняем в матлабе workspace, меняем расширение этого файла обратно на efd и перезаписываем тот самый railway-чего-то-там.efd в папке MCR cache на наш "испорченный " вариант. Загружаем пример в софте, и наблюдаем:
11.png

Еще раз ура - файл отображается корректно, "нули" в массиве стали видны на картинке.

Но - рисовать картинку каждый может. Интерес представляет расчет BSEF, и это оказалось самым сложным. Проверяем гипотезу - что будет, если удалить из efd файла расчетные данные. Заменяем все внутри этого массива "epslist" на нули. Загружаем файл, и... нас посылают на х.р :(
12.png

Ну что же, по крайней мере убедились что BSEF содержится внутри таблицы epslist .efd файла (он же mat файл). Но, кнопка BSEF Analysis которая должна эти данные вычислить - по прежнему не активная. А даже если ее сделать каким-то чудом, активной - не понятно сможем ли мы сохранить результаты расчета bsef в efd файл, откуда они собственно должны подгрузиться.

Надежду вселяют файлы process_absef.m, absef.m, FastPeakFind.m (поиск контрастных точек используется для расчета bsef) которые лежат в файле кэша. Т.е. вроде как функционал/код автор не удалил, а только заблокировал кнопки.

Поэтому - следующий этап забить болт и купить лицензию - пробовать извлечь матлабовские исходники из шифрованных AESом файлов, отредактировать их и собрать проект обратно. Продолжение следует )
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх