Android应用安全防护和逆向分析
上QQ阅读APP看书,第一时间看更新

前言

随着移动应用的广泛使用,不可忽视的一个问题就是信息安全。本书从Android应用安全和逆向两个方面来介绍移动开发中如何做好安全。

我本来不是从事安全逆向工作的,但是一个偶然的机会使我发现逆向研究非常有趣,因为在逆向出别人的App那一刻会觉得无比自豪。

第一次逆向是因为遇到一个问题需要去解决,记得当时想查看一个App的内部资源信息,尝试使用apktool反编译程序,惊奇地发现原来别人的App反编译之后会有这么多东西,逆向真的很有趣。而后在开发中无法实现或者没有相应的资源时就去反编译别人的App,查看对应的代码怎么实现。后来就反编译那些有阻碍的应用,慢慢摸索,克服困难,每研究成功一个案例,便是对自身技能的一次提高。从第一次使用apktool工具,到使用Jadx可视化工具,再到用IDA工具调试,一步一个脚印走过来,经验逐渐丰富,技能也慢慢提升了。

逆向研究需要一种逆向思维,我没有接受过专业训练,只是在业余时间看相关书籍,找几个样本研究,从简单到难,在这个过程中慢慢学到很多技术。本书就是我这几年学习与探索的总结。

本书涉及内容有点多,但是没有一章是多余的,每章内容都是干货。本书包括26章,分为四篇。

基础篇

基础篇包括第1~7章,主要介绍Android技术中与逆向相关的基础知识,为后续章节的学习做准备。

第1章通过对Android中锁屏密码加密算法的分析,带领读者进入安全世界,这方面内容不算复杂,但是需要阅读Android源码来得到算法分析,其中一个知识点是如何通过查看Android源码来帮助解决开发过程中遇到的问题,这是所有Android开发人员必备的技能。通过找到锁屏密码入口,一步一步跟踪最终得到密码加密算法,以及加密之后的内容存放在哪里。这是进入安全逆向分析世界的大门。

第2章主要介绍Android中NDK开发知识。为了安全考虑,现在很多应用把一部分功能做到了Native层,所以如果不知道NDK开发技巧,就无法进行后续的逆向操作。这一章从搭建环境到每个方法的使用,详细讲解了Android中NDK开发的技巧。

第3章主要介绍Android中开发以及逆向需要用到的命令,每个命令都有特定的案例和用法,这些命令不仅仅用于逆向,也能够帮助开发人员提升开发效率,所以了解和掌握这些命令是至关重要的。

第4~7章主要剖析Android中编译之后的apk包含的四类主要文件格式,这部分内容可能有点枯燥,但是至关重要,因为在安全防护或者逆向分析中都有很重要的意义。

防护篇

防护篇包括第8~14章,主要介绍安全防护的相关内容,是本书的核心内容之一。

第8章介绍现在一些应用主要用到的安全防护策略,如混淆、签名校验、反调试检测等,每个安全策略都给出了详细介绍。

第9章介绍Android开发中经常用到的一些权限,介绍如果对这些特殊权限操作不当会带来什么样的安全问题,以及如何预防。

第10章介绍Android中的run-as命令以及如何分析系统安全策略,详细介绍了App、shell、system这三种身份,并介绍了一些技巧,比如如何对应用进行升级权限、降低权限等操作。

第11章讲解Android配置文件中的allowBackup属性引发的安全问题,以及如何应对。本章用一个案例来分析如何导出沙盒数据查看应用中的密码信息,修改密码信息然后再进行还原,全程无需root权限即可完成。

第12章介绍Android中的应用签名机制,讲解应用的签名信息是如何保存的、如何验证的,签名机制的流程,以及如何预防安全问题。

第13章介绍在Android中对apk进行加固的策略,以及如何对恶意者分析apk文件的操作进行防护,还涉及Android中的动态加载机制,并通过动态加载技术实现apk文件的解密功能。

第14章介绍在Android中如何对so文件加固,如何做到安全防护功能。

工具篇

工具篇包括第15~19章,主要介绍逆向分析需要用到的几个工具,本书从实际应用出发,详细介绍每个工具的具体用法,特别是在使用的过程中遇到问题时的处理方法。

第15章介绍逆向工作中用到的工具,以及如何开启设备的调试总开关,这个技能在逆向调试的时候非常重要。

第16章主要介绍Android中反编译神器apktool和Jadx,详细介绍了这两个工具如何使用,以及使用过程中遇到问题时的处理方法。

第17章主要介绍Android中一款Hook神器Xposed,详细介绍这个工具的用法,以及遇到问题时的处理方法。

第18章主要介绍一款脱壳工具,它是基于Xposed工具编写的,可以自动脱壳。

第19章主要介绍Android中另外一款Hook神器Cydia Substrate,详细介绍了这个工具的用法以及遇到问题时的处理方法。

操作篇

操作篇包括第20~26章,主要介绍Android中的逆向操作技巧,包括静态方式和动态方式逆向,用一个经典的加固应用作为逆向案例分析了现阶段脱壳的大致流程,还介绍了Android开发中会遇到的系统漏洞,并分析了一个经典的病毒样本。

第20章主要介绍如何利用静态方式逆向应用,用一个案例讲解了静态防护逆向应用的流程。

第21章主要介绍如何使用Eclipse动态调试smali代码来逆向应用,用一个案例分析整个操作流程。

第22章主要介绍使用IDA工具动态调试so源码,同时也介绍了一些应对反调试检测的方法。

第23章主要介绍如何逆向那些经过加固的应用,用一个案例详细介绍了每一步操作,最后总结了现在脱壳操作的大致流程。

第24章主要总结之前介绍的逆向知识,用一个经典案例作为收尾,讲解了现阶段逆向应用的大体流程和思路。

第25章介绍Android开发中会遇到的系统漏洞——一个是解压文件漏洞,一个是录屏授权漏洞。如果这两个漏洞不做修复,会导致应用沙盒数据篡改以及用户隐私数据的丢失等。该章详细介绍了漏洞的产生原因以及如何进行修复。

第26章介绍Android中一个非常经典的文件加密病毒样本,通过静态方式分析了该病毒样本的工作原理,总结了处理该类病毒的方法。

什么人适合阅读本书

阅读本书需要有一定的Android开发基础。有的读者可能会觉得第1章内容就有点深,本书第1章的目的在于把读者带入安全世界,看不懂没关系,可以从第2章开始看下去,毕竟应用开发领域和安全逆向领域有很多不一样的地方。本书最大的特点在于非常实用,用案例讲解详细操作步骤,跟着每一步具体操作,才能真正看明白。可以把本书作为一本参考书,没看懂不要急,多操作几遍试试。

欢迎联系我

本书用到了很多工具和案例样本、代码,几乎所有代码都给出了具体下载地址,如果在操作过程中发现下载失败或者链接失效,请联系我,可以加我的微信peter_ jw212,也可以关注微信公众号“编码美丽”进行留言,或者访问我的博客http://blog.csdn.net/jiangwei0910410003,以及我的个人网站http://www.wjdiankong.cn。有任何问题都可以通过这些渠道联系我,我将尽力给出详细解答。

有的读者读完这本书之后,可能发现有些内容对新技术不再生效了,比如加固和脱壳技术。我在此要说明一下,这些技术是时刻都在变的,所谓道高一尺,魔高一丈,攻防技术每一天都可能改变。所以本书选择了最基本的入门技术进行讲解,因为只有掌握了这些技术,才能继续学习并产生灵感来应对日后变化的技术。我认为最基本的入门技术也是最重要的技术。

致谢

这本书的写作历时一年多,真心觉得很不容易。如果觉得本书写得好,就请推广点赞;如果发现本书有错误的地方,还请批评指正。毕竟第一次写书没有那么完美,期待读者的指正和批评。最后想感谢一些人,他们在我写书过程中给予了技术和精神上的支持。非常感谢非虫大神(《Android软件安全和逆向分析》等书作者)对本书第4章、第7章的so和dex文件格式解析技术的支持;感谢看雪论坛的MindMac大神对第5章的arsc文件格式解析技术的支持;感谢看雪论坛的ThomasKing大神对第14章加固技术的支持;感谢我的同学汪恒和殷传宝对我从开始写作到出版这一路上的陪伴和鼓励。