安卓逆向_day1

安卓

Android整体架构

  • Android Runtime
    • 提供了JAVA编程语言核心库的大多数功能
    • 应用程序都对应独立的虚拟机
  • 硬件抽象层
    • 把Android framework与Linux kernel隔开
    • 保护厂商利益
      • Linux kernel遵循GPL协议
  • 驱动分为user space kernel space
  • 基于Linux的用户隔离
    • Linux:用户被分配自己的UID,程序可以指定UID运行
    • Android:每个程序有自己的UID,UID用以区分应用程序
    • 应用有自己的数据存放目录
    • 存在共享UID的特殊情况

Android安全模型

  • 应用权限
    • 细粒度控制
    • 应用通过Manifests.xml申请权限
    • 权限检查可以由内核进行,也可以用Android系统执行
  • 代码签名
    • apk必须有开发者签名
  • SELinux
    • Security Enhancements for Android
    • 强制访问控制(MAC)
    • 核心系统守护进程和用户应用隔离到不同的domain
  • 系统更新
    • 解锁、BootLoader、Recovery
    • Recovery是一个小型的系统,可以访问所有的设备分区
    • 通常只允许签名验证通过的刷写
    • 解锁:允许替换Recovery和系统镜像
      • 将会清除所有的用户数据

分析环境和常用工具

  • satoku
    • 基于Linux的Android取证,逆向,开发的平台
    • 2014年9月停止更新了
  • Android studio
    • Android应用开发
    • APK分析,性能分析
  • JEB
    • Android逆向工具
    • 支持无源码调试
    • 提供APM、Mips、Intel x86/64反编译支持
  • jdax
    • 开源dex文件反编译工具
  • smali、baksmali、APKTool
    • 反汇编常用工具
    • dex文件和smali代码相互转换
    • apk文件的解包和打包
  • IDA PRO
    • 支持Dalvik指令集反汇编
    • 多用于动态调试的Native代码

反编译

  • JNI
    • Java与Native沟通的桥梁
    • JNI的注册
      • 静态注册(名字对应)—Demo
      • 动态注册(RegisterNativeMethods)
  • JNI_OnLoad
    • 在加载so文件时将被执行
  • Demo hiddendata

加壳技术

  • 反编译代价低
    • 利用动态代码加载技术
    • 隐藏原本的dex文件
  • 动态加载过程隐蔽,复杂度高
  • 增加完整性检查,反调试措施

Android应用四大组件

  • Activity
    • 具有用户界面的单一屏幕
    • UI相关
  • Service
    • 后台运行的组件
  • Content Provider
    • 共享应用数据
  • Broadcast Receiver
    • 响应广播通知

应用层安全

  • 本质是权限控制
    • Android:exported = “true”
文章目录
  1. 1. 安卓
    1. 1.1. Android整体架构
    2. 1.2. Android安全模型
    3. 1.3. 分析环境和常用工具
    4. 1.4. 反编译
    5. 1.5. 加壳技术
    6. 1.6. Android应用四大组件
    7. 1.7. 应用层安全
|