Подписание для защиты JAR от реинжиниринга - PullRequest
0 голосов
/ 24 мая 2019

Я думаю, как защитить JAR от реверс-инжиниринга.

(Вопрос 1):

Если JAR подписан подписью, может ли подпись защитить JAR? Если нет, то какова цель подписания?

(Вопрос 2):

Android APK может быть подписан подписью платформы, и извлечь саму подпись платформы из самого APK невозможно.

С этой точки зрения я думаю, что подпись может быть использована для защиты чего-либо. Но почему мы можем декомпилировать любой APK, даже если он защищен подписью платформы?

Ответы [ 3 ]

3 голосов
/ 24 мая 2019

Подумайте о своей собственной подписи, которую вы пишете ручкой.Делает ли подписание листа бумаги каким-либо образом невозможным его чтение?

Нет: это просто дает кому-то, читающему бумагу, указание на то, что она была написана вами (или вы согласны с ее содержанием, или чем-то еще)).

Так же и с подписью банки: все, что она делает, это дает людям указание на то, что вы (или люди, которым вы разрешили использовать подпись) ее создали, чтобы никто не мог изменить банку.содержание и представить его как «подлинный».

Подписи не помогут вам остановить обратный инжиниринг.

2 голосов
/ 24 мая 2019

Если JAR подписан подписью, может ли подпись защитить JAR? Если нет, то какова цель подписания?

Как указали другие, это не позволяет другим распространять свои копии вашего кода под вашим именем / брендом. Например, предположим, что вы пишете калькулятор и публикуете подписанный байт-код на github, тогда я не могу написать свой собственный байт-код и утверждение (не обнаружив, что это ложный код, если я не найду ключ, с которым он был подписан, что само по себе очень ... очень маловероятно) что это копия вашего калькулятора.

Но почему мы можем декомпилировать любой APK, даже если он защищен подписью платформы?

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

Проще говоря, подпись является доказательством источника и подлинности кода, не более того.

Edit:

Почему мы не можем извлечь оригинальную подпись из APK? Почему это невозможно?

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

Можем ли мы использовать этот механизм для защиты нашего JAR?

Зависит от того, что вы пытаетесь защитить. Если это олицетворение кем-то другим, то да, на какое-то время, если они каким-то образом не натыкаются на ключ. Очевидно, что против реинжиниринга это не годится

2 голосов
/ 24 мая 2019

Если JAR подписан подписью, может ли подпись защитить JAR? Если нет, то какова цель подписания?

Если вы подписываете договор, не мешает ли это любой из вовлеченных сторон нарушить договор ?! Нет, это не так. Подпись - это просто то, что (теоретически) юридически идентифицирует вас.

И в этом весь смысл подписания программного обеспечения: сказать пользователям программного обеспечения: «это моя поставка, вы можете доверять ей, потому что I подписал ее (и никто иначе это могло измениться) ".

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

Единственный вид защиты - это обфусцирование содержимого файла JAR. Для этого есть инструменты (особенно на Android). Тем не менее запутывание для Java не совсем идеально. См. здесь , например.

...