Я занимаюсь разработкой приложения для обработки платежей для Android и хочу запретить хакеру доступ к любым ресурсам, ресурсам или исходному коду из файла APK .
Если кто-то изменяет расширение .apk на .zip, то он может разархивировать его и легко получить доступ ко всем ресурсам и активам приложения, а с помощью dex2jar и декомпилятора Java они также могут получить доступ к исходному коду. Обратный инжиниринг Android APK-файла очень легко - более подробно см. Вопрос переполнения стека. Обратный инжиниринг из APK-файла в проект .
Я использовал инструмент Proguard, поставляемый с Android SDK. Когда я выполняю обратный инжиниринг APK-файла, созданного с использованием подписанного хранилища ключей и Proguard, я получаю запутанный код.
Однако имена компонентов Android остаются неизменными, а некоторый код, например значения ключей, используемые в приложении, остается неизменным. Согласно документации Proguard, инструмент не может запутать компоненты, указанные в файле Manifest.
Теперь мои вопросы:
- Как я могу полностью предотвратить реверс-инжиниринг Android APK? Это возможно?
- Как я могу защитить все ресурсы, ресурсы и исходный код приложения, чтобы хакеры никак не могли взломать APK-файл?
- Есть ли способ сделать взлом более жестким или даже невозможным? Что еще я могу сделать, чтобы защитить исходный код в моем файле APK?
источник
Ответы:
AFAIK, нет никакого уловки для полного избежания обратного проектирования.
И также очень хорошо сказано @inazaruk: что бы вы ни делали со своим кодом, потенциальный злоумышленник может изменить его любым способом, который он или она посчитает возможным . Вы в принципе не можете защитить свое приложение от изменения. И любая защита, которую вы вставите, может быть отключена / удалена.
Вы можете делать разные трюки, чтобы сделать хакерство сложнее. Например, используйте обфускацию (если это Java-код). Это обычно значительно замедляет реверс-инжиниринг.
Как все говорят, и, как вы, наверное, знаете, нет 100% безопасности. Но Google должен начать с Android, и это ProGuard. Если у вас есть возможность включения общих библиотек , вы можете включить необходимый код в C ++ для проверки размеров файлов, интеграции и т. Д. Если вам нужно добавить внешнюю собственную библиотеку в папку библиотеки APK на каждой сборке, то вы можете использовать ее по предложению ниже.
Поместите библиотеку в собственный путь к библиотеке, который по умолчанию равен "libs" в папке вашего проекта. Если вы создали собственный код для цели armeabi, поместите его в libs / armeabi . Если он был собран с помощью armeabi-v7a, поместите его в libs / armeabi-v7a.
источник
AFAIK, вы не можете защитить файлы в каталоге / res больше, чем они защищены прямо сейчас.
Тем не менее, есть шаги, которые вы можете предпринять, чтобы защитить свой исходный код, или, по крайней мере, то, что он делает, если не все.
10000
монеты. Вместо10000
непосредственного сохранения сохраните его, используя алгоритм, подобный((currency*2)+1)/13
. Таким образом, вместо того10000
, чтобы сохранить1538.53846154
в SharedPreferences. Тем не менее, приведенный выше пример не идеален, и вам придется работать, чтобы придумать уравнение, которое не будет терять валюту из-за ошибок округления и т. Д.$200
. Вместо того, чтобы отправлять необработанное$200
значение на сервер, отправьте серию меньших предопределенных значений, которые в сумме складываются$200
. Например, на вашем сервере есть файл или таблица, в которой слова сравниваются со значениями. Так давайте скажем , чтоCharlie
соответствует к$47
иJohn
к$3
. Таким образом, вместо отправки$200
, вы можете отправитьCharlie
четыре раза иJohn
четыре раза. На сервере интерпретируйте их значение и сложите их. Это не позволяет хакеру отправлять произвольные значения на ваш сервер, так как они не знают, какое слово соответствует какому значению. В качестве дополнительной меры безопасности вы можете использовать для этого уравнение, аналогичное пункту 3, и менять ключевые слова каждыеn
несколько дней.В общем, нет способа защитить ваше приложение на 100%. Вы можете сделать это сложнее, но не невозможно. Ваш веб-сервер может быть скомпрометирован, хакер может выяснить ваши ключевые слова, отслеживая несколько транзакций и ключевые слова, которые вы отправляете для него, хакер может тщательно изучить исходный код и выяснить, какой код является фиктивным.
Вы можете только дать отпор, но никогда не выиграть.
источник
.so
файлов не означает, что я не могу прочитать сборку :) Большинство из них попадают в одну ловушку, просто запутывая, вместо того, чтобы должным образом защитить себя. Обфускация работает только в том случае, если злоумышленнику не стоит тратить время на ее прохождение, поэтому, если вы создадите что-то на этих методах, вам лучше надеяться, что они не станут популярными, в противном случае вы облажались, потому что внезапно ваша кодовая база не поддерживается, и это нужны огромные изменения.Ни в одной точке истории вычислений не было возможности предотвратить реинжиниринг программного обеспечения, когда вы предоставляете рабочую копию его злоумышленнику. Кроме того, по всей вероятности, это никогда не будет возможно .
С этим пониманием, есть очевидное решение: не передавайте свои секреты злоумышленнику. Хотя вы не можете защитить содержимое вашего APK, вы можете защитить то, что не распространяете. Как правило, это программное обеспечение на стороне сервера, используемое для таких вещей, как активация, платежи, применение правил и другие сочные фрагменты кода. Вы можете защитить ценные активы, не распределяя их в вашем APK. Вместо этого настройте сервер, который отвечает на запросы от вашего приложения, «использует» ресурсы (что бы это ни значило) и затем отправляет результат обратно в приложение. Если эта модель не подходит для активов, которые вы имеете в виду, вы можете пересмотреть свою стратегию.
Кроме того, если вашей основной целью является предотвращение пиратства приложений : даже не беспокойтесь. Вы уже потратили больше времени и денег на эту проблему, чем любая мера по борьбе с пиратством, которая когда-либо могла бы вас спасти. Возврат инвестиций для решения этой проблемы настолько низок, что не имеет смысла даже думать об этом.
источник
Основы безопасности информационных технологий основаны на этих трех фундаментальных принципах; единственный действительно безопасный компьютер - это тот, который заперт в сейфе внутри клетки Фаррадея, внутри стальной клетки. Есть компьютеры, которые проводят большую часть своего срока службы именно в этом состоянии; один раз в год (или реже) они генерируют закрытые ключи для доверенных корневых центров сертификации (перед множеством свидетелей с камерами, фиксирующими каждый дюйм помещения, в котором они находятся).
В настоящее время большинство компьютеров не используются в этих типах сред; они физически находятся на улице, подключены к Интернету по беспроводному радиоканалу. Короче говоря, они уязвимы, как и их программное обеспечение. Поэтому им нельзя доверять. Есть определенные вещи, которые компьютеры и их программное обеспечение должны знать или делать для того, чтобы быть полезными, но необходимо позаботиться о том, чтобы они никогда не знали или не делали достаточно, чтобы нанести ущерб (по крайней мере, не наносить непоправимый ущерб за пределы этой единственной машины). ).
Вы уже знали все это; Вот почему вы пытаетесь защитить код вашего приложения. Но в этом заключается первая проблема; инструменты запутывания могут сделать код беспорядком для человека, чтобы попытаться копаться, но программа все еще должна работать; это означает, что фактический логический поток приложения и данные, которые оно использует, не подвержены запутыванию. Учитывая немного упорства, злоумышленник может просто не запутывать код, и это даже не требуется в некоторых случаях, когда то, на что он смотрит, не может быть ничем иным, кроме того, что он ищет.
Вместо этого вы должны пытаться гарантировать, что злоумышленник не сможет ничего сделать с вашим кодом, независимо от того, насколько легко ему получить его четкую копию. Это означает, что нет жестко закодированных секретов, потому что эти секреты не являются секретными, как только код покидает здание, в котором вы его разработали.
Эти значения ключей, которые вы жестко запрограммировали, должны быть полностью удалены из исходного кода приложения. Вместо этого они должны быть в одном из трех мест; энергозависимая память на устройстве, которую злоумышленнику труднее (но все же не невозможно) получить автономную копию; постоянно на кластере серверов, к которому вы управляете доступом железным кулаком; или во втором хранилище данных, не связанном с вашим устройством или серверами, например, физической картой или в памяти вашего пользователя (это означает, что он в конечном итоге будет находиться в энергозависимой памяти, но это не должно длиться долго).
Рассмотрим следующую схему. Пользователь вводит свои учетные данные для приложения из памяти в устройство. К сожалению, вы должны верить, что устройство пользователя еще не взломано кейлоггером или трояном; лучшее, что вы можете сделать в этом отношении, - это реализовать многофакторную защиту, запоминая трудно подделываемую информацию об устройствах, которые использовал пользователь (MAC / IP, IMEI и т. д.), и предоставив по крайней мере один дополнительный канал с помощью какую попытку входа в систему на незнакомом устройстве можно проверить.
После ввода учетных данных клиентская программа обфускацирует их (используя безопасный хэш), а учетные данные в виде простого текста отбрасывают; они послужили своей цели. Обфусцированные учетные данные отправляются по защищенному каналу на сервер, прошедший проверку подлинности сертификата, который снова их хеширует для получения данных, используемых для проверки правильности входа в систему. Таким образом, клиент никогда не знает, что на самом деле сравнивается со значением базы данных, сервер приложений никогда не знает учетные данные в виде простого текста, которые он получает для проверки, сервер данных никогда не знает, как создаются данные, которые он хранит для проверки, и человек в середина видит только тарабарщину, даже если безопасный канал был взломан.
После проверки сервер передает токен по каналу. Токен полезен только в безопасном сеансе, состоит из случайного шума или зашифрованной (и, следовательно, проверяемой) копии идентификаторов сеанса, и клиентское приложение должно отправить этот токен по тому же каналу на сервер как часть любого запроса. сделать что-то. Клиентское приложение будет делать это много раз, потому что оно не может делать ничего, включая деньги, конфиденциальные данные или что-либо еще, что может повредить само по себе; вместо этого он должен попросить сервер выполнить эту задачу. Клиентское приложение никогда не будет записывать какую-либо конфиденциальную информацию в постоянную память на самом устройстве, по крайней мере, не в виде простого текста; клиент может запросить у сервера по безопасному каналу симметричный ключ для шифрования любых локальных данных, которые сервер запомнит; в более позднем сеансе клиент может запросить у сервера тот же ключ для расшифровки данных для использования в энергозависимой памяти. Эти данные тоже не будут единственной копией; все, что хранит клиент, также должно быть в той или иной форме передано на сервер.
Очевидно, что это делает ваше приложение сильно зависимым от доступа в Интернет; клиентское устройство не может выполнять какие-либо из своих основных функций без надлежащего подключения и аутентификации на сервере. Не отличается от Facebook, правда.
Теперь компьютер, который хочет злоумышленник, - это ваш сервер, потому что именно он, а не клиентское приложение / устройство - это то, что может принести ему деньги или причинить другим людям боль от его удовольствия. Это нормально; вы получаете гораздо больше денег, затрачивая деньги и усилия на защиту сервера, чем на защиту всех клиентов. Сервер может находиться за всеми видами брандмауэров и другой электронной безопасности, а также может быть физически защищен за стальным, бетонным, доступом с помощью карточек / штырьков и 24-часовым видеонаблюдением. Ваш злоумышленник должен быть действительно изощренным, чтобы получить любой доступ к серверу напрямую, и вы должны (должны) знать об этом немедленно.
Лучшее, что может сделать злоумышленник, - это украсть телефон и учетные данные пользователя и войти на сервер с ограниченными правами клиента. Если это произойдет, как если бы вы потеряли кредитную карту, законный пользователь должен получить указание позвонить по номеру 800 (желательно, чтобы его было легко запомнить, а не на оборотной стороне карты, которую он носил бы в своем кошельке, кошельке или портфеле, который может быть украденный вместе с мобильным устройством) с любого телефона, к которому у них есть доступ, который напрямую связывает их с вашей службой поддержки клиентов. Они заявляют, что их телефон был украден, предоставляют некоторый базовый уникальный идентификатор, а учетная запись заблокирована, все транзакции, которые злоумышленник, возможно, смог обработать, откатываются, и злоумышленник возвращается к исходной точке.
источник
Это невозможно
Когда кто-то меняет расширение .apk на .zip, то после разархивирования кто-то может легко получить все ресурсы (кроме Manifest.xml ), но с помощью APKtool можно также получить реальное содержимое файла манифеста. Опять нет.
Опять же нет, но вы можете предотвратить до некоторого уровня, то есть
Даже при том
Smali
, что люди могут играть с вашим кодом. В общем, это НЕ ВОЗМОЖНО.источник
100% -ное предотвращение реверс-инжиниринга Android APK невозможно, но вы можете использовать эти способы, чтобы избежать извлечения дополнительных данных, таких как исходный код, ресурсы из вашего APK и ресурсы:
Используйте ProGuard, чтобы запутать код приложения
Используйте NDK, используя C и C ++, чтобы поместить ядро приложения и защитить часть кода в
.so
файлыЧтобы защитить ресурсы, не включайте все важные ресурсы в папку ресурсов с APK. Загрузите эти ресурсы во время первого запуска приложения.
источник
Разработчики могут предпринять следующие шаги, чтобы предотвратить кражу APK,
самый простой способ - это использовать такие инструменты, как
ProGuard
запутывание их кода, но до сих пор было довольно сложно полностью запретить кому-либо декомпилировать приложение.Также я слышал об инструменте HoseDex2Jar . Он останавливается
Dex2Jar
на вставке безвредного кода в Android APK, который сбивает с толку, отключаетDex2Jar
и защищает код от декомпиляции. Это может как-то помешать хакерам декомпилировать APK в читаемый код Java.Используйте некоторое приложение на стороне сервера для связи с приложением только тогда, когда это необходимо. Это может помочь предотвратить важные данные.
Вообще, вы не можете полностью защитить свой код от потенциальных хакеров. Каким-то образом вы могли бы усложнить и немного расстроить их задачу декомпиляции вашего кода. Один из наиболее эффективных способов - это писать в нативном коде (C / C ++) и хранить его как скомпилированные библиотеки.
источник
Вот несколько способов, которые вы можете попробовать:
источник
Невозможно
Невозможно
Сложнее - возможно, но на самом деле это будет сложнее, в основном, для обычного пользователя, который просто ищет гаджеты по взлому. Если кто-то действительно хочет взломать ваше приложение - оно будет взломано, рано или поздно.
источник
Это невозможно
Разработчики могут предпринять такие шаги, как использование таких инструментов, как ProGuard, для запутывания своего кода, но до сих пор было довольно сложно полностью предотвратить компиляцию приложения.
Это действительно отличный инструмент, и он может увеличить сложность «перевернуть» ваш код, в то же время уменьшая его площадь.
Интегрированная поддержка ProGuard: ProGuard теперь поставляется с SDK Tools. Теперь разработчики могут запутывать свой код как интегрированную часть сборки релиза.
Во время исследования я узнал о HoseDex2Jar . Этот инструмент защитит ваш код от декомпиляции, но, кажется, невозможно полностью защитить ваш код.
Некоторые полезные ссылки вы можете ссылаться на них.
источник
Основной вопрос здесь заключается в том, можно ли декомпилировать файлы dex, и ответ на них может быть «своего рода». Есть такие дизассемблеры, как dedexer и smali .
ProGuard, правильно настроенный, запутает ваш код. DexGuard, который является коммерческой расширенной версией ProGuard, может помочь немного больше. Тем не менее, ваш код все еще может быть преобразован в smali, и разработчики с опытом обратного проектирования смогут выяснить, что вы делаете из smali.
Может быть, выбрать хорошую лицензию и обеспечить соблюдение закона в лучшем виде.
источник
Ваш клиент должен нанять кого-то, кто знает, что он делает, кто может принимать правильные решения и может наставлять вас.
Говорить выше о том, что у вас есть какая-то возможность изменять систему обработки транзакций на бэкэнде, абсурдно - нельзя допускать таких архитектурных изменений, поэтому не ожидайте, что сможете это сделать.
Мое обоснование этого:
Поскольку ваш домен обрабатывает платежи, можно предположить, что PCI DSS и / или PA DSS (и потенциальный закон штата / федеральный закон) будут важны для вашего бизнеса - чтобы соответствовать требованиям, вы должны показать, что вы в безопасности. Чтобы быть неуверенным, выясните (через тестирование), что вы не защищены, затем исправьте, повторно протестируйте и так далее, пока безопасность не будет проверена на подходящем уровне = дорогой, медленный, рискованный путь к успеху. Чтобы поступить правильно, тщательно продумайте все заранее, привлеките опытный талант к работе, развивайтесь безопасным образом, затем тестируйте, исправляйте (меньше) и так далее (меньше), пока безопасность не будет проверена на подходящем уровне = недорого, быстро, путь к успеху с низким уровнем риска.
источник
Как человек, который много работал на платежных платформах, включая одно мобильное платежное приложение (MyCheck), я бы сказал, что вам нужно делегировать это поведение на сервер, не нужно хранить имя пользователя или пароль для обработчика платежей (какой бы он ни был) или это жестко закодировано в мобильном приложении, это последнее, что вы хотите, потому что источник может быть понят, даже если вы запутываете код.
Кроме того, вам не следует хранить кредитные карты или платежные токены в приложении, все должно быть опять-таки делегировано на созданную вами службу, это также позволит вам в дальнейшем, легче соответствовать PCI, и компании, выпустившие кредитные карты, выиграли не дышите на шею (как они сделали для нас).
источник
Другие ответы здесь верны. Я просто хочу предоставить другой вариант.
Для определенных функций, которые вы считаете важными, вы можете разместить в своем приложении элемент управления WebView . Функциональность будет затем реализована на вашем веб-сервере. Это будет выглядеть так, как будто оно работает в вашем приложении.
источник
Если мы хотим сделать реверс-инжиниринг (почти) невозможным, мы можем поместить приложение в микросхему с высокой степенью защиты от несанкционированного доступа, которая выполняет все важные элементы внутри себя и взаимодействует с некоторым протоколом, чтобы сделать возможным управление GUI на хосте. Даже устойчивые к взлому чипы не являются на 100% стойкими к трещинам; они просто устанавливают планку намного выше, чем программные методы. Конечно, это неудобно: приложению требуется небольшая USB-бородавка, которая удерживает чип для вставки в устройство.
Вопрос не раскрывает мотивацию желания ревниво защищать это приложение.
Если цель состоит в том, чтобы повысить безопасность метода оплаты путем сокрытия любых недостатков безопасности, которые может иметь приложение (известные или иные), оно полностью ошибочно. Чувствительные к безопасности биты на самом деле должны быть с открытым исходным кодом, если это возможно. Любой исследователь безопасности, который просматривает ваше приложение, должен как можно проще найти эти биты, тщательно изучить их работу и связаться с вами. Платежные приложения не должны содержать никаких встроенных сертификатов. То есть не должно быть серверных приложений, которые доверяют устройству просто потому, что оно имеет фиксированный сертификат с завода. Платежная транзакция должна быть сделана только на основании учетных данных пользователя с использованием правильно разработанного протокола сквозной аутентификации, который исключает доверие к приложению, платформе или сети и т. Д.
Если цель состоит в том, чтобы предотвратить клонирование, за исключением этого защищенного от взлома чипа, вы ничего не сможете сделать, чтобы защитить программу от повторного проектирования и копирования, чтобы кто-то включил совместимый метод оплаты в свое собственное приложение, предоставляя подняться до «неавторизованных клиентов». Есть способы усложнить разработку неавторизованных клиентов. Можно было бы создать контрольные суммы на основе снимков полного состояния программы: все переменные состояния для всего. GUI, логика, что угодно. Программа-клон не будет иметь точно такое же внутреннее состояние. Несомненно, это конечный автомат, который имеет аналогичные внешне видимые переходы состояний (что можно наблюдать по входам и выходам), но едва ли имеет одинаковое внутреннее состояние. Приложение сервера может опросить программу: каково ваше подробное состояние? (т.е. дайте мне контрольную сумму для всех ваших внутренних переменных состояния). Это можно сравнить с фиктивным клиентским кодом, который выполняется на сервере параллельно, проходя через переходы подлинного состояния. Сторонний клон должен будет повторить все соответствующие изменения состояния подлинной программы, чтобы дать правильные ответы, которые будут препятствовать ее развитию.
источник
Договорились с @Muhammad Saqib здесь: https://stackoverflow.com/a/46183706/2496464
И @Mumair дают хорошие стартовые шаги: https://stackoverflow.com/a/35411378/474330
Всегда безопасно предположить, что все, что вы распространяете на устройстве вашего пользователя, принадлежит пользователю. Легко и просто. Возможно, вы сможете использовать новейшие инструменты и процедуры для шифрования вашей интеллектуальной собственности, но нет способа помешать определенному человеку «изучить» вашу систему. И даже если текущая технология может затруднить получение нежелательного доступа, завтра может быть легкий путь или даже просто следующий час!
Таким образом, здесь приходит уравнение:
Даже в такой простой, как игровая экономика. (Особенно в играх! Там больше «искушенных» пользователей, и лазейки расползаются за секунды!)
Как мы можем оставаться в безопасности?
Большинство, если не все, наших систем обработки ключей (и, конечно, базы данных) расположены на стороне сервера. А между клиентом и сервером лежит зашифрованная связь, проверки и т. Д. Это идея тонкого клиента.
источник
Я предлагаю вам взглянуть на Защиту программных приложений от атак . Это коммерческий сервис, но компания моего друга воспользовалась этим, и они рады его использовать.
источник
APK схема подписи v2 в Android N
Класс PackageManager теперь поддерживает проверку приложений с использованием схемы подписи APK v2. Схема подписи APK v2 - это схема подписи всего файла, которая значительно повышает скорость проверки и усиливает гарантии целостности, обнаруживая любые несанкционированные изменения в файлах APK.
Для обеспечения обратной совместимости APK должен быть подписан схемой подписи v1 (схема подписи JAR), прежде чем подписываться схемой подписи v2. При использовании схемы подписи v2 проверка завершается неудачно, если вы подписываете APK дополнительным сертификатом после подписания по схеме v2.
Поддержка схемы подписи APK v2 будет доступна позже в N Developer Preview.
http://developer.android.com/preview/api-overview.html#apk_signature_v2
источник
Нет никакого способа полностью избежать реверс-инжиниринга APK. Для защиты ресурсов приложения, ресурсов вы можете использовать шифрование.
источник
В принципе это невозможно. Это никогда не будет возможно. Однако есть надежда. Вы можете использовать обфускатор, чтобы сделать это так, что некоторые общие атаки намного сложнее осуществить, включая такие вещи, как:
a.a
)Я уверен, что есть и другие, но это основные. Я работаю в компании под названием PreEmptive Solutions на обфускаторе .NET . У них также есть Java-обфускатор, который работает для Android, который называется DashO .
Однако запутывание всегда идет с ценой. Примечательно, что производительность, как правило, хуже, и обычно требуется дополнительное время для релизов. Однако, если ваша интеллектуальная собственность чрезвычайно важна для вас, то она обычно того стоит.
В противном случае, ваш единственный выбор - сделать так, чтобы ваше Android-приложение просто передавалось на сервер, на котором размещена вся реальная логика вашего приложения. У этого есть своя доля проблем, потому что это означает, что пользователи должны быть подключены к Интернету, чтобы использовать ваше приложение.
Кроме того, не только Android имеет эту проблему. Это проблема в каждом магазине приложений. Это просто вопрос того, насколько сложно получить доступ к файлу пакета (например, я не верю, что это очень легко на iPhone, но все же возможно).
источник
Невозможно полностью избежать RE, но, сделав их внутренне более сложными, вы помешаете злоумышленникам увидеть четкую работу приложения, что может уменьшить количество векторов атак.
Если приложение обрабатывает высокочувствительные данные, существуют различные методы, которые могут усложнить обратный инжиниринг вашего кода. Одним из методов является использование C / C ++ для ограничения легких манипуляций во время выполнения злоумышленником. Существует множество библиотек C и C ++, которые очень развиты и легко интегрируются с Android-предложениями JNI. Злоумышленник должен сначала обойти ограничения отладки, чтобы атаковать приложение на низком уровне. Это добавляет дополнительную сложность атаке. Приложения Android должны иметь android: debuggable = ”false”, установленный в манифесте приложения, чтобы предотвратить простую манипуляцию во время выполнения злоумышленником или вредоносным ПО.
Проверка трассировки - приложение может определить, отслеживается ли оно в данный момент отладчиком или другим средством отладки. При отслеживании приложение может выполнить любое количество возможных действий ответа на атаку, таких как сброс ключей шифрования для защиты пользовательских данных, уведомление администратора сервера или ответы другого типа, пытаясь защитить себя. Это можно определить, проверив флаги состояния процесса или используя другие методы, такие как сравнение возвращаемого значения ptrace attach, проверка родительского процесса, отладчиков черного списка в списке процессов или сравнение временных меток в разных местах программы.
Оптимизации - чтобы скрыть сложные математические вычисления и другие типы сложной логики, использование оптимизаций компилятора может помочь запутать объектный код, так что злоумышленник не сможет его легко разобрать, что затруднит понимание злоумышленником конкретного кода. В Android этого проще достичь, используя встроенные библиотеки с NDK. Кроме того, использование Обфускатора LLVM или любого SDK защитника обеспечит лучшую запутывание машинного кода.
Удаление двоичных файлов - удаление собственных двоичных файлов - эффективный способ увеличить количество времени и уровень навыков, требуемых от злоумышленника, чтобы просмотреть структуру функций низкого уровня вашего приложения. При удалении двоичного файла таблица символов двоичного кода удаляется, так что злоумышленник не может легко отладить или перепроектировать приложение. Вы можете ссылаться на методы, используемые в системах GNU / Linux, такие как sstriping или использование UPX.
И, наконец, вы должны быть в курсе обфускации и таких инструментов, как ProGuard.
источник
Если ваше приложение настолько чувствительно, то вы должны рассмотреть часть обработки платежей на стороне сервера. Попробуйте изменить свои алгоритмы обработки платежей. Используйте приложение Android только для сбора и отображения информации о пользователе (например, об остатке на счете), а не для обработки платежей в кодах Java. Отправьте эту задачу на сервер, используя безопасный протокол SSL с зашифрованными параметрами. Создайте полностью зашифрованный и безопасный API для связи с вашим сервером.
Конечно, он также может быть взломан и не имеет ничего общего с защитой исходных кодов, но считается, что это еще один уровень безопасности, чтобы хакерам было сложнее обмануть ваше приложение.
источник
Разве чипы TPM (Trusted Platform Module) не предназначены для управления защищенным кодом для вас? Они становятся обычным явлением на ПК (особенно на Apple) и, возможно, уже существуют в современных чипах для смартфонов. К сожалению, пока нет API для ОС, чтобы использовать его. Надеюсь, Android добавит поддержку этого дня. Это также ключ к чистому контенту DRM (над которым Google работает для WebM).
источник
webview
защищенный ресурс + код на сервере.Множественные подходы; это очевидно, что вы должны жертвовать производительностью и безопасностью
источник
Я вижу этот хороший ответ в этой теме. В дополнение к этому вы можете использовать Facebook
redex
для оптимизации кода. Redex работает на.dex
уровне, где Proguard работает как.class
уровень.источник
100% безопасность исходного кода и ресурсов в Android невозможна. Но вы можете сделать немного сложным для реинженера. Вы можете найти более подробную информацию об этом в следующих ссылках:
Посетите раздел Безопасное сохранение постоянных значений и https://www.agicent.com/blog/mobile-app-security-best-practices/
источник
Файл APK защищен алгоритмом SHA-1 . Вы можете увидеть некоторые файлы в папке META-INF на APK. Если вы извлечете какой-либо файл APK и измените его содержимое, а затем снова заархивируете его, и при запуске этого нового файла APK на компьютере Android он не будет работать, поскольку хэши SHA-1 никогда не будут совпадать.
источник
Хотя я согласен, что нет 100% -го решения, которое защитит ваш код, v3 HoseDex2Jar теперь работает, если вы хотите попробовать.
источник
Инструмент: использование Proguard в вашем приложении может быть ограничено для обратного проектирования вашего приложения
источник
Я знал, что некоторые банковские приложения используют DexGuard, который обеспечивает запутывание, а также шифрование классов, строк, ресурсов, файлов ресурсов и собственных библиотек.
https://www.guardsquare.com/en/products/dexguard
источник