Android软件安全与逆向分析的书名

本书由浅入深、循序渐进地讲解了Android 系统的软件安全、逆向分析与加密解密技术。包括Android软件逆向分析和系统安全方面的必备知识及概念、如何静态分析Android 软件、如何动态调试Android 软件、Android 软件的破解与反破解技术的探讨,以及对典型Android 病毒的全面剖析。

本书适合所有Android 应用开发者、Android 系统开发工程师、Android 系统安全工作者阅读学习。 丰生强(网名非虫)

Android软件安全专家。看雪论坛Android安全版版主;安卓巴士开发交流版版主。

对Android软件与系统安全有狂热的爱好和独到的见解,对Android系统的全部源代码进行过深入地研究和分析。逆向分析实战经验丰富。

在国内信息安全杂志上发表过多篇有价值的软件安全文章,目前就职于国内某Android开发企业,常年混迹于看雪论坛(ID非虫)。

作者邮箱:fei_cong@hotmail.com

愿与国内安全爱好者***同交流与探讨安全技术。 第1章Android程序分析环境搭建 1  1.1Windows分析环境搭建 1  1.1.1安装JDK 1  1.1.2安装Android SDK 3  1.1.3安装Android NDK 5  1.1.4Eclipse集成开发环境 6  1.1.5安装CDT、ADT插件 6  1.1.6创建Android Virtual Device 8  1.1.7使用到的工具 9  1.2Linux分析环境搭建 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.1Dalvik虚拟机的特点——掌握Android程序的运行原理 29  3.1.1Dalvik虚拟机概述 29  3.1.2Dalvik虚拟机与Java虚拟机的区别 29  3.1.3Dalvik虚拟机是如何执行程序的 34  3.1.4关于Dalvik虚拟机JIT(即时编译) 36  3.2Dalvik汇编语言基础为分析Android程序做准备 37  3.2.1Dalvik指令格式 37  3.2.2DEX文件反汇编工具 39  3.2.3了解Dalvik寄存器 40  3.2.4两种不同的寄存器表示方法——v命名法与p命名法 42  3.2.5Dalvik字节码的类型、方法与字段表示方法 43  3.3Dalvik指令集 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.4Dalvik指令集练习——写一个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.1Android程序的生成步骤 56  4.2Android程序的安装流程 59  4.3dex文件格式 66  4.3.1dex文件中的数据结构 66  4.3.2dex文件整体结构 68  4.3.3dex文件结构分析 71  4.4odex文件格式 80  4.4.1如何生成odex文件 80  4.4.2odex文件整体结构 81  4.4.3odex文件结构分析 83  4.5dex文件的验证与优化工具dexopt的工作过程 88  4.6Android应用程序另类破解方法 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.3smali文件格式 97  5.4Android程序中的类 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.2switch分支语句 115  5.5.3try/catch语句 121  5.6使用IDA Pro静态分析Android程序 127  5.6.1IDA Pro对Android的支持 127  5.6.2如何操作 128  5.6.3定位关键代码——使用IDA Pro进行破解的实例 132  5.7恶意软件分析工具包——Androguard 135  5.7.1Androguard的安装与配置 135  5.7.2Androguard的使用方法 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.1Android与ARM处理器 157  6.1.1ARM处理器架构概述 157  6.1.2ARM处理器家族 158  6.1.3Android支持的处理器架构 159  6.2原生程序与ARM汇编语言——逆向你的原生Hello ARM 160  6.2.1原生程序逆向初步 160  6.2.2原生程序的生成过程 162  6.2.3必须了解的ARM知识 164  6.3ARM汇编语言程序结构 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.4ARM处理器寻址方式 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.5ARM与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.1Android中的原生程序 187  7.1.1编写一个例子程序 187  7.1.2如何编译原生程序 188  7.2原生程序的启动流程分析 194  7.2.1原生程序的入口函数 194  7.2.2main函数究竟何时被执行 198  7.3原生文件格式 199  7.4原生C程序逆向分析 200  7.4.1原生程序的分析方法 200  7.4.2for循环语句反汇编代码的特点 204  7.4.3if...else分支语句反汇编代码的特点 208  7.4.4while循环语句反汇编代码的特点 211  7.4.5switch分支语句反汇编代码的特点 215  7.4.6原生程序的编译时优化 218  7.5原生C++程序逆向分析 222  7.5.1C++类的逆向 222  7.5.2Android NDK对C++特性的支持 225  7.5.3静态链接STL与动态链接STL的代码区别 227  7.6Android NDK JNI API逆向分析 232  7.6.1Android NDK提供了哪些函数 232  7.6.2如何静态分析Android NDK程序 233  7.7本章小结 235  第8章动态调试Android程序 236  8.1Android动态调试支持 236  8.2DDMS的使用 237  8.2.1如何启动DDMS 237  8.2.2使用LogCat查看调试信息 238  8.3定位关键代码 240  8.3.1代码注入法——让程序自己吐出注册码 240  8.3.2栈跟踪法 244  8.3.3Method 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.4In-app Billing(应用内付费) 277  9.4.1In-app Billing原理 277  9.4.2In-app Billing破解方法 280  9.5Google Play License保护 281  9.5.1Google 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.1Mono for Android开发的程序及其破解方法 296  9.7.2Qt 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.2NDK保护 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.1Android系统安全概述 321  11.2手机ROOT带来的危害 321  11.2.1为什么要ROOT手机 321  11.2.2手机ROOT后带来的安全隐患 322  11.2.3Android手机ROOT原理 322  11.3Android权限攻击 329  11.3.1Android权限检查机制 329  11.3.2串谋权限攻击 333  11.3.3权限攻击检测 336  11.4Android组件安全 339  11.4.1Activity安全及Activity劫持演示 340  11.4.2Broadcast Receiver 安全 343  11.4.3Service安全 345  11.4.4Content Provider安全 346  11.5数据安全 347  11.5.1外部存储安全 347  11.5.2内部存储安全 348  11.5.3数据通信安全 350  11.6ROM安全 351  11.6.1ROM的种类 352  11.6.2ROM的定制过程 352  11.6.3定制ROM的安全隐患 359  11.6.4如何防范 360  11.7本章小结 361  第12章DroidKongFu变种病毒实例分析 362  12.1DroidKongFu病毒介绍 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.1Java层启动代码分析 376  12.4.2Native层启动代码分析 381  12.4.3Native层病毒核心分析 393  12.5DroidKongFu病毒框架总结 404  12.6病毒防治 406  12.7本章小结 406