Нужна информация о реверс-инжиниринге и декомпиляции (Android-приложение - JDK)

Я новичок в Android и я не знаю много о разработке программного обеспечения. Я хочу знать, что нужно сделать, чтобы усложнить декомпиляцию приложения. Я провел некоторое исследование по этому поводу и столкнулся с этим отладчиком JEB, который, кажется, может отслеживать некоторые вещи во время работы приложения. Тем не менее, я не знаю преимуществ его использования, так как я не получаю критических точек приложения для Android, которое отслеживается JEB. например:

введите описание изображения здесь

по-видимому, правая часть показывает локальные переменные. что х / хч означает для целого? или для строкового значения "secretKey" это значение строки серьезно? если это так, то все переменные в моем коде находятся в опасности!!!?? Я думаю, что, возможно, одна из попыток состоит в том, чтобы сделать много поддельных переменных в коде, чтобы реальные не могли быть легко видны. Имеет ли это смысл? И есть ли другие утечки, которые я должен попытаться предотвратить, например, об этом JEB? Proguard имеет какое-либо отношение к этому? Как я уже сказал, я не очень разбираюсь в soft-eng, и я не понял, что на самом деле делает proguard.

И еще одна вещь, которую я видел, это https://ibotpeaches.github.io/Apktool. Как сделать его более запутанным для такого инструмента?

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

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

2 ответа

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

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

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

Вы можете защитить свой код с помощью некоторого мощного инструмента обфускатора, такого как: Bg + Anti Decompile / Reverse Java. У него есть много вариантов защиты:

  • Скрыть строковое значение (полезно, когда вы храните конфиденциальную информацию в исходном коде Java, например: "Hello world" ->ߤª)
  • Запутывать с помощью символов Юникода
  • Скрыть имя пакета
  • Добавьте поддельный код, чтобы перехватить инструменты декомпилятора
  • Проверьте строку ресурса (полезно, когда кто-то пытается изменить ресурсы вашего APK)
  • ....
Другие вопросы по тегам