返回

深挖 APK 加固之动态替换 Application

Android

前情提要:上一篇我们讲了 dex 加密,还没看过的先去了解下 dex 怎么加密,这篇就来带大家完成剩下的工作,dex 解密完成之后需要把代理 ProxyApplication 给删除掉,然后把我们自己的 Application 给加回去。

想要替换 ProxyApplication,我们首先需要找到它。在 AndroidManifest.xml 中,我们可以看到 ProxyApplication 被声明为应用程序的入口:

<manifest ...>
    <application ... android:name=".ProxyApplication" ...>
        ...
    </application>
</manifest>

要想替换它,我们可以修改 AndroidManifest.xml,将 ProxyApplication 替换成我们的 Application:

<manifest ...>
    <application ... android:name=".YourApplication" ...>
        ...
    </application>
</manifest>

问题是,AndroidManifest.xml 是一个二进制文件,不能直接用文本编辑器修改。我们需要用工具来反编译 APK,然后修改 AndroidManifest.xml,然后再重新打包 APK。

有很多工具可以反编译 APK,比如 apktool 和 dex2jar。本文中,我们将使用 apktool。

  1. 安装 apktool:
brew install apktool
  1. 反编译 APK:
apktool d your.apk
  1. 修改 AndroidManifest.xml:

找到 AndroidManifest.xml 文件,然后将 ProxyApplication 替换成你的 Application。

  1. 重新打包 APK:
apktool b your
  1. 重新签名 APK:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your.keystore your.apk your.alias
  1. 安装 APK:
adb install your.apk

至此,我们就成功地替换了 ProxyApplication。现在,我们的应用程序就可以正常运行了。

常见问题

  • 为什么需要替换 ProxyApplication?

ProxyApplication 是加固工具用来欺骗 Android 系统的。它会拦截系统对应用程序的调用,然后把这些调用转发到真正的应用程序。这样,加固工具就可以在应用程序运行时做一些事情,比如收集数据、植入广告等。

  • 如何知道应用程序是否被加固了?

有很多方法可以判断应用程序是否被加固了。一种方法是查看应用程序的 AndroidManifest.xml 文件。如果应用程序的 AndroidManifest.xml 文件中声明了 ProxyApplication,那么这个应用程序很可能被加固了。

  • 如何替换其他组件?

除了 Application 之外,加固工具还可以替换其他组件,比如 Activity、Service 和 BroadcastReceiver。替换这些组件的方法与替换 Application 的方法类似。

示例代码

public class YourApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        // Do your own stuff here.
    }
}

只需将 YourApplication 替换成你自己的 Application 类即可。

总结

动态替换 Application 是一种常见的 APK 加固技术。通过这种技术,加固工具可以欺骗 Android 系统,在应用程序运行时做一些事情。我们可以通过反编译 APK,然后修改 AndroidManifest.xml 文件,再重新打包 APK 来替换 ProxyApplication。