当前位置: 代码迷 >> java >> Android Studio 中有什么方法可以使我们的应用程序具有防篡改功能?
  详细解决方案

Android Studio 中有什么方法可以使我们的应用程序具有防篡改功能?

热度:79   发布时间:2023-08-04 09:12:02.0

我从 Android Studio (Java) 开发了一个 android 应用程序,其中包含 Admob (Google) 广告。

我担心的是,任何下载我的应用程序的用户都可以通过使用像 Lucky Patcher 这样的 mod 或通过使用 ShowJava 之类的应用程序打开它来编辑我的 APK 来轻松禁用所有广告。

如何识别我们的应用程序是否被篡改或通过删除广告等更改内容被非法使用?

如何识别我们的应用程序是否被篡改或通过删除广告等更改内容被非法使用?

是的,它存在并称为移动应用证明,仅适用于与您控制的 API 服务器通信的移动应用。

在我们继续之前,我想澄清一下WHOWHAT正在访问 API 服务器之间的区别。

谁和什么正在访问 API 服务器

WHO是移动应用程序的用户,您可以通过多种方式对其进行身份验证、授权和识别,例如使用 OpenID 或 OAUTH2 流。

现在,你需要一种方法来确定哪些是您调用API服务器和这里的事情变得比大多数开发人员可能会觉得更靠谱。 该是什么发出请求到服务器API的东西,是不是真的你真正的移动应用程序或者是一个机器人,自动化脚本或攻击者手动打探你的API服务器就像邮差的工具吗?

确定开发人员倾向于求助于 API 密钥的原因是什么,通常他们在移动应用程序的代码中进行硬编码,有些人会加倍努力并在移动应用程序中在运行时计算它,从而成为一个动态的秘密反对前一种方法,即嵌入代码中的静态秘密。

移动应用认证

使用移动应用程序认证解决方案将使API服务器才知道什么是发送请求,因此允许而拒绝来自不安全来源的所有其他请求从一个真正的移动应用程序只响应请求。

我担心的是,任何下载我的应用程序的用户都可以通过使用像 Lucky Patcher 这样的 mod 或通过使用 ShowJava 之类的应用程序打开它来编辑我的 APK 来轻松禁用所有广告。

移动应用证明服务的作用是在运行时通过在后台运行 SDK 来保证您的移动应用没有被篡改或没有在有根设备中运行,该 SDK 将与在云中运行的服务进行通信以证明移动应用程序和设备的完整性正在运行。 在这里您将获得针对 LuckyPatcher 和 ShowJava 应用程序的保护,一旦它们篡改了您的原始 apk,该应用程序将不再通过云服务的完整性检查,从而允许您的 API 服务器拒绝来自被篡改的移动应用程序的请求.

成功证明移动应用程序完整性后,会发布一个短期存在的 JWT 令牌,并使用只有 API 服务器和云中的移动应用程序证明服务知道的秘密进行签名。 如果移动应用认证失败,JWT 令牌会使用 API 服务器不知道的秘密进行签名。

现在,应用程序必须随每个 API 调用发送请求标头中的 JWT 令牌。 这将允许 API 服务器仅在可以验证 JWT 令牌中的签名和到期时间时才提供请求,并在验证失败时拒绝它们。

一旦移动应用程序认证服务使用的秘密不被移动应用程序知道,即使应用程序被篡改、在有根设备中运行或通过连接进行通信,也无法在运行时对其进行逆向工程。中间人攻击的目标。

因此,该解决方案适用于没有误报的阳性检测模型,因此不会阻止合法用户同时阻止坏人。

移动应用证明服务已经作为的 SAAS 解决方案存在(我在这里工作),它为多个平台提供 SDK,包括 iOS、Android、React Native 等。 集成还需要对 API 服务器代码进行少量检查,以验证云服务发布的 JWT 令牌。 此检查对于 API 服务器能够决定提供哪些请求以及拒绝哪些请求是必要的。

  相关解决方案