0x06-Mobile

Android背景介绍

Android与JAVA的关系

  • JAVA基于堆栈、Dalvik基于寄存器
  • 二进制代码比虚拟机执行更快
  • ART使用了AOT,提前将应用编译为二进制代码。

用C++也可以写Android且更好。

必须要用开发者的密钥进行签名

  • Jarsigner
  • 用户可自行生成密钥库

漏洞类型:

  • 应用漏洞 vs 系统漏洞
  • Java漏洞 vs Native漏洞
  • 内核漏洞、HAL漏洞、Service Lib漏洞、Framework漏洞、应用层漏洞

思考方向:

  • 攻击面
  • 用户输入->应用->Framework->Service/Lib->HAL->内核

漏洞挖掘方法:

  • Fuzz
  • 人眼看
  • 符号执行

Android漏洞利用

调试

  • IDA Pro
  • GDB
  • ……

Hook

  • Xposed
  • Frida
  • ……

应用层漏洞

保护机制:Canary、ASLR、DEP

  • HeadSpray
  • 信息泄露漏洞
  • ROP

逻辑代码保护与逆向技术对抗:

  1. 编译与反编译
  2. 加壳与脱壳
  3. 原生代码混淆与解混淆
  4. 隐藏于取证

Java层:

  • Java->jvm字节码->dalvik字节码(javac,dx) – DEX文件->smali(baksmali)
  • DEX文件->smali,伪java(jeb等)
  • DEX文件->Java字节码(dex2jar等)
  • Java字节码->伪java(jd-gui,enigma等) Native层:

  • C/C++ -> ELF(gcc g++)
  • ELF->ARM汇编(IDA,objdump/readelf等) – 反编译为伪C/C++代码(IDA等)

针对特定加固方案的特殊对抗方案

  • 钩子技术(Hook)
    • 基于Xposed的ZJDroid等
  • Dump内存重建DEX
    • 需要较多手动分析

基于修改Android 运行时的通用加固对抗方案

  • Android系统本身并不支持加固
  • Android运行时(Runtime)收到的是正确的逻辑
  • DexHunter/AppSpear,可对抗已知所有加固平台

DexHunter

– 类第一次加载时,遍历所有DEX类,加载并初始化; – 通过内存中数据结构定位需要获取的程序逻辑; – 获取程序逻辑并保存; – 改正并重建整个DEX文件;

Appspear

– 监控JNI调用等加固关键指令,正确程序已释放之后 – 查找DEX文件的DDS逆向重建DEX文件 – 收集并打包其他信息

原生代码混淆

  1. C/C++源码 -> 混淆后的ELF 混淆工具
    • LLVM-Obfuscator(strong.codes)
    • CXX-Obfuscator等 混淆技术
    • 指令替换
    • 伪造控制流
    • 扁平化控制流 – 字符串混淆

题目解析

  • 简单逆向类(LoopAndLoop,Timer等)
    • 直接用反编译工具看懂逻辑即可
    • 有时候需要重打包一下
  • 加壳(Jumble等)
    • 直接逆吧。。把逻辑看懂
  • 混淆(Steady等) – 硬逆
    • 由于flag取值空间小,可被直接爆破 隐藏、取证(未出现)

转载请注明:碎雪的小屋 » 0x06-Mobile

Show Disqus Comments

Search

    Table of Contents