Декомпиляция Java и JNI - PullRequest
       21

Декомпиляция Java и JNI

1 голос
/ 26 марта 2011

Немного похоже на этот вопрос Как заблокировать скомпилированные классы Java для предотвращения декомпиляции? , однако я хорошо знаю, как декомпилировать приложение и пытаться понять его, даже если оно запутано, но это одно Я не слишком уверен в том, как будет работать тот же процесс, если приложение загрузит библиотеки C (файлы .so) с использованием jni.

Например, скажем, если бы был калькулятор, если бы этот калькулятор был построен на чистом Java, можно было бы войти и испортить кнопку с квадратным корнем, чтобы при переходе в 2 он возвращал 2 ^ 3, а не 2 ^ 2.

Теперь, если это приложение использовало JNI для выполнения всех этих математических команд (чтобы оно передавало 2 нативному методу), как бы вы могли войти в C, измените его так, чтобы оно возвращало 2 ^ 3, а не 2 ^ 2

Ответы [ 4 ]

3 голосов
/ 26 марта 2011

Просто выясните сигнатуру функции C и скомпилируйте свой собственный объектный файл, который реализует эту сигнатуру.

Несколько лет назад, работая в магазине мэйнфреймов, мой начальник создал собственную версию функции системной даты и повторно связал коммерческое приложение, которое мы использовали, чтобы ему не пришлось продлевать ограниченную по времени лицензию. Это было нелегально, но это сработало.

2 голосов
/ 26 марта 2011

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

1 голос
/ 26 марта 2011

Вы можете использовать отладчик для входа в код C.

Вы можете разобрать его.IDA (Интерактивный дизассемблер) был (является?) Отличным примером и мог производить высококачественный дизассемблированный код (перекрестные ссылки, документацию, имена системных / lib функций в вызовах, ...).

Этозатем можно исправить двоичный файл (который можно каким-то образом защитить).

Если вас беспокоит то, что вы не хотите, чтобы люди, использующие ваше приложение, видели код или даже меняли его, не могли бы вы рассмотретьпозволить ему работать как веб-приложение или клиент-серверное приложение, где у пользователя нет доступа к серверу?Это позволит вам решить проблему.

1 голос
/ 26 марта 2011

Один из вариантов - использовать дизассемблер.Более простой вариант - заменить библиотеку собственной библиотекой. Я использую ее для тестирования практически каждый день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...