【移动安全基础篇】——33、Android加壳原理

1. 加密目标
隐藏原始 dex 数据,保护程序。

2. 实现步骤
1)  反编译原始 apk 文件(不反编译 dex 文件)
         ShakaApktool d –s xx.apk –o xx
2)  加密原始 dex 文件
         提取反编译后的原始 dex 文件,进行加密,保存到 assests 目录中。
3)  添加 ProxyApplication
         添加壳的入口点
4)  添加 so 文件(可选)
         添加解壳的 so 文件
5)  AndroidManifest.xml 修改
        在 application 标签中添加 ProxyApplication 的入口点,如果程序本身就重载了Application,则需要把原始的 Application 保存起来。
6)  回编译 apk 文件
          ShakaApktool b xx –o xx.apk

3. 相关知识点
1) 类装载器

2) Android apk 加载与运行

makeApplication:创建 Application,对 Application 进行重新加载如果一个程序本来有 Application 数据,然而壳的代码把数据覆盖掉了,那么需要手动调用 makeApplication 来完成 Application 的创建

getClassLoader:对 classLoader 进行加载,当本身的 classLoader 调用该方法创建完之后,需要把创建后的 classLoader 值通过反射的方法把 mClassLoader 域覆盖掉,从而达到覆盖 dex 文件数据的效果。

获取完 classLoader 之后开始创建数据加壳时需要对程序本身的 Application 方法通过反射方法来覆盖掉。

总会有不期而遇的温暖. 和生生不息的希望。
原文地址:https://www.cnblogs.com/devi1/p/13486413.html