Android APK 中的防篡改技术

逆向工程 安卓 爪哇 apk 达尔维克
2021-06-22 16:34:01

我正在对一个 Android 应用程序进行逆向工程,它具有某种防篡改保护。问题是我在 smali 文件中的任何地方都找不到它。

即使我只是对直接从 Play 商店下载的官方 APK 重新签名,它也会检测到它已被篡改,因此它必须检查文件大小或签名。我已经为诸如“签名”和“getPackageInfo”之类的东西搜索了所有 smali 文件,试图找到它从哪里获取签名,但我找不到任何东西。

还有哪些其他方法可以确定 APK 是否已重新签名,即使没有其他任何更改?它没有使用 SafetyNet。

1个回答

最好的办法是开始通读代码并查看它所做的一切。它几乎可以肯定正在检查签名,只是您的搜索未命中。这可能是因为它使用了你没有搜索过的 API,或者因为代码被混淆了,或者因为你搞砸了搜索。请注意,有很多 API 可用于获取有关应用程序的信息。例如,它可以使用 JarFile getResource() API。最可靠的方法是直接阅读代码。

也不要忘记查看本机代码,如果有的话!您可以通过查看 libs 文件夹来检查应用程序是否使用本机代码。不过,这有点遥不可及,因为大多数程序员都懒得编写本机代码。如果他们在本机代码中进行检查,则可能是现成的打包器/混淆器。

为了完整起见,我应该提到一个应用程序的几个功能取决于其签名。例如,它可能使用基于签名的权限或共享用户 ID,如果您退出应用程序,它们中的每一个都会中断。我从来没有听说过这些被用于篡改检测。