安卓
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”