2010-11-20 2 views
5

Я пишу плагин для приложения Java. Я мог бы запутать плагин, но он все равно будет легко реконструирован.Могу ли я использовать встроенную компиляцию как Java obfuscation

Я считаю, что если бы я смог скомпилировать этот плагин в разделяемую библиотеку, которая в большой степени использует JNI для связи с основным приложением, было бы гораздо сложнее перепроектировать. Я готов пожертвовать некоторой производительностью JNI, и приложение, которое я кодирую, поддерживает загрузку разделяемой библиотеки. Единственная проблема заключается в том, что я не в курсе инструмента, который делает работу: GCJ, кажется, зависит от его собственного исполнения и ikvm.net - на .NET

Чтобы быть точным:


public class PluginImpl implements Plugin { 
    @Override 
    public void startPlugin(PluginContext ctx) { 
     ctx.helloWorld(); 
    } 
} 

должны быть преобразованный в


public class PluginImpl implements Plugin { 
    @Override 
    public native void startPlugin(PluginContext ctx); 
} 

и тело моего метода startPlugin скомпилировано в общую библиотеку.

(ну, да, я знаю, я мог бы написать этот плагин в C в первую очередь)

+1

Почему вы говорите, что обфускация bytecode может быть легко изменена? – hhafez

+9

Любой, у кого есть время и терпение, чтобы де-обфускать ваш байт-код, может сделать то же самое с нативным кодом, учитывая больше времени. Вы приносите в жертву производительность, неспособность отлаживать, надежность (когда скомпилированная к-родной Java неизменно ведет себя по-другому по сравнению с запуском в JVM) и дни вашего собственного времени для очень небольшого «выигрыша» и значительно худшего продукта. ** Откажитесь сейчас **, в то время как вы не вложили столько времени в обфускацию, что вы чувствуете, что просто * имеете *, чтобы отправить продукт, как это ... – SimonJ

+2

Может быть, вы должны перенести свое приложение на Perl ;-) – helpermethod

ответ

1

я предполагаю, у вас есть веские причины, чтобы пойти на родной компиляции. Вариант, который вы можете изучить, - Excelsior JET, который является сертифицированным решением Java.

+0

По-прежнему он запускает собственную среду выполнения: «В результате исполняемые файлы нуждаются в Exelsior JET Runtime для запуска, но не в Sun JRE». (http://www.excelsior-usa.com/jetfaq.html) – obfuscer

+0

Хорошо, +1 в любом случае для того, чтобы быть очень интересным продуктом. –

+0

Любому Java-приложению требуется среда выполнения Java с сборщиком мусора, изоляция контекста (будь то JNI, CNI или что-то еще) и т. Д. Excelsior JET просто прекомпилирует байт-код до оптимизированного собственного кода. У него все еще есть компилятор JIT для обработки классов, которые не были предварительно скомпилированы - динамические прокси, сторонние плагины и т. Д. –

0

Вы можете сделать свой плагин своим сервисом за RMI. Таким образом, плагин будет приложением и может быть скомпилирован в собственный код.

+0

Действительно хороший момент, спасибо. Я подозреваю, что из процесса RMI будет слишком много штрафных санкций, но я могу попробовать. Добавленный бонус - это то, что я мог бы использовать gcj. Я бы хотел, чтобы API, который я пишу, был более удобным для сериализации. – obfuscer

2

Вы не можете использовать что-нибудь для обфускации кода, если вы распространяете исполняемый код в любой форме. Любой исполняемый код может быть запрограммирован в обратном порядке. Это деловая проблема, а не техническая проблема, и она решается busniess означает: лицензионные соглашения, цену, время выхода на рынок или, скорее всего, более реалистичную оценку рисков и ценностей, то есть признание вам, что ваш код просто не является " t это ценный. В качестве альтернативы поставляйте свой продукт как услугу, а не как исполняемый файл.

+0

Обфускация не предназначена для «предотвращения» обратного проектирования, просто для ее усложнения.До тех пор, пока вы знаете, что если вы распространяете исполняемый код, на самом деле невозможно полностью предотвратить обратное проектирование, нет ничего плохого в использовании обфускации в качестве сдерживающего фактора. – Grodriguez

+0

Существует определенная стоимость и возможная выгода. Это деловое решение. – EJP

+0

Вы можете сказать то же самое для любой функции любого программного продукта. Решение о том, реализована ли функция, является бизнес-решением. Дизайн и внедрение - это техническое задание. Аналогичным образом, решение о том, следует ли использовать обфускацию, - деловая проблема. Обфускация сама по себе является технической темой. – Grodriguez