• 安卓常见漏洞有,APK破解、不安全的用户数据存储、任意备份漏洞、不安全的数据传输、不安全的加密算法、组件导出拒绝服务漏洞等,我们这次主要研究的是apk破解
  • APK的破解主要有apk篡改(二次打包与重签名)、反编译(dex反编译、so反编译
    )、动态调试(java层动态调试、native层动态调试)、动态注入(java层动态注入、native层态注入)

一、APK篡改

  • 二次打包、重签名

二次打包(缺少自身文件完整性校验)

  • Android应用在编译后会将其代码、资源文件、配置文件打包成APK文件,APK文件的格式为zip包,任何人均可通过解压的方式获取其内部文件。如果不对内部文件进行完整性校验,攻击者可能会对APK包中的资源文件、代码文件进行篡改(插入恶意代码、木马、后门、广告等),二次打包和重新签名并且发布,并使用钓鱼的方式对终端用户进行攻击

重签名(缺少自身签名完整性校验)

  • Android系统使用JAR包的签名机制对APK进行完整性保护,确保APK在不安全的网络传输时的完整性得到保护。但Android系统没有对数字签名的颁发者进行管理,任何人都可以生成数字签名,并使用该签名对APK包进行重新签名。如果App本身不对自身的签名来源进行有效的完整性检查,攻击者可以篡改应用(插入恶意代码、木马、后门、广告等),重新签名并且二次发布,导致应用程序完整性被破坏

二、反编译

  • dex文件反编译、so文件反编译

dex文件反编译(dex缺少加密保护或加固强度不足)

  • dex文件缺少加密保护(没有壳)
  • dex文件加固强度不足(加了壳,但是不够坚固,可以脱壳)
  • App在发布的时候并没有对classes.dex文件进行保护。classes.dex是Android App的可执行文件,包含了编译后的Java代码的字节码。由于没有对该文件进行加密或加密不足,使用工具可以将字节码还原成Java代码。攻击者可以轻松的获取App客户端所有的业务逻辑代码,并发起其他攻击,如二次打包、植入恶意代码、WebApi逆向等。

so文件反编译(so文件未加密)

  • App在发布的时候没有对核心的SO库进行加密、加壳处理。SO中包含了编译后的机器码,由于没有对该文件进行加密,使用工具可以将字节码还原成类C代码,漏洞的危害是,核心代码未被保护,核心代码泄露。

三、动态调试

  • 动态调试:通常利用程序语言提供的调试功能或专门的调试工具来分析程序的动态行为。一般程序语言和工具提供的调试功能有检查主存和寄存器。设置断点,即当执行到特定语句或改变特定变量的值时,程序停止执行,以便分析程序此时的状态

分类

  • java层动态调试、native层动态调试

调试工具

  • 一般使用ida和gbd进行动态调试

四、动态注入

  • 动态注入:本质上还是调试技术,就是通过代码实现自动化调试并达到加载自定义动态链接库的过程。通过动态注入可以实现:查看变量值、修改变量值、跟踪进程跳转以及查看进程调用堆栈

分类

  • java层动态注入、native层态注入

调试工具

  • 一般会使用xposed和frida进行动态注入