深挖 APK 加固之动态替换 Application
2023-10-10 12:52:02
前情提要:上一篇我们讲了 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。
- 安装 apktool:
brew install apktool
- 反编译 APK:
apktool d your.apk
- 修改 AndroidManifest.xml:
找到 AndroidManifest.xml 文件,然后将 ProxyApplication 替换成你的 Application。
- 重新打包 APK:
apktool b your
- 重新签名 APK:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your.keystore your.apk your.alias
- 安装 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。