2009-09-05 5 views
4

Какие методы я могу использовать для создания моего файла «jar» Reverse Engineer?Хакер, защищающий файл jar

+0

http://stackoverflow.com/questions/1146855/is-obfuscation-the-best-answer-closed – erickson

+3

Я знаю, что невозможно сделать что-то «хакерским доказательством», и я понимаю опасности использования такой неточной фраза, и я понимаю, что многие меры, которые можно предпринять для «хакерских доказательств», - это плохие идеи. ОДНАКО, это может быть не выбор OP. Слишком много вопросов безопасности на SO отвечают «невозможно», когда объяснение того, как можно было бы сделать вторжение сложнее, было бы гораздо более полезным. Да, люди должны знать, когда полная безопасность невозможна, но если это все, что вы можете предложить, это всего лишь частичный ответ. – Imagist

+0

@imagist «Я понимаю, что многие меры, которые можно принять для« хакерских доказательств », - это плохие идеи» Почему? –

ответ

2

Вы ищете «обфускатор» (если вы хотите отправить фляги). Многие существуют:

http://java-source.net/open-source/obfuscators

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

Если вы действительно хотите скрыть вещи, подумайте о компиляции в родной двоичный файл с помощью gcj.

6

Нет такой вещи, как доказательство хакера. Сожалею.

EDIT ДЛЯ КОММЕНТАРИЕВ:

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

Что вы можете сделать, это обфускация кода, упаковка банки и объединение всех внешних пакетов в один, чтобы сделать жизнь сложнее. Однако независимо от того, насколько высок барьер, мой комментарий в предыдущем параграфе все еще применяется.

+1

Что ближайшего, что я могу получить на этой планете? –

21

Вы не можете сделать это обратным инженерным доказательством. Если время выполнения java может читать инструкции, так же может пользователь.

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

+2

Очень похоже, что вы не можете сделать компилируемый машиной код «hacker proof» - вы можете просто запутать его. – aperkins

+9

Существует один способ - убедитесь, что пользователь никогда не имеет доступа к файлу .jar. Например, некоторые приложения загружают пользователя только «клиенту», а для доступа к суперсекретному алгоритму клиент должен отправлять запросы обработки на сервер (который принадлежит разработчику и, надеюсь, хорошо защищен), который запускает секретный код по данным клиента и отправляет результаты. –

+0

@Jeremy - достаточно времени, даже алгоритм серверной стороны может быть нарушен. –

3

Я думаю, что это больше касается упрощения пути доступа к банке, больше всего на свете.

  1. Попробуйте определить, что пользователь контекста будет фактически выполнять код , который будет иметь доступ к .jar. Заблокировать вниз доступ к банке только для чтения доступ только от этого пользователя. Как вы это делаете будет зависеть от того, используете ли вы банку от веб-приложение или рабочий стол .exe, а также зависит от операционной системы, в которой вы работаете .
  2. Если возможно - подпишите флягу и подтвердите подпись от исполняемый код. Это будет не менее , если вы указали, что .jar был . Затем вы можете использовать , чтобы остановить выполнение исполняющего приложения с использованием .jar (и зарегистрировать и отобразить сообщение об ошибке). Для получения дополнительной информации см. jarsigner docs.
+0

Каковы современные технологии защиты банок от обфускации? –

3

Я видел один случай, когда компания написала пользовательский загрузчик классов, который может расшифровать зашифрованный файл jar. Сам загрузчик классов использовал скомпилированный код JNI, так что ключ и алгоритм дешифрования были довольно глубоко запутаны в двоичной библиотеке.

+1

Это похоже на страшное решение, поскольку оно снимает вашу переносимость в ад. – Imagist

+1

Все это компромисс. В этом случае компания хотела вывести свой продукт на рынок на выбранной платформе, сохраняя при этом защиту своего IP-адреса, и разрешить проблемы с переносимостью, если и когда платежный клиент нуждался в своем продукте на другой платформе. И этот загрузчик классов был единственным JNI, что у них было, остальная часть кода была простой Java. Так что да, «ужасно» в том, что он привязал их к определенной платформе, но нет, не так «ужасно», что они вытащили свой продукт и все еще чувствовали себя в безопасности, они не раздавали секретный соус. – PaulMcG

+2

«... и все еще чувствовал себя в безопасности ...». Чувство безопасности и безопасности - это совершенно разные вещи :-) –

11

Не отпускайте его.

+0

+1 К сожалению, это единственное гарантированное 100% решение. –

+1

Почти 100%, если никто не держит ваш диск (ы). Лучше нуля и выбросьте его в огонь, чтобы быть абсолютно уверенным. –

+0

Клингоны не выпускают программное обеспечение. Программное обеспечение Klingon ускользает, оставляя на своем пути кровавый след инженеров-конструкторов и специалистов по обеспечению качества. с http://www.klingon.org/resources/klingon_code.html – stu

1

Определенно избегайте размещения каких-либо конфиденциальных данных в коде. Например:

  • паролей
  • подключения к базе данных строк

Одним из вариантов было бы зашифровать их (используя стандартные процедуры шифрования, избегать прокатки самостоятельно) и поместить их во внешнем файле конфигурации или базы данных.

Как указывали другие, любые алгоритмы в развернутом коде могут быть обратно спроектированы.

При необходимости чувствительные алгоритмы могут быть помещены в веб-службу или на другой серверный код.

+0

не мог понять, что «не сворачивайте свои собственные». Почему? –

+1

См. Http://stackoverflow.com/questions/118374/what-techniques-do-you-use-when-writing-your-own-cryptography-methods - пропустите принятый ответ и прочитайте остальные. (Принятый ответ в основном «делай это ради удовольствия», но не для производственного кода.) Большинство людей попадают в ловушку безопасности через безвестность - и, как уже упоминалось выше, ваши алгоритмы могут быть обратно спроектированы. – TrueWill

+0

Даже алгоритм, размещенный на стороне сервера, может быть сломан. –

Смежные вопросы