愿每一个北漂的孩子都能找到自己为之奋斗的方向,不负那些在远方默默支持我们的父母和亲人。
历时将近1的新书《Android安全技术揭秘与防范》终于出版了,第一次写书万分激动,这里向大家推广一下本书。
先附上本书的照片和链接(貌似在线购买还没有出来,稍后更新):
大家可以在::http://www.epubit.com.cn/book/details/4005这里看到进度
下面是目录:
第1章 Android简介 10
1.1 发展历史 10
1.2 系统进化史 10
1.2.1 Nexus系列 12
1.2.2 国产定制系统 12
1.2.3 开放与安全 13
1.2.4 移动互联网的趋势 14
1.3 对比IOS系统 15
1.3.1 系统架构对比 15
1.3.2 市场占有量 16
1.3.3 安全对比 16
第2章 Android地下产业链分析 18
2.1 钱从哪里来 18
2.1.1 恶意吸费 19
2.1.2 广告、恶意推广 22
2.1.3 诱骗欺诈 23
2.1.4 隐私窃取 24
2.1.5 安装包分析 24
2.2 催生产业链 26
2.2.1 安全类应用 27
2.2.2 应用加固 27
2.2.3 刷机产业 27
2.2.4 ROM制作与预装 28
2.3 安全的发展趋势 28
2.3.1 系统级别的杀毒 29
2.3.2 应用市场的监管 29
2.3.3 法律体系的完善 29
2.3.4 智能硬件安全 30
第3章 理解Android系统 31
3.1 系统的层级架构 31
3.1.1 应用层 32
3.1.2 框架层 32
3.1.3 核心库与运行环境层 32
3.1.4 Linux内核层 33
3.1.5 系统的分区结构 34
3.2 启动过程 35
3.2.1 BootLoader加载阶段 36
3.2.2 加载Kernel与initrd阶段 36
3.2.3 初始化设备服务阶段 37
3.2.4 加载系统服务阶段 37
3.2.5 虚拟机初始化阶段 37
3.2.6 启动完成阶段 37
3.3 系统关键进程与服务 37
3.3.1 系统第一个进程init详解 38
3.3.2 ADB进程 40
3.3.3 存储类守护进程Vold 40
3.3.4 进程母体Zygote 41
3.3.5 服务管理器ServiceMananger 42
3.3.6 进程复制Android Fork 43
3.3.7 进程间通信Binder机制 43
3.3.8 匿名共享内存机制Ashmem 44
3.3.9 日志服务Logger 45
3.4 APK生成 45
3.4.1 编译过程 47
3.4.2 打包过程 47
3.4.3 签名优化过程 47
3.5 系统安全执行边界 48
3.5.1 沙箱隔离机制 48
3.5.2 权限授予机制 49
3.5.3 数字签名机制 53
3.6 系统的安全结构 56
3.6.1 Android应用程序安全 57
3.6.2 主要的应用组件 57
3.6.3 四大组件模型 59
3.6.4 Android框架层 61
3.6.5 Dalvik 虚拟机 61
3.7 Android 5.0(Lollipop)的安全架构 62
3.7.1 加强型内核SEAndroid 63
3.7.2 安全的锁屏 63
3.7.3 充分的加密 63
3.7.4 Android5.0安全总结 63
第4章 Root你的设备 65
4.1 获取Root权限原理 65
4.1.1 su源码分析 66
4.1.2 Root后手机对比 67
4.1.3 Root思路 68
4.1.4 Root漏洞 68
4.1.5 已经发现的Root漏洞 71
4.1.6 SuperUser分析 71
4.1.7 Root安全 73
4.2 Root的分类 74
4.2.1 临时Root 74
4.2.2 永久Root 77
4.2.3 删除Root 78
4.2.4 免Root 79
4.3 Root之后 80
4.3.1 静默安装 80
4.3.2 删除预装 87
4.3.3 键盘监控 89
4.3.4 短信拦截与静默发送 94
4.3.5 电话监控 97
第5章 APK静态分析 101
5.1 什么是静态分析 101
5.2 常用分析利器 101
5.2.1 资源逆向工具AXMLPrinter 2 101
5.2.2 查看源码工具dex2jar、jd-GUI 102
5.2.3 APK逆向工具APKTool 103
5.2.4 Android逆向助手 104
5.2.5 反汇编工具IDA PRO 104
5.2.6 超级编辑器UltraEdit 105
5.3 认识APK文件 105
5.3.1 App的种类 106
5.3.2 反编译前结构 108
5.3.3 反编译后结构 109
5.4 分析DEX文件 111
5.4.1 认识DEX 112
5.4.2 虚拟机指令Smali简介 113
5.4.3 Smali与Java对比 113
5.4.4 Smali语法基础 115
5.4.5 常用的Smali 注入代码 116
5.5 分析SO文件 118
5.5.1 NDK开发流程 119
5.5.2 开始反汇编 123
5.5.3 尝试修改SO文件逻辑 126
5.6 收集信息定位关键代码 128
5.6.1 AndroidManifest.xml突破 128
5.6.2 特殊关键字突破 130
5.6.3 资源索引突破 131
5.7 开始篡改代码 131
5.7.1 尝试篡改逻辑 132
5.7.2 广告植入与去除 134
5.7.3 收费限制破解 139
5.7.4 应用程序汉化 141
5.7.5 篡改逻辑小结 141
第6章 ARM汇编速成 142
6.1 抽象层次 142
6.1.1 计算机体系结构 142
6.1.2 常见嵌入式处理器 143
6.1.3 Android支持处理器情况 145
6.2 逆向工程 145
6.2.1 计算机层级 146
6.2.2 汇编语言 147
6.2.3 反汇编的理解 150
6.2.4 ARM汇编语言模块的结构 150
6.2.5 简单的ARM程序 150
6.3 ARM体系结构 152
6.3.1 ARM 微处理器的工作状态 152
6.3.2 ARM 体系结构的存储器格式 153
6.3.3 指令长度及数据类型 153
6.3.4 处理器模式 153
6.3.5 ARM状态下寄存器组织 154
6.3.6 Thumb 状态下的寄存器组织 156
6.4 ARM 微处理器的指令集概述 156
6.4.1 ARM指令的助记符 157
6.4.2 程序状态寄存器 158
6.4.3 指令的条件域 160
6.4.4 ARM指令的寻址方式 161
6.5 Thumb 指令及应用 163
6.5.1 Thumb指令集特点 164
6.5.2 ARM与Thumb状态切换 164
6.5.3 Thumb指令集格式 165
6.5.4 Thmub指令的十六进制值计算 166
6.6 快速识别ARM汇编中的C/C++逻辑 167
6.6.1 识别if-else判断逻辑 167
6.6.2 识别while-do循环逻辑 169
6.6.3 识别for循环逻辑 171
6.6.4 识别switch-case分支逻辑 172
第7章 APK动态分析 176
7.1 应用体系架构 176
7.1.1 代码安全分析 177
7.1.2 组件安全分析 177
7.1.3 存储安全分析 177
7.1.4 通讯安全分析 177
7.2 DDMS调试 178
7.2.1 使用Log进行逻辑跟踪 178
7.2.2 不安全的本地存储 181
7.2.3 使用TraceView进行方法跟踪 182
7.3 网络抓包 186
7.3.1 抓包工具Fiddler简介 187
7.3.2 抓包的原理 187
7.3.3 如何在Android上进行抓包 188
7.3.4 设置断点修改请求 191
7.4 使用AndBug断点调试 194
7.4.1 配置AndBug环境 194
7.4.2 AndBug常用命令 195
7.4.3 AndBug调试步骤 196
7.4.4 开始断点调试 197
7.5 使用IDA Pro进行动态调试 202
7.5.1 使用IDA动态调试原生库so 202
7.5.2 使用IDA动态调试dex 207
7.6 调试WebView APP 209
7.6.1 Chrome插件调试 210
7.6.2 WebView已知漏洞 210
7.6.3 HTML安全 211
7.6.4 网络钓鱼 212
7.6.5 SQL注入攻击 212
第8章 动态注入技术 214
8.1 什么Hook是技术 214
8.1.1 Hook原理 215
8.1.2 Hook的种类 218
8.1.3 Hook的危害 220
8.2 常用的Hook工具 220
8.2.1 Xposed框架 220
8.2.2 CydiaSubstrate框架 222
8.2.3 ADBI/DDI框架 224
8.3 Hook Android应用 224
8.3.1 尝试Hook系统API 226
8.3.2 Hook指定应用注入广告 228
8.3.3 App登陆劫持 232
8.4 Hook 原生应用程序 238
8.4.1 CydiaSubstrate框架针对Native层Hook的支持 238
8.4.2 通过JNI改变系统颜色 240
8.4.3 Hook后替换指定应用中的原生方法 244
8.4.4 使用Hook进行广告拦截 248
8.5 Hook检测/修复 250
8.5.1 Hook检测 250
8.5.2 Hook修复 253
8.5.3 Hook检测小结 255
第9章 应用加固与渗透测试 256
9.1 防止利用系统组件漏洞 256
9.1.1 Activity编码安全 257
9.1.2 Brocast Recevier编码安全 266
9.1.3 Service编码安全 274
9.1.4 Provider编码安全 283
9.2 防止逆向 296
9.2.1 代码混淆 297
9.2.2 DEX保护 302
9.2.3 SO文件保护 305
9.2.4 防止jd-GUI查看代码 305
9.2.5 防止二次打包 307
9.3 防止动态分析 313
9.3.1 检测运行环境 314
9.3.2 防止进行动态注入 315
9.4 Android渗透测试 316
9.4.1 渗透测试步骤 316
9.4.2 渗透测试工具 317
9.4.3 应用程序渗透测试 323
第10章 系统安全措施 325
10.1 启动验证 325
10.2 磁盘加密 326
10.2.1 加密模式 327
10.2.2 密钥的生成 327
10.3 屏幕安全 327
10.3.1 图案锁 329
10.3.2 密码锁 330
10.3.3 PIN锁 330
10.4 USB调试安全 330
10.4.1 ADB概况 331
10.4.2 为什么ADB需要安全 332
10.4.3 ADB安全 332
10.4.4 ADB的安全措施 333
10.4.5 ADB认证秘钥 334
10.5 增强型内核SELinux/SEAndroid 334
10.5.1 SELinux架构 335
10.5.2 传统的Linux的不足之处 336
10.5.3 SELinux的特点 336
10.5.4 SELinux的运行模式 337
10.5.5 SELinux 的启动、关闭与观察 339
第11章 内核攻击与防护 343
11.1 Rootkit是什么 343
11.1.1 Rootkit概述 344
11.1.2 Linux可加载的内核模块 347
11.1.3 剖析内核模块 348
11.1.4 了解内核模块对象 348
11.1.5 LKM 的生命周期 349
11.1.6 系统调用机制 350
11.1.7 SWI中断 350
11.1.8 Linux系统调用规范 351
11.1.9 系统接口重定向 352
11.1.10 虚拟文件系统 353
11.2 Android电话系统 354
11.2.1 Android 电话子系统体系结构 355
11.2.2 Android 电话子系统工作流程 356
11.2.3 内核级 Rootkit 攻击位置 358
11.3 开始攻击内核 359
11.3.1 环境搭建 359
11.3.2 第一个自定义内核程序 362
11.3.3 隐藏潜伏模块 365
11.3.4 操纵内核模块 372
11.3.5 信息收集模块 373
11.4 内核级Rootkit检测 374
11.4.1 常用的 Rootkit 检测方法 374
11.4.2 Android Rootkit检测系统模型 374
11.4.3 LKM 模块检测 377
11.4.4 电话子系统攻击检测 378
11.5 Rootkit的植入与启动 380
11.5.1 Rootkit的植入 380
11.5.2 Rootkit的启动 380
11.5.3 Rootkit小结 381
附录1 ARM 指令集 382
12.1 跳转指令 382
12.1.1 B 指令 382
12.1.2 BL 指令 382
12.1.3 BLX 指令 383
12.1.4 BX 指令 383
12.2 数据处理指令 383
12.2.1 MOV 指令 384
12.2.2 MVN 指令 384
12.2.3 CMP 指令 385
12.2.4 CMN 指令 385
12.2.5 TST 指令 385
12.2.6 TEQ 指令 386
12.2.7 ADD 指令 386
12.2.8 ADC 指令 386
12.2.9 SUB 指令 387
12.2.10 SBC 指令 387
12.2.11 RSB 指令 388
12.2.12 RSC 指令 388
12.2.13 AND 指令 388
12.2.14 ORR 指令 389
12.2.15 EOR 指令 389
12.2.16 BIC 指令 389
12.3 乘法指令与乘加指令 390
12.3.1 MUL 指令 390
12.3.2 MLA 指令 390
12.3.3 SMULL 指令 391
12.3.4 SMLAL 指令 391
12.3.5 UMULL 指令 391
12.3.6 UMLAL 指令 392
12.4 程序状态寄存器访问指令 392
12.4.1 MRS 指令 392
12.4.2 MSR 指令 393
12.5 加载/存储指令 393
12.5.1 LDR 指令 394
12.5.2 LDRB 指令 394
12.5.3 LDRH 指令 395
12.5.4 STR 指令 395
12.5.5 STRB 指令 395
12.5.6 STRH 指令 396
12.6 批量数据加载/存储指令 396
12.6.1 LDM(或 STM)指令 396
12.7 数据交换指令 397
12.7.1 SWP 指令 397
12.7.2 SWPB 指令 397
12.8 移位指令(操作) 398
12.8.1 LSL(或 ASL)操作 398
12.8.2 LSR 操作 399
12.8.3 ASR 操作 399
12.8.4 ROR 操作 399
12.8.5 RRX 操作 399
12.9 协处理器指令 400
12.9.1 CDP 指令 400
12.9.2 LDC 指令 400
12.9.3 STC 指令 401
12.9.4 MCR 指令 401
12.9.5 MRC 指令 402
12.10 异常产生指令 402
12.10.1 SWI 指令 402
12.10.2 BKPT 指令 402
附录2 ARM伪指令集 404
12.11 符号定义伪指令 404
12.11.1 GBLA、GBLL 和 GBLS指令 404
12.11.2 LCLA、LCLL 和 LCLS指令 405
12.11.3 SETA、SETL 和 SETS指令 405
12.11.4 RLIST指令 405
12.12 数据定义伪指令 406
12.12.1 DCB指令 406
12.12.2 DCW、DCWU指令 406
12.12.3 DCD、DCDU指令 407
12.12.4 DCFD、DCFDU指令 407
12.12.5 DCFS、DCFSU指令 407
12.12.6 DCQ、DCQU指令 408
12.12.7 SPACE指令 408
12.12.8 MAP指令 408
12.12.9 FILED指令 408
12.13 汇编控制伪指令 409
12.13.1 IF、ELSE、ENDIF指令 409
12.13.2 WHILE、WEND指令 410
12.13.3 MACRO、MEND指令 410
12.13.4 MEXIT指令 411
12.14 其他常用的伪指令 411
12.14.1 AREA指令 411
12.14.2 ALIGN指令 412
12.14.3 CODE16、CODE32指令 412
12.14.4 END指令 413
12.14.5 EQU指令 413
12.14.6 EXPORT、GLOBAL指令 414
12.14.7 IMPORT指令 414
12.14.8 EXTERN指令 415
12.14.9 GET、INCLUDE指令 415
12.14.10 INCBIN指令 415
12.14.11 RN指令 416
12.14.12 ROUT指令 416
为什么写一本Android安全方向的书?
笔者学习Android开发也已经在差不多5年的经验了,5年时间里可以说是伴随着Android的发展。第一次写Android应用程序的时候Android还是以1.6系统为主导,记不清是三星还是htc的手机,只记得每次调试都是痛苦般的回忆。每次调试都是在一台只有128M内存的设备上(当时算是高配了),当时每当会不写的时候都是叫我旁边写嵌入式的师兄帮忙,虽然他也不怎么会。当时,想想自己能写一个应用程序在手机上运行,还是比较兴奋的。
附上一张在实验室写码的照片:
当然对于每一个程序员来说,终极目标都是当一名黑客。读书期间特别穷,总是想着一些歪门邪道弄一些钱。买过QQ木马,盗了QQ号之后贩卖Q币和QQ秀;假装QQ主人,向他的好友骗去钱财;最有趣的一次,假装QQ主人,调戏他的女朋友,弄到最后都分手了。(我当时怎么这么坏)。
Android的出现顿时让我眼前一亮,因为当时的应用市场还不完善,只有豌豆荚和eoe market,而且上传的审核机制基本没有。OK,如你们所想,我把我的硬盘中珍藏多年的图片资源,打包成了几个app。“张婉悠私密写真.apk”,“周韦彤日本行.apk”,“泷泽萝拉的夏日故事.apk”等等,虽然里面都是一些比较暴露的照片,但是靠着张老师,周老师和泷泽老师的大名与apk里面的恶意广告,这几个apk每日能给我带来100~200的收入。(虽然不多,但是对于学生时代的我来说,早以兴奋不已。再次感谢各位老师的教导,我决定以后每天都观摩你们的教学大片)
人是一种很难满足的动物,渐渐,我发现每天100~200块钱根本不够我花(泡妞比较花钱,你懂的)。于是乎,我想着自己做出来的app几乎没名气,下来量不高,很多人被坑了以后再也不会打开了。于是乎,我开始从国外的google play站上逆向当时老外喜欢玩的游戏,翻译,植入广告并在豌豆荚上架。一些比较好玩的游戏都内置又收费机制,而且逻辑多谢在so里,破解起来相当困难。但是,有几句话说得好,女人的花钱刺激着男人的赚钱。当时来说,这个上架速度相当快,每天基本每个上架5款app。这个也是我最疯狂的时候,有一天最多赚了2000块钱。有一款应用,竟然冲刺到了豌豆荚的首页。
但是好景不长,毕业了还是得去找工作。那时候,应用市场基本已经成型了。记得刚毕业面试的第一家公司就是豌豆荚,我很自豪的说你们首页的那款游戏的发布者就是我。结果?结果你们知道的,豌豆荚没有录用我,反而把我id下的所有应用都下架了。WTF!!!(估计是360应用市场打着安全app的旗号对豌豆荚影响太大)。但是就此,我的打包党生涯也赚了数十W多。(当然,自己还得做毕设耽搁了时间,听说有一些公司专门做这事都上市了)
为什么来360又为什么离开
男人天生就是为了来战斗,要死就死在战场上,所以来了360。(实话说只有他的offer没得选择)。进来没有写代码,而是给360手机卫士做了3个月的测试,做测试这段日子也让我的思考维度得到充分的转变。后面做去了搜索,做了雷电项目,看了成千上万的app,从测试的角度分析他们的安全漏洞。细节就不多说了。360给年轻人的机会还是挺多的,在里面能够接触各类的牛人,学习各样的技术。里面的层级也比较扁平,能够经常跟周鸿祎,齐向东开会。(因为,我和几位老大的助理小妹妹很熟的关系)。虽然,离开了360但是,还是感激老周,陈利人老师对我的帮助。
当然,这个时候我发现,我们通过给app找漏洞提供给乌云也能赚钱。但是,由于乌云给的价钱太少,工作有繁忙就一直没有在做下去。而且,之后的政治斗争确实让我郁闷了大半年。
借用古惑仔的一句话,虽然我不在360,但周鸿祎永远是我大哥。
这本书能够给大家带来什么?
我不是一个专业搞安全的,与核心安全团队来说,我做的事只能算是泛安全。任何人做任何一件事情都是有目的性的,我们不会纯为了炫耀技术来破解一款app,不能赚钱的手段对于我们也没什么用。这本书我从自己的自身经验向大家介绍Android黑色产业链,让大家清楚我们app的钱是怎么被人偷走的,以及我们该如何防范。
虽然,现在的Android安全产业链也已经比较成熟了,国内的爱加密,梆梆安全等也都已经提供了整套的安全解决方案。很多开发者朋友,都不会去关系内在的逻辑实现,更多的投身到了业务的角度上去了。但是,安全技术不断的推成出新,就连号称比Android安全很多的iOS都频繁的爆出iCloud,XCODE事故。
我国的安全起步很晚,国内也只有几个大公司在做Android安全方向的研究。本书旨在帮助大家快速的了解Android安全,快速的入门。希望大家能够对此产生兴趣,并投身到这个事业中去。
当然,本人的能力有限,时间匆忙,书中难免有一些不足和错误的地方,也希望得到大家的指教。我们一起相互学习,相互进步。
/*
* @author zhoushengtao(周圣韬)
* @since 2015年9月28日 上午 11:10:00
* @weixin stchou_zst
* @blog http://blog.csdn.net/yzzst
* @交流学习QQ群:341989536
* @私人QQ:445914891
/
版权声明:转载请标注:http://blog.csdn.net/yzzst 。 本文为博主原创文章,未经博主允许不得转载。
- 3楼u0128583135天前 13:14
- 比较好奇你是怎么通过植入广告获利的
- 2楼Q214HW6天前 21:45
- 不知道什么时候可以购买,想看看了解一下
- 1楼u0100288696天前 20:31
- 楼主霸气,顶一个。