Сравнительный анализ некоторых java-декомпиляторов
Содержание:
- Создание exe файла с помощью PyInstaller
- Как декомпилировать EXE-файл
- Exec — Выполнение кода, консоль запросов и не только!
- Значит я могу взять исходники и сделать свою Elma BPM?
- 9 best Java Decompiler to be used
- Этап 2 — Разбиение на блоки и анализ статических ветвлений
- Известные ограничения
- Licenses + Acknowledgments
- decompiler
- Методика оптимизации программного кода 1С: проведение документов
- Подсистема «Показатели объектов»
- Faster — многофункциональный ускоритель работы программиста 1С и других языков программирования Промо
- Build in Docker
- Выделение блоков
Создание exe файла с помощью PyInstaller
PyInstaller собирает в один пакет Python-приложение и все необходимые ему библиотеки следующим образом:
- Считывает файл скрипта.
- Анализирует код для выявления всех зависимостей, необходимых для работы.
- spec, который содержит название скрипта, библиотеки-зависимости, любые файлы, включая те параметры, которые были переданы в команду PyInstaller.
- Собирает копии всех библиотек и файлов вместе с активным интерпретатором Python.
- Создает папку BUILD в папке со скриптом и записывает логи вместе с рабочими файлами в BUILD.
- Создает папку DIST в папке со скриптом, если она еще не существует.
- Записывает все необходимые файлы вместе со скриптом или в одну папку, или в один исполняемый файл.
Если использовать параметр команды или при генерации исполняемого файла, тогда все будет помещено в одну папку. Это поведение по умолчанию. Если же использовать параметр или , то все окажется в одном исполняемом файле.
Возьмем в качестве примера простейший c названием simple.py, который содержит такой код.
Копировать
Создадим один исполняемый файл. В командной строке введите:
После завершения установки будет две папки, BUILD и DIST, а также новый файл с расширением .spec. Spec-файл будет называться так же, как и файл скрипта.
Python создает каталог распространения, который содержит основной исполняемый файл, а также все динамические библиотеки.
Вот что произойдет после запуска файла.
Как декомпилировать EXE-файл
К сожалению, Windows не предусматривает в своем инструментарии встроенных инструментов, позволяющих выполнить декомпиляцию, поэтому придется пользоваться только сторонним ПО. Такое ПО может быть полезно как пользователям, которые просто желают получше изучить исходный код той или иной программы, так и разработчикам.
Вариант 1: VB Decompiler
Корректно способен провести декомпиляцию EXE-файлов, написанных и скомпилированных через Visual Basic 5.0 и 6.0. Это самая популярная среда разработки программ для Windows. Сама программа полностью бесплатна и занимает на диске всего несколько мегабайт.
- В верхней части интерфейса кликните по пункту «Файл» и выберите из контекстного меню вариант «Открыть программу». Вместо этого можно воспользоваться сочетанием клавиш Ctrl+O.
- В «Проводнике» отыщите исполняемый файл той программы, декомпиляцию которой вы собираетесь провести. Выделите его и нажмите на кнопку «Открыть», чтобы выполнить загрузку файла в рабочую среду.
- Путь до нужного EXE-файла отобразится в строке «Файл». Нажмите на кнопку «Старт», чтобы запустить процедуру декомпиляции.
- Программа не оповещает о завершении процедуры декомпиляции. О завершении таковой будет свидетельствовать только надпись «Декомпилировано» в нижней левой части окна.
- Для сохранения декомпилированного файла нажмите по кнопке «Файл» в верхнем меню и выберите из выпадающего списка вариант «Сохранить декомпилированный проект». Можете просто воспользоваться сочетанием клавиш Ctrl+S.
Вариант 2: EMS Source Rescuer
Данный декомпилятор корректно работает с файлами, скомпилированными с помощью Delphi и C++ Builder. Работа с другими компиляторами возможна, но официально не поддерживается, поэтому есть риски. Программа распространяется полностью бесплатно.
- Запустите EMS Source Rescuer. Его интерфейс представлен в качестве блоков с шагами. На первом шаге вам требуется указать путь до проекта, который будет декомпилирован. Это можно сделать, нажав на кнопку папки в строке «Executable File».
- Выберите нужный EXE-файл в окошке «Проводника».
- В поле «Project name» пропишите имя декомпилируемого проекта и нажмите «Next».
- На следующем шаге потребуется выбрать язык программирования, используемый в выбранном проекте. Это делается в блоке «Output style». Поставив маркер на нужном месте нажмите «Next».
- Вы перейдете сразу на 3-й шаг. Здесь будет показан исходный код проекта. Ниже выберите папку, в которую будут сохранены исходные файлы, извлеченные из EXE-файла, и нажмите «Save».
Вариант 3: ReFox
ReFox отлично зарекомендовал себя в декомпиляции проектов, созданных через Visual FoxPro и FoxBASE+. Сама программа носит условно-бесплатный характер использования. Есть демонстрационная версия, использование которой бесплатно, но только определенный период времени.
Инструкция по использованию данной программы выглядит так:
- В левую часть интерфейса программы уже встроен обозреватель файлов. Воспользуйтесь им, чтобы найти и открыть нужный EXE-файл. В правой части отображается техническая информация о выбранном элементе.
- Кликните правой кнопкой мыши по выбранному файлу. В контекстном меню выберите пункт «Decompile».
- Появится окошко, в котором будет указана директория декомпилируемого файла. Если там все верно, то нажмите «Ок» для продолжения операции.
- По завершении процесса вы получите соответствующее сообщение. Нажмите там «Ок». Результат можно посмотреть в той папке, которую вы указали во 2 шаге.
Вариант 4: DeDe
Эта программа для декомпиляции не так функциональна и поддерживает только одни язык – Delphi.
- Около самого верхнего поля нажмите на кнопку в виде раскрытой папки. Она отвечает за добавление папки.
- Выберите в «Проводнике» нужный EXE-файл и нажмите «Открыть».
- Чтобы запустить процесс декомпиляции, нажмите на кнопку «Процесс», которая расположена около строки указания проекта.
- При успешном завершении вы получите соответствующее сообщение. Нажмите «Ок» или закройте его.
- Теперь вам осталось сохранить результаты декомпилирования на компьютере. Переключитесь на вкладку «Project».
- Рекомендуется отметить галочками все пункты в блоке «Сохранить Делфи Проект». В строке «Папка проекта» укажите директорию, куда будет выполнено сохранение. Нажмите на кнопку «Сделать файлы», чтобы завершить сохранение.
Представленные декомпиляторы способы выполнить обратное преобразование большинства EXE-файлов, написанных на разных языках программирования. Как видите, в самом процессе, вне зависимости от выбранной программы, нет ничего сложного.
Exec — Выполнение кода, консоль запросов и не только!
Незаменимый инструмент администратора БД и программиста:
Выполняйте произвольный код из режима 1С Предприятие; сохраняйте/загружайте часто используемые скрипты; выполняйте запросы с замером производительности запроса в целом и каждой из временных таблиц в частности, а также с просмотром содержимого временных таблиц; произвольным образом изменяйте любые объекты БД, редактируя даже не вынесенные на формы реквизиты и записывая изменения в режиме «ОбменДанными.Загрузка = Истина»; легко узнавайте ИД объектов БД; выполняйте прямые запросы к SQL с замером производительности и не только!
5 стартмани
Значит я могу взять исходники и сделать свою Elma BPM?
— нет этого сделать не получится
- Почти весь серверный код обфусцирован (преобразован в непонятный вид для человека — без изменения логики для машины)
- Все модули связаны и подписаны ( ключом шифрования) — один без другого не запустится
Вывод: это делать бессмысленно — вы больше потратите времени чтобы разобраться и собрать свою копию чем сделать заново
— но приложения других разработчиков вы можете повторить, чей код не обфусцирован ( я не призываю так делать)
Украсть не получится — понятно
— тогда может хотя бы взломать активацию (сделать генератор ключей)?
* Забегая вперед — тоже не получится )
В Elma BPM используется механизм односторонних функций — пара связанных функций
- одна шифрует в одну сторону
- другая в обратную
а в наличии только последняя.
- Представьте что вы пропустили лист бумаги через шредер (измельчитель бумаги)
- И теперь представьте механизм превращающий из мусора лист бумаги без потери информации… (у вас именно такой механизм)
- А теперь вам предстоит подобрать нужный шредер — удачи)
— такие функции используют преобразования XOR(исключающий или) — где обратная операция возвращает неоднозначный ответ (например на вход 1, на выход 0 или 1 — неизвестно).
9 best Java Decompiler to be used
There are many best Java Decompiler which provide offline services. You can easily download these applications from the internet in order to get the work done. Here are some of the best java Decompiler on the internet today those are friendly to work with and have a good user interface.
1) JD Project
JD Project is one of the most frequently used best java decompiler offline. It is developed to decompile Java 5 and beyond, which currently goes up to Java 8. It is available for Windows, Mac, and Linux and is the best decompiler for eclipse and IntelliJ as it provides a plugin for each platform separately. This proves to be extremely useful during the debugging process.
It uses the JD- GUI. This is an easy to use and an interactive graphical interface.
2) Cavaj Java Decompiler
This is another great tool for converting bytecodes to Java source code. If you are a Windows user, then Cavaj is the best option available for you out there. It is simple to use and decompiles any given Java class file. One major drawback for this application is that it lacks Syntax Highlighting. It is also not available for Mac and Linux Operating softwares. In short, this is a standalone Windows application that converts bytecodes into class code.
3) DJ Java Decompiler
This is yet another standalone Windows Application. It is available for Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8, Windows 8.1 and Windows 10. It can easily decompile complex Java applets and binaries to produce accurate source code. There are drag and drop features for smooth working, so you can decompile .class files on your computer’s hard disk or on a network drive that you have connected.
4) JBVD
JBVD stands for Java Bytecode Viewer and Decompiler. It is based on the Javassist open source library. Like the others, this application too is available only for Windows users. It is one of the most powerful bytecode viewer and decompiler. Of course, this program needs Java to be installed on your computer to work JBVD can thus be used both, as a Java viewer and a decompiler.
5) AndroChef Java Decompiler
If you are on the lookout for a Java decompiler to view and analyze bytecode then AndroChef should be your preferred option. It is capable of easily converting Java .class files and applets into Java source code. It is simple and easy to use, however it is only available on the Windows Operating System. With Androchef, you can decompile apk. dex, jar, and java class files.
6) Procyon
It is one of the most popular open source Java decompiler. One of its most amazing features is the ability to deal with Java 8. Procyon can handle all those features which were launched with Java 5 to the latest version to Java. Due to this, Procyon can be used as an alternative where other java versions fail. It can also easily deal with other features such as local classes, annotations, Enum declarations, and Lamdas in Java 8.
7) CFR Decompiler
This is another such decompiler that was developed to deal with the latest features and updates in Java programming. It can easily decompile the latest Java features such as Lamdas and Switch Statement. This means if you are using Java 8, you can be at peace with yourself. The only downside here is that this decompiler is not an open source program. However, it has a command line tool that makes the decompiling process faster and even more efficient.
8) FernFlower
Apart from the decompilers mentioned above, the ones mentioned here are still in nascent stages and are under development. Fernflower is one of those. Fren is an analytical decompiler for Java and has recently been made open sourced. The software renames all the obfuscated symbols and puts them into a JAR file in the end. FrenFlower is used to decompile .class, zip and JAR file extensions.
9) Krakatau
It is an interesting decompiler as it has been written in Python. It is still in the development stage. However, it contains three tools: a decompiler and disassembler for Java class files and an assembler to create class files. However, one major drawback here is that it does not support all Java 8 features.
Conclusion- Which is best Java Decompiler?
If you are looking out for a best Java decompiler then you can try out any of the ones mentioned above. Just download them and try them out. You could share your experience in the comments below and even if you are aware of other amazing decompilers, then you could share those two. I would love to add it to the above list. You can also check out detailed tools section for more content.
Java Decompiler Software
$0
5
Summary
Check these 9 best offline Java decompiler which help you manage the codes and convert it as required. You can download these top Java decompilers and install it on your system.
Этап 2 — Разбиение на блоки и анализ статических ветвлений
На этом этапе программу нужно представить в виде набора блоков, то есть, последовательностей команд, всегда выполняющихся друг за другом, и переходов между ними. То, что получится, называется «control flow graph», или граф ветвлений.
На блоки ARM-программу разбить легко, хотя есть нюансы — в ARM-коде почти все инструкции могут быть условными. Соответственно, каждая последовательность условных команд с одним и тем же суффиксом — блок, а все условные переходы генерируются как раз из суффиксов.
Чтобы выделить блоки, нужно сначала пройтись по всему бинарю и на каждый адрес сохранить флаги, а потом опять пройтись, но уже рекурсивно и начиная с точки входа программы. Новый блок в позиции нужно начать, если (флаг EPI_N):
- Если на этот адрес обнаружены переходы.
- Если по предыдущему адресу другой условный суффикс.
- Если по предыдущему адресу условная инструкция, меняющая флаги.
- Если по предыдущему адресу переход без ссылки (то есть переход, но не вызов функции).
Также нужно сохранить информацию о переходе:
- Со ссылкой/без ссылки.
- Тип адреса:
- Известный и вычислен
- Динамический регистровый
- Динамический из памяти (LDR PC, )
- Возврат из функции
Переходы в ARM могут инициироваться следующими инструкциями:
- B / BX / BL / BLX
- MOV PC, …
- Арифметико-логические инструкции типа ADD PC, …
- LDR PC, . Перед этой инструкцией часто встречается MOV LR, PC — тогда такой переход надо считать вызовом функции.
- LDMxx … {..PC..} / POP {..PC..}. Это, кстати, почти наверняка возврат из функции, компилятор совмещает его с восстановлением значений регистров из стека.
Отследить на этом этапе все переходы мы не сможем, потому что адрес может вычисляться более или менее динамически, а мы пока что не смотрим на данные. Однако есть два плюса:
- Большинство «динамических» переходов — вызовы функций. Управляющие конструкции, как правило, состоят из ближних переходов.
- Даже если мы не знаем цель перехода, сам факт наличия перехода всё равно нам известен.
Поэтому разбиение на блоки будет почти наверняка корректным. Единственное, что может повлиять на разбиение — неизвестный переход в середину блока.
Далее нужно разобраться с условными суффиксами. Тут есть нюансы:
- Как отобразить на граф последовательность условных блоков с разными суффиксами?
- Как отобразить на граф переход на условную инструкцию?
Для решения (1) нужно добавить все переходы, «перескакивающие» один или несколько условных блоков, начиная с последней безусловной инструкции. Для этого при обработке нужно сохранять номера условных блоков + номер последнего безусловного, и при встрече нового блока добавлять переходы на этот новый блок с каждого из сохранённых с условием, равным конъюнкции отрицаний суффиксов блоков, которые мы перескакиваем, и суффикса нового блока, если он условный.
Для решения (2) нужно действовать похоже — переход на условную инструкцию заменяется на набор переходов, которые могут перескакивать условные инструкции. Правда, так мы всё равно ничего не сможем сделать, если условной будет первая инструкция функции — функция должна представлять из себя единицу с одной точкой входа. В такой ситуации можно только вводить «псевдо-блок», не включающий в себя ни одной инструкции, в начало функции. Но такого кода компиляторы, к счастью, не генерируют, поэтому если не пытаться декомпилировать вирусы и кряки — всё будет нормально.
В результате все инструкции переходов на графе у нас будут безусловными, а условными могут быть только переходы к условным блокам инструкций.
Пример графа ветвлений с этого этапа:
Известные ограничения
Требуется режим прерывания выполнения
Создание исходного кода с помощью декомпиляции возможно только в том случае, если отладчик находится в режиме прерывания выполнения и приложение приостановлено. Например, Visual Studio переходит в режим прерывания, попадая в точку останова или в исключение. Вы можете легко активировать прерывание выполнения Visual Studio при следующем запуске кода с помощью команды Прервать все ().
Ограничения декомпиляции
Создание исходного кода из промежуточного языка (IL), используемого в сборках .NET, имеет некоторые внутренние ограничения. Поэтому созданный исходный код не выглядит в точности как оригинальный исходный код. Большая часть различий сосредоточена в тех местах, где информация в оригинальном исходном коде не нужна во время выполнения. Например, во время выполнения не нужна такая информация, как пробелы, комментарии и имена локальных переменных. Рекомендуется использовать созданный исходный код, чтобы понять, как выполняется программа, а не в качестве замены оригинального исходного кода.
Отладка оптимизированных сборок или сборок выпуска
При отладке кода, декомпилированного из сборки, которая была скомпилирована с использованием оптимизаций компилятора, вы можете столкнуться со следующими проблемами:
- точки останова могут не всегда быть привязаны к соответствующим исходным расположениям;
- при пошаговом выполнении шаг может не всегда переходить в правильное место;
- имена локальных переменных могут быть неточными;
- некоторые переменные могут быть недоступны для оценки.
Дополнительные сведения можно найти в описании проблемы GitHub Интеграция ICSharpCode.Decompiler с отладчиком VS.
Надежность декомпиляции
Относительно небольшой процент попыток декомпиляции может привести к сбою. Это происходит из-за ошибки пустой ссылки точки последовательности в ILSpy. Мы устранили этот сбой путем перехвата таких проблем и корректного завершения попытки декомпиляции.
Дополнительные сведения можно найти в описании проблемы GitHub Интеграция ICSharpCode.Decompiler с отладчиком VS.
Ограничения при работе с асинхронным кодом
Результаты декомпиляции модулей с шаблонами кода async/await могут быть неполными или неудачными в целом. Шаблоны кода async/await и машины состояния yield state-machine в ILSpy реализованы только частично.
Дополнительные сведения можно найти в описании проблемы GitHub Состояние генератора PDB.
Только мой код
Параметры режима Только мой код (JMC) позволяют Visual Studio выполнять шаг с обходом системы, платформы, библиотеки и других вызовов непользовательского кода. Во время сеанса отладки в окне Модули отображаются модули кода, которые отладчик воспринимает как «Мой код» (т. е. пользовательский код).
При декомпиляции оптимизированных модулей или модулей выпуска создается непользовательский код. Если отладчик прерывается в декомпилированном непользовательском коде, появляется окно Отсутствует источник. Чтобы отключить режим «Только мой код», перейдите в раздел Инструменты > Параметры (или Отладка > Параметры) > Отладка > Общие и снимите флажок Включить только мой код. .
Извлеченный исходный код
Исходный код, извлеченный из сборки, имеет следующие ограничения.
- Имена и расположение созданных файлов нельзя настроить.
- Файлы являются временными и будут удалены Visual Studio.
- Файлы помещаются в одну папку без использования какой-либо иерархии, которая была в оригинальных исходных файлах.
- Имя каждого файла содержит хэш контрольной суммы файла.
Создается только код C#
При декомпиляции создаются только файлы исходного кода на C#. Возможность создавать файлы на каком-либо другом языке отсутствует.
Licenses + Acknowledgments
Application
FFDec Application is licensed with GNU GPL v3, see the license.txt.
It uses modified code of these libraries:
And links also these libraries:
- Java Native Access — JNA (Registry association, Process memory reading) — LGPL
- javactivex (Flash Player ActiveX embedding) — LGPLv3
- flashdebugger library (Debugging ActionScript) — LGPLv3
- FFDec Library (LGPLv3) — see below
Library
FFDec Library is licensed with GNU LGPL v3, see license.txt for details.
It uses modified code of these libraries:
- UAB «DKD» NellyMoser ASAO codec (Decoding Nelly Moser sound format) — LGPL
And links also these libraries:
decompiler
Home / Tools / decompiler
Packages that attempt to reverse a compiled program into source code.
Tool count: 28
Name | Version | Description | Category | Website |
---|---|---|---|---|
avaloniailspy | 198.a465d9f | .NET Decompiler (port of ILSpy) | decompiler | |
beebug | 25.cddb375 | A tool for checking exploitability. | decompiler disassembler reversing | |
cafebabe | 0.1.2 | Java bytecode editor & decompiler. | decompiler reversing | |
cfr | 150 | Another Java decompiler. | decompiler | |
dnspy | 6.1.7 | .NET debugger and assembly editor. | windows decompiler binary reversing | |
dotpeek | 2020.2.1 | Free .NET Decompiler and Assembly Browser. | windows decompiler binary reversing | |
fernflower | 485.e19aab6 | An analytical decompiler for Java. | decompiler | |
ffdec | 11.0.0 | Open source Flash SWF decompiler and editor. | decompiler binary misc | |
flasm | 1.62 | Disassembler tool for SWF bytecode | reversing decompiler | |
gadgetinspector | 6.ac7832d | A byte code analyzer for finding deserialization gadget chains in Java applications. | decompiler binary | |
hopper | 4.5.29 | Reverse engineering tool that lets you disassemble, decompile and debug your applications. | reversing disassembler decompiler binary | |
iaito | 5.2.2 | Qt and C++ GUI for radare2 reverse engineering framework | reversing decompiler disassembler debugger | |
jadx | 1.2.0 | Command line and GUI tools to produce Java source code from Android Dex and APK files | decompiler reversing | |
jd-cli | 1.1.0 | Command line Java Decompiler. | decompiler reversing | |
jd-gui | 1.6.6 | A standalone graphical utility that displays Java source codes of .class files. | decompiler reversing | |
jpexs-decompiler | 12.0.1 | JPEXS Free Flash Decompiler. | decompiler | |
justdecompile | 22018 | The decompilation engine of JustDecompile. | windows decompiler binary reversing | |
luyten | 0.5.4 | An Open Source Java Decompiler Gui for Procyon. | decompiler misc | |
pcode2code | 4.4de2193 | VBA p-code decompiler. | decompiler | |
procyon | 0.5.36 | A suite of Java metaprogramming tools focused on code generation and analysis. | decompiler code-audit | |
python-uncompyle6 | 3.7.4 | A Python cross-version decompiler. | decompiler | |
r2cutter | 1:1.12.0 | Qt and C++ GUI for radare2 reverse engineering framework | reversing decompiler disassembler debugger | |
r2ghidra | 5.2.1 | Deep ghidra decompiler integration for radare2 and r2cutter | reversing decompiler disassembler debugger | |
radare2-cutter | 1:1.12.0 | Qt and C++ GUI for radare2 reverse engineering framework. | decompiler reversing disassembler debugger | |
recaf | 2.18.3.2136.419925d9 | Modern Java bytecode editor. | decompiler reversing | |
recstudio | 4.1 | Cross platform interactive decompiler | decompiler reversing | |
retdec | 1927.b3749201 | Retargetable machine-code decompiler based on LLVM. | decompiler reversing | |
snowman | 0.1.3 | A native code to C/C++ decompiler, see the examples of generated code. | windows decompiler |
Методика оптимизации программного кода 1С: проведение документов
Описание простого метода анализа производительности программного кода 1С, способов его оптимизации и оценки результатов в виде числовых показателей прироста производительности. Не требует сторонних программных продуктов, используются только типовые возможности платформ 1С.
Методика проверена на линейке платформ начиная с 1С:Предприятие 8.2 (обычные формы, управляемые формы). Позволяет ускорить проведение проблемных документов в 3 и более раз, провести проверку корректности формирования проводок оптимизированным кодом и подтвердить результаты оптимизации реальными замерами производительности в режиме предприятия.
К публикации приложены демонстрационные базы для режимов обычного и управляемого приложения на платформе 1С:Предприятие 8.3 (8.3.9.2033).
1 стартмани
Подсистема «Показатели объектов»
Если вашим пользователям нужно вывести в динамический список разные показатели, которые нельзя напрямую получить из таблиц ссылочных объектов, и вы не хотите изменять структуру справочников или документов — тогда эта подсистема для вас. С помощью нее вы сможете в пользовательском режиме создать свой показатель, который будет рассчитываться по формуле или с помощью запроса. Этот показатель вы сможете вывести в динамический список, как любую другую характеристику объекта. Также можно будет настроить отбор или условное оформление с использованием созданного показателя.
2 стартмани
Faster — многофункциональный ускоритель работы программиста 1С и других языков программирования Промо
Программа Faster 9.4 позволяет ускорить процесс работы программиста
(работает в любом текстовом редакторе).
Подсказка при вводе текста на основе ранее введенного текста и настроенных шаблонов.
Программа Faster позволяет делится кодом с другими программистами в два клика или передать ссылку через QR Код.
Исправление введенных фраз двойным Shift (с помощью speller.yandex). Переводчик текста. Переворачивает текст случайно набранный на другой раскладке.
Полезная утилита для тех, кто печатает много однотипного текста, кодирует в среде Windows на разных языках программирования.
Через некоторое время работы с программой у вас соберется своя база часто используемых словосочетаний и кусков кода.
Настройка любых шорткатов под себя с помощью скриптов.
Никаких установок и лицензий, все бесплатно.
1 стартмани
Build in Docker
Docker support is maintained by community. If something does not work for you or if you have suggestions for improvements, open an issue or PR.
Build Image
Building in Docker does not require installation of the required libraries locally. This is a good option for trying out RetDec without setting up the whole build toolchain.
To build the RetDec Docker image, run
This builds the image from the master branch of this repository.
To build the image using the local copy of the repository, use the development Dockerfile, :
Run Container
If your is not 1000, make sure that the directory containing your input binary files is accessible for RetDec:
Now, you can run the decompiler inside a container:
Note: Do not modify the part is. You only need to change . Output files will then be generated to .
Выделение блоков
Далее нужно перейти к выделению блоков — то есть, циклов и условных операторов — тому, что обычно называют «структурированием», то есть воссозданием программы из линейного листинга:
Циклы
У любого цикла есть точка входа, на которую можно поставить метку «continue», так как оператор «continue» как раз на неё и переходит, и стандартная точка выхода, на которую можно аналогично поставить метку «break». Внутри цикла переходы на точки входа и выхода для удобочитаемости нужно заменять на continue и break.
Цикл:
- Начинается с какого-либо узла, являющегося к тому же единственной точкой входа в этот цикл.
- Должен включать в себя все пути, ведущие в любой внешний узел, и возвращающиеся в любой внутренний узел (обобщённое требование цикла).
- Если добавили какой-то узел, и получили две точки входа, то этот узел не принадлежит циклу.
- Если добавили какой-то узел и единственная точка входа изменилась, идём нафиг — цикл из изначального узла не растёт.
Циклы бывают с предусловием и с постусловием. Цикл с предусловием:
С постусловием:
Условные операторы
Условный оператор определить легко: если что-то ветвится и это не ветвление, реализующее цикл (то есть не предусловие и не постусловие само по себе), это условный оператор 🙂
Транслировать его следует так:
- Ищем точку сбора всех веток, выходящих из начального узла (узел, в котором все они объединяются).
- Залезаем в каждую ветку, всё обрабатываем точно так же, как до этого, и точно так же (в обработке линейных участков и циклов тоже помечаем).
- Помечаем пройденные узлы как обработанные.
- Когда где-то видим уже обработанный узел, заменяем переход к нему на goto. То есть, if «без дублирования» кусков веток будет «нормальным», без goto.
Пример «плохого» if’а: 0->1->3->4, 0->2->3, 0->4, 0->5->4.
Декомпилировать его можно как-то так:
if(_1) { 1; 3; } else if(_2) { 2; goto 3; } else if(_5) { 5; } 4;