计算机
类型
7.6
豆瓣评分
可以朗读
语音朗读
337千字
字数
2015-09-01
发行日期
展开全部
主编推荐语
分析Android安全问题,指导开发安全APP。
内容简介
本书从分析Android系统的运行原理、框架和主要模块入手现,着重分析了Android系统存在的安全技术问题,以及这些技术在移动设备上产生的安全问题,让读者了解如何静态分析Android软件、如何动态调试Android软件、如何开发出安全的APP、如何使自己的系统不会被盗版等。这本书几乎每一个部分,都结合实际例子,一步步讲解,可以使读者了解APP安全的问题,给开发者一些防范技术。
目录
- 版权信息
- 作者简介
- 内容提要
- 前言
- 本书的结构
- 本书面向的读者
- 第1章Android简介
- 1.1 Android的发展历史
- 1.2 Android系统进化史
- 1.2.1 Nexus系列
- 1.2.2 国产定制系统
- 1.2.2.1 国产ROM
- 1.2.2.2 手机桌面
- 1.2.3 Android的开放与安全
- 1.2.4 移动互联网的趋势
- 1.3 Android和iOS系统对比
- 1.3.1 系统架构对比
- 1.3.2 Android和iOS安全对比
- 1.3.2.1 Android系统安全性分析
- 1.3.2.2 iOS系统安全性分析
- 第2章 Android地下产业链分析
- 2.1 钱从哪里来
- 2.1.1 恶意吸费
- 2.1.2 广告、恶意推广
- 2.1.3 诱骗欺诈
- 2.1.4 隐私窃取
- 2.1.5 安装包分析
- 2.2 安全的发展趋势
- 2.2.1 系统级别的杀毒
- 2.2.2 应用市场的监管
- 2.2.3 智能硬件安全
- 第3章 理解Android系统
- 3.1 Android系统的层级架构
- 3.1.1 应用层
- 3.1.2 框架层
- 3.1.3 核心库与运行环境层
- 3.1.4 Linux内核层
- 3.1.5 Android系统的分区结构
- 3.2 启动过程
- 3.2.1 Boot Loader加载阶段
- 3.2.2 加载Kernel与initrd阶段
- 3.2.3 初始化设备服务阶段
- 3.2.4 加载系统服务阶段
- 3.2.5 虚拟机初始化阶段
- 3.2.6 启动完成阶段
- 3.3 系统关键进程与服务
- 3.3.1 系统第一个进程init详解
- 3.3.1.1 初始化脚本init.rc
- 3.3.1.2 属性服务
- 3.3.2 ADB进程
- 3.3.3 存储类守护进程Vold
- 3.3.4 进程母体Zygote
- 3.3.5 服务管理器ServiceMananger
- 3.3.6 进程复制Android Fork
- 3.3.7 进程间通信Binder机制
- 3.3.8 匿名共享内存机制Ashmem
- 3.3.9 日志服务Logger
- 3.4 APK生成
- 3.4.1 编译过程
- 3.4.2 打包过程
- 3.4.3 签名优化过程
- 3.5 系统安全执行边界
- 3.5.1 沙箱隔离机制
- 3.5.2 权限授予机制
- 3.5.2.1 API权限
- 3.5.2.2 文件权限
- 3.5.2.3 IPC权限
- 3.5.3 数字签名机制
- 3.5.3.1 数字签名的优点
- 3.5.3.2 如何签名
- 3.5.3.3 怎样验证签名
- 3.5.3.4 APK签名比对的应用场景
- 3.6 系统的安全结构
- 3.6.1 Android应用程序安全
- 3.6.2 主要的应用组件
- 3.6.2.1 Android项目清单文件AndroidManifest.xml
- 3.6.2.2 Intents
- 3.6.3 四大组件模型
- 3.6.3.1 Activity
- 3.6.3.2 Service
- 3.6.3.3 Content Provider
- 3.6.3.4 Broadcast Receiver
- 3.6.4 Android框架层
- 3.6.5 Dalvik虚拟机
- 3.7 Android 5.0(Lollipop)的安全架构
- 3.7.1 加强型内核SEAndroid
- 3.7.2 安全的锁屏
- 3.7.3 充分的加密
- 3.7.4 Android5.0安全总结
- 第4章 Root你的设备
- 4.1 获取Root权限原理
- 4.1.1 su源码分析
- 4.1.2 Root后手机对比
- 4.1.3 Root思路
- 4.1.4 Root漏洞
- RageAgainstTheCage漏洞
- 4.1.5 已经发现的Root漏洞
- 4.1.6 SuperUser分析
- 4.1.7 Root安全
- 4.2 Root的分类
- 4.2.1 临时Root
- 4.2.2 永久Root
- 4.2.3 删除Root
- 4.2.4 免Root
- 4.3 Root之后
- 4.3.1 静默安装
- 4.3.1.1 调用PackageInstaller中隐藏的API
- 4.3.1.2 使用pm命令安装
- 4.3.2 删除预装
- 4.3.3 键盘监控
- 4.3.4 短信拦截与静默发送
- 4.3.5 电话监控
- 第5章 APK静态分析
- 5.1 什么是静态分析
- 5.2 常用分析利器
- 5.2.1 资源逆向工具AXMLPrinter 2
- 5.2.2 查看源码工具dex2jar、jd-GUI
- 5.2.3 APK逆向工具APKTool
- 5.2.4 Android逆向助手
- 5.2.5 反汇编工具IDA PRO
- 5.2.6 超级编辑器UltraEdit
- 5.3 认识APK文件
- 5.3.1 App的种类
- 5.3.1.1 原生App
- 5.3.1.2 网页App(Web App)
- 5.3.1.3 混合App(Hybrid App)
- 5.3.2 反编译前结构
- 5.3.3 反编译后结构
- 5.4 分析DEX文件
- 5.4.1 认识DEX
- DEX文件结构
- 5.4.2 虚拟机指令Smali简介
- 5.4.3 Smali与Java对比
- 5.4.4 Smali语法基础
- 5.4.5 常用的Smali 注入代码
- 5.4.5.1 增加调试Log 信息
- 5.4.5.2 弹出AlertDialog消息框
- 5.5 分析SO文件
- 5.5.1 NDK开发流程
- 5.5.2 开始反汇编
- 5.5.2.1 什么是反汇编
- 5.5.2.2 开始反汇编
- 5.5.3 尝试修改SO文件逻辑
- 5.6 收集信息定位关键代码
- 5.6.1 AndroidManifest.xml突破
- 5.6.1.1 Applicatioin类
- 5.6.1.2 MainActivity类
- 5.6.1.3 特殊的Permission
- 5.6.2 特殊关键字突破
- 5.6.3 资源索引突破
- 5.7 开始篡改代码
- 5.7.1 尝试篡改逻辑
- 5.7.2 广告植入与去除
- 5.7.3 收费限制破解
- 5.7.4 应用程序汉化
- 5.7.5 篡改逻辑小结
- 第6章 ARM汇编速成
- 6.1 抽象层次
- 6.1.1 计算机体系结构
- 6.1.2 常见嵌入式处理器
- 6.1.2.1 嵌入式微处理器 MPU
- 6.1.2.2 嵌入式微控制器MCU
- 6.1.2.3 嵌入式DSP处理器
- 6.1.2.4 片上系统SOC
- 6.1.3 ndroid支持处理器情况
- 6.2 逆向工程
- 6.2.1 计算机层级
- 6.2.2 汇编语言
- 6.2.2.1 GCC编译过程
- 6.2.3 反汇编的理解
- 6.2.4 RM汇编语言模块的结构
- 6.2.5 简单的ARM程序
- 6.3 ARM体系结构
- 6.3.1 RM微处理器的工作状态
- 6.3.2 RM体系结构的存储器格式
- 6.3.3 指令长度及数据类型
- 6.3.4 处理器模式
- 6.3.5 RM状态下寄存器组织
- 6.3.5.1 未分组寄存器R0~R7
- 6.3.5.2 分组寄存器R8~R14
- 6.3.5.3 程序计数器PC(R15)
- 6.3.5.4 寄存器R16
- 6.3.6 Thumb状态下的寄存器组织
- 6.4 ARM微处理器的指令集概述
- 6.4.1. RM指令的助记符
- 6.4.2 程序状态寄存器
- 6.4.2.1 条件码标志
- 6.4.2.2 控制位
- 6.4.2.3 保留位
- 6.4.3 指令的条件域
- 6.4.4 RM指令的寻址方式
- 6.4.4.1 立即寻址
- 6.4.4.2 寄存器寻址
- 6.4.4.3 寄存器间接寻址
- 6.4.4.4 基址变址寻址
- 6.4.4.5 多寄存器寻址
- 6.4.4.6 相对寻址
- 6.4.4.7 堆栈寻址
- 6.5 Thumb指令及应用
- 6.5.1 Thumb指令集特点
- 6.5.2 RM与Thumb状态切换
- 6.5.3 Thumb指令集格式
- 6.5.4 Thmub指令的十六进制值计算
- 6.6 快速识别ARM汇编中的C/C++逻辑
- 6.6.1 识别if-else判断逻辑
- 6.6.2 识别while-do循环逻辑
- 6.6.3 识别for循环逻辑
- 6.6.4 识别switch-case分支逻辑
- 第7章 APK动态分析
- 7.1 应用体系架构
- 7.1.1 代码安全分析
- 7.1.2 组件安全分析
- 7.1.3 存储安全分析
- 7.1.4 通信安全分析
- 7.2 DDMS调试
- 7.2.1 使用Log进行逻辑跟踪
- 7.2.2 不安全的本地存储
- 7.2.3 使用TraceView进行方法跟踪
- 7.3 网络抓包
- 7.3.1 抓包工具Fiddler简介
- 7.3.2 抓包的原理
- 7.3.3 如何在Android上进行抓包
- 7.3.4 设置断点修改请求
- 7.3.4.1 修改Request
- 7.3.4.2 AutoResponder修改Response
- 7.4 使用AndBug断点调试
- 7.4.1 配置AndBug环境
- 7.4.2 AndBug常用命令
- 7.4.3 AndBug调试步骤
- 7.4.4 开始断点调试
- 7.4.4.1 确定需要调试的类与方法
- 7.4.4.2 查找定位方法
- 7.4.4.3 设置断点
- 7.4.4.4 断点分析查看变量值
- 7.5 使用IDA Pro进行动态调试
- 7.5.1 使用IDA动态调试原生库so
- 7.5.1.1 在Android设备上运行android_schmerver程序
- 7.5.1.2 使用adb forward命令进行端口转发
- 7.5.1.3 使用IDA Pro附上目标应用程序
- 7.5.1.4 计算查找对应的函数起始地址
- 7.5.2 使用IDA动态调试dex
- 7.6 调试WebViewApp
- 7.6.1 Chrome插件调试
- 7.6.2 WebView已知漏洞
- 7.6.3 HTML安全
- 7.6.4 网络钓鱼
- 7.6.5 SQL注入攻击
- 第8章动态注入技术
- 8.1 什么是Hook技术
- 8.1.1 Hook原理
- 8.1.1.1 Hook工作流程
- 8.1.1.2 ptrace函数
- 8.1.2 Hook的种类
- 8.1.2.1 Java层API Hook
- 8.1.2.2 Native层So库Hook
- 8.1.2.3 全局Hook
- 8.1.3 Hook的危害
- 8.2 常用的Hook工具
- 8.2.1 Xposed框架
- 8.2.2 CydiaSubstrate框架
- 8.2.3 ADBI/DDI框架
- 8.3 HookAndroid应用
- 8.3.1 尝试Hook系统API
- 8.3.2 Hook指定应用注入广告
- 8.3.3 App登录劫持
- 8.4 Hook原生应用程序
- 8.4.1 CydiaSubstrate框架针对Native层Hook的支持
- 8.4.2 通过JNI改变系统颜色
- 8.4.3 Hook后替换指定应用中的原生方法
- 8.4.4 使用Hook进行广告拦截
- 8.5 Hook检测/修复
- 8.5.1 Hook检测
- 8.5.2 Hook修复
- 8.5.3 Hook检测小结
- 第9章 应用加固与渗透测试
- 9.1 防止利用系统组件漏洞
- 9.1.1 Activity编码安全
- 9.1.1.1 私有Activity
- 9.1.1.2 公共Activity
- 9.1.1.3 伙伴Activity
- 9.1.1.4 内部Activity
- 9.1.2 Brocast Recevier编码安全
- 9.1.2.1 私有Brocast Receiver
- 9.1.2.2 公共Brocast Receiver
- 9.1.2.3 内部Brocast Receiver
- 9.1.3 Service编码安全
- 9.1.3.1 私有Service
- 9.1.3.2 公共Service
- 9.1.3.3 合作Service
- 9.1.3.4 内部Service
- 9.1.4 Provider编码安全
- 9.1.4.1 私有Content Provider
- 9.1.4.2 公共Content Provider
- 9.1.4.3 合作Content Provider
- 9.1.4.4 内部Content Provider
- 9.1.4.5 部分 Content Provider
- 9.2 防止逆向
- 9.2.1 代码混淆
- 9.2.1.1 ProGuard简介
- 9.2.1.2 使用ProGuard
- 9.2.1.3 混淆带来的问题
- 9.2.2 DEX保护
- 9.2.2.1 DEX优化与混淆处理
- 9.2.2.2 什么是加壳
- 9.2.3 SO文件保护
- 9.2.4 防止jd-GUI查看代码
- 9.2.5 防止二次打包
- 9.2.5.1 如何防止二次打包
- 9.2.5.2 常用的验证策略
- 9.3 防止动态分析
- 9.3.1 检测运行环境
- 9.3.2 防止进行动态注入
- 9.4 Android渗透测试
- 9.4.1 渗透测试步骤
- 9.4.2 渗透测试工具
- 9.4.2.1 安全评估框架drozer
- 9.4.2.2 瑞士军刀Busybox
- 9.4.2.3 集成化工具
- 9.4.3 应用程序渗透测试
- 第10章 系统安全措施
- 10.1 启动验证
- 10.2 磁盘加密
- 10.2.1 加密模式
- 10.2.2 密钥的生成
- 10.3 屏幕安全
- 10.3.1 图形同虚设的屏幕锁
- 10.3.2 密码锁
- 10.3.3 PIN锁
- 10.4 USB调试安全
- 10.4.1 ADB概况
- 10.4.2 为什么ADB需要安全
- 10.4.3 ADB安全
- 10.4.4 ADB的安全措施
- 10.4.5 ADB认证秘钥
- 10.5 增强型内核SELinux/SEAndroid
- 10.5.1 SELinux架构
- 10.5.2 传统的Linux的不足之处
- 10.5.3 SELinux的特点
- 10.5.4 SELinux的运行模式
- 10.5.5 SELinux的启动、关闭与观察
- 第11章 内核攻击与防护
- 11.1 Rootkit是什么
- 11.1.1 Rootkit概述
- 11.1.1.1 进程调度
- 11.1.1.2 内存管理
- 11.1.1.3 虚拟文件系统(VFS)
- 11.1.1.4 网络
- 11.1.1.5 进程间通信(IPC)
- 11.1.2 Linux可加载的内核模块
- 11.1.3 剖析内核模块
- 11.1.4 了解内核模块对象
- 11.1.5 LKM的生命周期
- 11.1.6 系统调用机制
- 11.1.7 SWI中断
- 11.1.8 Linux系统调用规范
- 11.1.9 系统接口重定向
- 11.1.10 虚拟文件系统
- 11.2 Android电话系统
- 11.2.1 Android电话子系统体系结构
- 11.2.2 Android电话子系统工作流程
- 11.2.3 内核级Rootkit攻击位置
- 11.3 开始攻击内核
- 11.3.1 环境搭建
- 11.3.2 第一个自定义内核程序
- 11.3.3 隐藏潜伏模块
- 11.3.3.1 屏蔽lsmode
- 11.3.3.2 文件系统隐藏
- 11.3.3.3 网络连接的隐藏
- 11.3.4 操纵内核模块
- 11.3.4.1 AT 命令简介
- 11.3.4.2 AT 命令攻击
- 11.3.5 信息收集模块
- 11.4 内核级Rootkit检测
- 11.4.1 常用的 Rootkit 检测方法
- 11.4.2 Android Rootkit检测系统模型
- 11.4.3 LKM模块检测
- 11.4.4 电话子系统攻击检测
- 11.5 Rootkit的植入与启动
- 11.5.1 Rootkit的植入
- 11.5.2 Rootkit的启动
- 11.5.3 Rootkit小结
- 附录A ARM指令集
- A.1 跳转指令
- A.1.1 B指令
- A.1.2 BL指令
- A.1.3 BLX指令
- A.1.4 BX指令
- A.2 数据处理指令
- A.2.1 MOV指令
- A.2.2 MVN指令
- A.2.3 CMP指令
- A.2.4 CMN指令
- A.2.5 TST指令
- A.2.6 TEQ 指令
- A.2.7 ADD 指令
- A.2.8 ADC 指令
- A.2.9 SUB指令
- A.2.10 SBC 指令
- A.2.11 RSB指令
- A.2.12 RSC指令
- A.2.13 AND指令
- A.2.14 ORR指令
- A.2.15 EOR指令
- A.2.16 BIC指令
- A.3 乘法指令与乘加指令
- A.3.1 MUL指令
- A.3.2 MLA指令
- A.3.3 SMULL 指令
- A.3.4 SMLAL 指令
- A.3.5 UMULL指令
- A.3.6 UMLAL 指令
- A.4 程序状态寄存器访问指令
- A.4.1 MRS指令
- A.4.2 MSR指令
- A.5 加载/存储指令
- A.5.1 LDR 指令
- A.5.2 LDRB 指令
- A.5.3 LDRH 指令
- A.5.4 STR 指令
- A.5.5 STRB 指令
- A.5.6 STRH 指令
- A.6 批量数据加载/存储指令
- LDM(或 STM)指令
- A.7 数据交换指令
- A.7.1 SWP指令
- A.7.2 SWPB指令
- A.8 移位指令(操作)
- A.8.1 LSL(或ASL)操作
- A.8.2 LSR操作
- A.8.3 ASR操作
- A.8.4 ROR 操作
- A.8.5 RRX 操作
- A.9 协处理器指令
- A.9.1 CDP 指令
- A.9.2 LDC指令
- A.9.3 STC指令
- A.9.4 MCR指令
- A.9.5 MRC指令
- A.10 异常产生指令
- A.10.1 SWI指令
- A.10.2 BKPT 指令
- 附录B ARM伪指令集
- B.1 符号定义伪指令
- B.1.1 GBLA、GBLL和GBLS指令
- B.1.2 LCLA、LCLL和LCLS指令
- B.1.3 SETA、SETL和SETS指令
- B.1.4 RLIST指令
- B.2 数据定义伪指令
- B.2.1 DCB指令
- B.2.2 DCW、DCWU指令
- B.2.3 DCD、DCDU指令
- B.2.4 DCFD、DCFDU指令
- B.2.5 DCFS、DCFSU指令
- B.2.6 DCQ、DCQU指令
- B.2.7 SPACE指令
- B.2.8 MAP指令
- B.2.9 FILED指令
- B.3 汇编控制伪指令
- B.3.1 IF、ELSE、ENDIF指令
- B.3.2 WHILE、WEND指令
- B.3.3 MACRO、MEND指令
- B.3.4 MEXIT指令
- B.4 其他常用的伪指令
- B.4.1 AREA指令
- B.4.2 ALIGN指令
- B.4.3 CODE16、CODE32指令
- B.4.4 END指令
- B.4.5 EQU指令
- B.4.6 EXPORT、GLOBAL指令
- B.4.7 IMPORT指令
- B.4.8 EXTERN指令
- B.4.9 GET、INCLUDE指令
- B.4.10 INCBIN指令
- B.4.11 RN指令
- B.4.12 ROUT指令
- 看完了
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。