Выяснить программно, был ли исправлен Java-класс? - PullRequest
0 голосов
/ 17 ноября 2018

Можно ли это выяснить программно, если кто-нибудь исправит класс скомпилированного кода, особенно в Android?Пример: мое здание (например, .apk) содержит класс PiracyCheck.class.Можно ли запустить во время компиляции какую-то «контрольную сумму» этого класса (выполняется другим классом)?Я полагаю, что я получаю какую-то ценность от этого, скажем, abcdefg.Если кто-нибудь исправит этот класс, контрольная сумма будет внезапно 123456 вместо abcdefg.Я проверяю контрольную сумму на бэкэнд-сервере.Если контрольная сумма была правильной, продолжите, если нет, отмените.или есть какие-то лучшие решения для достижения этой цели?

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

1 Ответ

0 голосов
/ 17 ноября 2018

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

Можно ли запустить во время компиляции какую-то контрольную сумму этого класса (выполненную другим классом)?

Если возможно создать криптографическую контрольную сумму класса во время компиляции, запись на стороне сервера, или в «.apk», или в обоих случаях.

Также возможно вычислить такую ​​контрольную сумму на стороне клиента.

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

  • Я не думаю, что платформа Android предоставляет эту функциональность, и если бы она это сделала, она могла быть подорвана на «рутированном» устройстве.

  • Естественно, если бы кто-то попытался взломать ваш «.apk», он мог бы подорвать любой «самоконтролируемый» код в «.apk», чтобы получить исходную контрольную сумму, а не контрольную сумму фактического кода. .

В любом случае, ваш сервер увидит ожидаемую контрольную сумму, а не действительную контрольную сумму фактического кода. Это будет одурачено.


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

...