Android软件安全与逆向分析

出版社:人民邮电出版社
出版日期:2013-2
ISBN:9787115308153
作者:丰生强
页数:407页

章节摘录

版权页:   插图:   Android NDK的platforms\〈android版本〉\arch—arm\usr\include\jni.h头文件中,声明了所有可以使用到的JNI接口函数。该文件中有两个重要的结构体JNINativeInterface与JNIInvokeInterface,JNINativeInterface是JNI本地接口,实际上它是一个接口函数指针表,里面每一项都为JNI接口的函数指针,所有的原生代码都可以调用这些接口函数;而JNIInvokeInterface则是JNI调用接口,该结构目前只有3个保留项与5个函数指针,这5个函数用于访问全局的JNI接口,多用于原生多线程程序开发。既然JNI为开发人员提供的API就在这两个接口内,那么掌握了这些API的含义与使用方法是不是就可以理解为掌握了Android NDK开发了呢?笔者认为大多数时候是这样的。

内容概要

丰生强(网名非虫)
Android软件安全专家。看雪论坛Android安全版版主;安卓巴士开发交流版版主。
对Android软件与系统安全有狂热的爱好和独到的见解,对Android系统的全部源代码进行过深入地研究和分析。逆向分析实战经验丰富。
在国内信息安全杂志上发表过多篇有价值的软件安全文章,目前就职于国内某Android开发企业,常年混迹于看雪论坛(ID非虫)。
作者邮箱:fei_cong@hotmail.com
愿与国内安全爱好者共同交流与探讨安全技术。

书籍目录

第1章  Android程序分析环境搭建  1
1.1  Windows分析环境搭建  1
1.1.1  安装JDK  1
1.1.2  安装Android SDK  3
1.1.3  安装Android NDK  5
1.1.4  Eclipse集成开发环境  6
1.1.5  安装CDT、ADT插件  6
1.1.6  创建Android Virtual Device  8
1.1.7  使用到的工具  9
1.2  Linux分析环境搭建  9
1.2.1  本书的Linux环境  9
1.2.2  安装JDK  9
1.2.3  在Ubuntu上安装Android SDK  10
1.2.4  在Ubuntu上安装Android NDK  11
1.2.5  在Ubuntu上安装Eclipse集成开发环境  12
1.2.6  在Ubuntu上安装CDT、ADT插件  13
1.2.7  创建Android Virtual Device  13
1.2.8  使用到的工具  15
1.3  本章小结  15
第2章  如何分析Android程序  16
2.1  编写第一个Android程序  16
2.1.1  使用Eclipse创建Android工程  16
2.1.2  编译生成APK文件  19
2.2  破解第一个程序  20
2.2.1  如何动手?  20
2.2.2  反编译APK文件  20
2.2.3  分析APK文件  21
2.2.4  修改Smali文件代码  26
2.2.5  重新编译APK文件并签名  26
2.2.6  安装测试  27
2.3  本章小结  28
第3章  进入Android Dalvik虚拟机  29
3.1  Dalvik虚拟机的特点——掌握Android程序的运行原理  29
3.1.1  Dalvik虚拟机概述  29
3.1.2  Dalvik虚拟机与Java虚拟机的区别  29
3.1.3  Dalvik虚拟机是如何执行程序的  34
3.1.4  关于Dalvik虚拟机JIT(即时编译)  36
3.2  Dalvik汇编语言基础为分析Android程序做准备  37
3.2.1  Dalvik指令格式  37
3.2.2  DEX文件反汇编工具  39
3.2.3  了解Dalvik寄存器  40
3.2.4  两种不同的寄存器表示方法——v命名法与p命名法  42
3.2.5  Dalvik字节码的类型、方法与字段表示方法  43
3.3  Dalvik指令集  44
3.3.1  指令特点  45
3.3.2  空操作指令  45
3.3.3  数据操作指令  46
3.3.4  返回指令  46
3.3.5  数据定义指令  46
3.3.6  锁指令  47
3.3.7  实例操作指令  47
3.3.8  数组操作指令  48
3.3.9  异常指令  48
3.3.10  跳转指令  48
3.3.11  比较指令  49
3.3.12  字段操作指令  50
3.3.13  方法调用指令  50
3.3.14  数据转换指令  51
3.3.15  数据运算指令  51
3.4  Dalvik指令集练习——写一个Dalvik版的Hello World  52
3.4.1  编写smali文件  52
3.4.2  编译smali文件  54
3.4.3  测试运行  54
3.5  本章小结  55
第4章  Android可执行文件  56
4.1  Android程序的生成步骤  56
4.2  Android程序的安装流程  59
4.3  dex文件格式  66
4.3.1  dex文件中的数据结构  66
4.3.2  dex文件整体结构  68
4.3.3  dex文件结构分析  71
4.4  odex文件格式  80
4.4.1  如何生成odex文件  80
4.4.2  odex文件整体结构  81
4.4.3  odex文件结构分析  83
4.5  dex文件的验证与优化工具dexopt的工作过程  88
4.6  Android应用程序另类破解方法  91
4.7  本章小结  93
第5章  静态分析Android程序  94
5.1  什么是静态分析  94
5.2  快速定位Android程序的关键代码  94
5.2.1  反编译apk程序  94
5.2.2  程序的主Activity  95
5.2.3  需重点关注的Application类  95
5.2.4  如何定位关键代码——六种方法  96
5.3  smali文件格式  97
5.4  Android程序中的类  100
5.4.1  内部类  100
5.4.2  监听器  102
5.4.3  注解类  105
5.4.4  自动生成的类  108
5.5  阅读反编译的smali代码  110
5.5.1  循环语句  110
5.5.2  switch分支语句  115
5.5.3  try/catch语句  121
5.6  使用IDA Pro静态分析Android程序  127
5.6.1  IDA Pro对Android的支持  127
5.6.2  如何操作  128
5.6.3  定位关键代码——使用IDA Pro进行破解的实例  132
5.7  恶意软件分析工具包——Androguard  135
5.7.1  Androguard的安装与配置  135
5.7.2  Androguard的使用方法  137
5.7.3  使用Androguard配合Gephi进行静态分析  144
5.7.4  使用androlyze.py进行静态分析  148
5.8  其他静态分析工具  152
5.9  阅读反编译的Java代码  152
5.9.1  使用dex2jar生成jar文件  152
5.9.2  使用jd-gui查看jar文件的源码  153
5.10  集成分析环境——santoku  154
5.11  本章小结  156
第6章  基于Android的ARM汇编语言基础——逆向原生!  157
6.1  Android与ARM处理器  157
6.1.1  ARM处理器架构概述  157
6.1.2  ARM处理器家族  158
6.1.3  Android支持的处理器架构  159
6.2  原生程序与ARM汇编语言——逆向你的原生Hello ARM  160
6.2.1  原生程序逆向初步  160
6.2.2  原生程序的生成过程  162
6.2.3  必须了解的ARM知识  164
6.3  ARM汇编语言程序结构  166
6.3.1  完整的ARM汇编程序  166
6.3.2  处理器架构定义  167
6.3.3  段定义  168
6.3.4  注释与标号  169
6.3.5  汇编器指令  169
6.3.6  子程序与参数传递  170
6.4  ARM处理器寻址方式  170
6.4.1  立即寻址  170
6.4.2  寄存器寻址  171
6.4.3  寄存器移位寻址  171
6.4.4  寄存器间接寻址  171
6.4.5  基址寻址  171
6.4.6  多寄存器寻址  171
6.4.7  堆栈寻址  172
6.4.8  块拷贝寻址  172
6.4.9  相对寻址  172
6.5  ARM与Thumb指令集  173
6.5.1  指令格式  173
6.5.2  跳转指令  174
6.5.3  存储器访问指令  175
6.5.4  数据处理指令  177
6.5.5  其他指令  184
6.6  用于多媒体编程与浮点计算的NEON与VFP指令集  185
6.7  本章小结  186
第7章  Android NDK程序逆向分析  187
7.1  Android中的原生程序  187
7.1.1  编写一个例子程序  187
7.1.2  如何编译原生程序  188
7.2  原生程序的启动流程分析  194
7.2.1  原生程序的入口函数  194
7.2.2  main函数究竟何时被执行  198
7.3  原生文件格式  199
7.4  原生C程序逆向分析  200
7.4.1  原生程序的分析方法  200
7.4.2  for循环语句反汇编代码的特点  204
7.4.3  if...else分支语句反汇编代码的特点  208
7.4.4  while循环语句反汇编代码的特点  211
7.4.5  switch分支语句反汇编代码的特点  215
7.4.6  原生程序的编译时优化  218
7.5  原生C++程序逆向分析  222
7.5.1  C++类的逆向  222
7.5.2  Android NDK对C++特性的支持  225
7.5.3  静态链接STL与动态链接STL的代码区别  227
7.6  Android NDK JNI API逆向分析  232
7.6.1  Android NDK提供了哪些函数  232
7.6.2  如何静态分析Android NDK程序  233
7.7  本章小结  235
第8章  动态调试Android程序  236
8.1  Android动态调试支持  236
8.2  DDMS的使用  237
8.2.1  如何启动DDMS  237
8.2.2  使用LogCat查看调试信息  238
8.3  定位关键代码  240
8.3.1  代码注入法——让程序自己吐出注册码  240
8.3.2  栈跟踪法  244
8.3.3  Method Profiling  247
8.4  使用AndBug调试Android程序  250
8.4.1  安装AndBug  251
8.4.2  使用AndBug  251
8.5  使用IDA Pro调试Android原生程序  254
8.5.1  调试Android原生程序  255
8.5.2  调试Android原生动态链接库  256
8.6  使用gdb调试Android原生程序  260
8.6.1  编译gdb与gdbserver  260
8.6.2  如何调试  262
8.7  本章小结  264
第9章  Android软件的破解技术  265
9.1  试用版软件  265
9.1.1  试用版软件的种类  265
9.1.2  实例破解——针对授权KEY方式的破解  265
9.2  序列号保护  271
9.3  网络验证  272
9.3.1  网络验证保护思路  272
9.3.2  实例破解——针对网络验证方式的破解  273
9.4  In-app Billing(应用内付费)  277
9.4.1  In-app Billing原理  277
9.4.2  In-app Billing破解方法  280
9.5  Google Play License保护  281
9.5.1  Google Play License保护机制  281
9.5.2  实例破解——针对Google Play License方式的破解  283
9.6  重启验证  284
9.6.1  重启验证保护思路  285
9.6.2  实例破解——针对重启验证方式的破解  285
9.7  如何破解其他类型的Android程序  296
9.7.1  Mono for Android开发的程序及其破解方法  296
9.7.2  Qt for Android开发的程序及其破解方法  301
9.8  本章小结  309
第10章  Android程序的反破解技术  310
10.1  对抗反编译  310
10.1.1  如何对抗反编译工具  310
10.1.2  对抗dex2jar  311
10.2  对抗静态分析  312
10.2.1  代码混淆技术  312
10.2.2  NDK保护  315
10.2.3  外壳保护  316
10.3  对抗动态调试  316
10.3.1  检测调试器  316
10.3.2  检测模拟器  317
10.4  防止重编译  318
10.4.1  检查签名  318
10.4.2  校验保护  319
10.5  本章小结  320
第11章  Android系统攻击与防范  321
11.1  Android系统安全概述  321
11.2  手机ROOT带来的危害  321
11.2.1  为什么要ROOT手机  321
11.2.2  手机ROOT后带来的安全隐患  322
11.2.3  Android手机ROOT原理  322
11.3  Android权限攻击  329
11.3.1  Android权限检查机制  329
11.3.2  串谋权限攻击  333
11.3.3  权限攻击检测  336
11.4  Android组件安全  339
11.4.1  Activity安全及Activity劫持演示  340
11.4.2  Broadcast Receiver 安全  343
11.4.3  Service安全  345
11.4.4  Content Provider安全  346
11.5  数据安全  347
11.5.1  外部存储安全  347
11.5.2  内部存储安全  348
11.5.3  数据通信安全  350
11.6  ROM安全  351
11.6.1  ROM的种类  352
11.6.2  ROM的定制过程  352
11.6.3  定制ROM的安全隐患  359
11.6.4  如何防范  360
11.7  本章小结  361
第12章  DroidKongFu变种病毒实例分析  362
12.1  DroidKongFu病毒介绍  362
12.2  配置病毒分析环境  363
12.3  病毒执行状态分析  364
12.3.1  使用APIMonitor初步分析  365
12.3.2  使用DroidBox动态分析  369
12.3.3  其他动态分析工具  373
12.4  病毒代码逆向分析  376
12.4.1  Java层启动代码分析  376
12.4.2  Native层启动代码分析  381
12.4.3  Native层病毒核心分析  393
12.5  DroidKongFu病毒框架总结  404
12.6  病毒防治  406
12.7  本章小结  406

编辑推荐

国内第一本Android软件安全书别让你的代码成为别人的炮灰eoe全球最大中文Android开发者社区、看雪论坛、安卓巴士          推荐每一位Android开发者的必备之书!在Android这个平台,我们已面临诸多威胁!2013年超过1800万台Android设备会遭遇某种形式的恶意软件的攻击。  恶意代码和病毒数量呈指数增长;  应用软件和数字内容的版权不断遭到侵害;  软件破解、篡改、广告库修改和植入、应用内付费破解等普遍存在;  软件本身的安全漏洞也频繁出现在国内外互联网企业的产品中;  数据泄露和账户被盗等潜在风险让人担忧;  官方系统、第三方定制系统和预装软件的漏洞不断被发现。要掌握主动,免除威胁,你应了解真相!安全技术几乎都是双刃剑,它们既能协助我们开发更有效的保护技术,也几乎必定会被攻击者学习和参考。这里的问题是,大量安全技术的首次大范围公开,是否会带来广泛的模仿和学习,从而引发更多的攻击?在这个问题上,安全界一直存在争议。这是任何一本里程碑式的安全书籍都无法绕开的话题。在《信息安全工程》中,Ross Anderson说:"尽管一些恶意分子会从这样的书中获益,但他们大都已经知道了这些技巧,而好人们获得的收益会多得多。"正是基于对这种观念的认同,才使得这本书呈现于此。强实践性。这本书的几乎每一个部分,都结合实际例子,一步步讲解如何操作。缺乏可操作性,是Android安全方面现有论文、白皮书、技术文章最大的问题之一,很多人读到最后可能对内容有了一些概念,却不知道从何下手。强时效性。作者在写作的同时,持续跟随业界最新进展,刚刚发布不久的Santoku虚拟机、APIMonitor等工具,以及Androguard的新特性等,已然出现在了这本书中。

作者简介

本书由浅入深、循序渐进地讲解了Android 系统的软件安全、逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android 软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android 病毒的全面剖析。
本书适合所有Android 应用开发者、Android 系统开发工程师、Android 系统安全工作者阅读学习。


 Android软件安全与逆向分析下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计1条)

  •     以前没有整体地从事过这方面的学习与研究, 感謝作者提供了这样一个详实的学习材料.全书内容主要分为APP Crack 与 系统的安全防护.各章节的例子非常适合打手研究与体会.建议将各章节的实例都实践一下, 从中掌握工具的使用与问题分析的方法思路.以前做过很长一段时间的系统兼容性的工作, 也许早点接触本书可以更快地对应用进行定位与分析.

精彩短评 (总计51条)

  •     很多工具都讲解了,比较贴近实际
  •      满满的干货,值得细看
  •     知识涵盖全面,但有一定难度。
  •     目前写android安全的书不多,此书应该是目前最佳的一本了
  •     内容非常丰富,安卓逆向科普类型的书。
  •     挺全挺详细的,还和写序的人一起吃过饭,挺不错的人~
  •     朋友推荐,看起来不错。好评!
  •     入门图书
  •     这本书还是更加侧重软件本身加固的,对于代码改进的帮助不是很多。Android安全大火ing
  •     内容深入浅出,图文并茂!很好的一本!
  •     讲安全的书少,内容还行,不过需要深入的学习,目前看了小部分,了解了之前未知和未懂的地方。
  •     这种书太坏啦!!!!
  •     写的挺好,看的轻松
  •     适合入门级
  •     花了两天时间粗略的读了一遍。作者太厉害了!非常值得阅读并实践里面的例子
  •     看雪网上的高手,长期专注和实战
  •     非常适合逆向的入门,对于Android应用开发的一些底层dx也有比较详细的介绍,适合一看。
  •     因为工作的缘故涉及到破解等方面的内容,所以快速的翻阅了大部分章节。应该说写的内容还算丰富,不过笔墨分配还可以斟酌。介绍的工具较多,需要参考其它资料文档,并且加以实例练习才能掌握。 某些章节还会随时研究。
  •     8gjlo roa c7 5o7fb jm6f 6f 4a 9m nom ea rgfb bgfb tgm n6f b7 4m 87f ea 5om fa pm ta ea 4a6f h6 tm ea7 h6 9ma 86f 4a6f ta o7 46g om nogm 9m6f 4m b6g bm6f tm 96aqac o7 nh6ada roa ea7 no6g o6a nm6f taf noa pm t6g noa ogm tgfb no6fb roa t6g ia6f hafb rom6 d6g eam o6a tgm rma ogm roa eam hafb 96g 56g y7a noa 4m y6f t7
  •     不错,质量很好,正版书!
  •     好书!
  •     google的说明文档里面都有的,只不过是英文的!不过还是非常感谢,
  •     我默默的说下,花了三个小时浏览了一遍~~本书讲的比较细,看得出作者试图从底层、从原理来说明一些问题。。但是估计考虑到整个书的定位上,所以系统机制、软件内部机理还是不是很多~~内容上有不小篇幅介绍了smali、dex、arm指令内容。。最后想说的是,本书是Android软件逆向、调试、分析的入门好书,值的本人这样菜鸟学习~~
  •     Android逆向良心之作
  •     感觉就是作者博客零碎的结合体,内容都是泛泛带过,没有深入。虽然作者是大牛但是在写这部内容上还少了我们需要看到的东西,就是深入理解
  •     这本就是我最想研究的那部分,包括反编译,类似个人笔记
  •     想入门不错
  •     真正认识Android,这是特别优秀的一本书。
  •     很全面的一本书,适合初学者入门
  •     内存不错,要是有个光碟附送源码就好了
  •     在看雪上看非虫出书了 买一个~
  •     非常不错,android安全的经典之作,感觉比国外的好多了,有基础、有核心、有广度、有深度的四有好书,不需要累述的决不浪费笔墨,图书馆续借两次后果断买了一本。
  •     感觉笔误的地方比较多啊,是不是应该好好校对一下...
  •     多看点安全的书,coding也就会多注意这方面的问题。
  •     这本书毋庸置疑会成为逆向工程领域的经典著作。
  •     论坛的博客,都是一个软件的介绍和怎么用,底层的东西都没有,没有什么有用的东西
  •     没得说,干货很多,需要慢慢研究啊!
  •     Android没什么好玩的。从入门到放弃
  •     和不错的介绍Android逆向工程的书籍,条理清晰,实战性很强。对自己现在进行的任务很有帮助。虽然自己不是这个方向的大牛,但是确实觉得这款技术非常有趣!强烈推荐!
  •     如果是刚学android的话看这本书会很头疼。。。。不过里面还是有不少干货的。
  •     基础底子不行,看的有些吃力
  •     对反编译和保护手段的介绍都无甚稀奇,对编译和安装等流程介绍也停留在代码流程的讲解上。关于 dalvik 指令 和 smali 的介绍还算殷实,需要的时候应该用的上。无论如何,只要签名抓牢,就还有最后的稻草。
  •     居然有个人比我还早读过,肯定是编辑,哼……
  •     涵盖内容丰富,但整体思维与主要处理思路方法解释不详。 也可能是系统安全技术,很多是crack
  •     本来是为了毕业答辩买的这本书,可惜答辩完了也没用上,不过书还是不错的,有时间再抽空看看吧
  •     还是要和伪机器码死磕才行啊。。。
  •     挺好
  •     快速入门书
  •     很实用,内容详细,介绍的很清楚
  •     很好的一本书。从这本书我知道了Java语言有多么的不安全。
  •     介绍得很细,实例也挺多
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024