当前位置: 代码迷 >> Android >> Android保险之旅系列博客导读
  详细解决方案

Android保险之旅系列博客导读

热度:105   发布时间:2016-04-24 11:50:17.0
Android安全之旅系列博客导读

    总结下近一年的学习经历,以中国的新年为节点。时间从2015年年后到今天,2015年年末。

    首先我必须要感谢前辈的书籍和高质量的博客。

    1、重新学习了一遍《Linux内核源代码情景分析上下册》,毛德操著,并记录学习历程,写下了博客。

    2、重新学习了一遍《Android系统源代码情景分析》,罗升阳著,并记录从开机启动到Home界面的展示整个流程。

    3、学习了一个小型java虚拟机的源代码,并调试修改源代码中的错误,最后可以运行了。参考链接https://github.com/cloudsec/ajvm。

    4、学习了Dalvik虚拟机的工作原理,参考的博客是老罗写的,列出来:

    1)Dalvik虚拟机简要介绍和学习计划。

    2)Dalvik虚拟机的启动过程分析。

    3)Dalvik虚拟机的运行过程分析。

    4)Dalvik虚拟机JNI方法的注册过程分析。

    5)Dalvik虚拟机进程和线程的创建过程分析。

    6)Dalvik虚拟机垃圾收集机制简要介绍和学习计划。

    7)Dalvik虚拟机Java堆创建过程分析。

    8)Dalvik虚拟机为新创建对象分配内存的过程分析。

    还有就是邓老师最近写的深入理解Dalvik虚拟机,在看邓老师的文章前,最好先看老罗的文章,老罗的文章具有系统性,邓老师的文章是看完虚拟机的总结,直接看邓老师的不容易看懂。

    为了看懂Dalvik虚拟机,最好理解java虚拟机,不过市面上讲java虚拟机的几乎都不涉及源码,没有什么用,所以推荐大家去看看上面github实现的小型jvm,对应解释代码的博客请参考http://club.alibabatech.org/article_detail.htm?articleId=6。

    我的学习思路就是多看源码,少看理论,这可能是低手学习的比较好的途径,高手一般愿意看理论,看理论的时候代码就已经在心里生成了。

     5、学习Android安全,并已经写下了几篇文章,涉及到Android安全机制,反编译等。

     6、下面要说重点了,从十一后就没有更新博客,这段时间我一直在研究Android安全,我打算接下来的三个礼拜把近期研究的成果分享出来。现在简单的梳理一下,方便后续写博客。

     以下每个标题都会独立写成博客。所有博客都会给出源代码。

     Android逆向分析

     0x00

     研究了Android加固的原理,网上大多只给多了源码,参考Android中的Apk的加固(加壳)原理解析和实现,但没有说明为什么,我从系统的源码的角度来分析目前常用加壳脱壳的原理,使用Android2.3源码。

    0x01

    我们在分析阿里壳子的时候,发现脱壳根本不涉及java层的代码,可见核心脱壳的程序写在了native层。这篇博客中我会把所有的脱壳程序通过JNI移到native层,并在Android2.3的模拟机上运行成功,并会公开源代码。

    0x02

    讲解DexClassLoader、PathClassLoader原理,adb install和开机自动时加载dex,都是通过PathClassLoader。而动态加壳脱壳则使用的是DexClassLoader。

    讲解上面的整个流程,包括优化dex。简单的脱壳都是在dvmDexFileOpenPartial下断点,结合下面一篇文章你就能明白为什么要在这个函数下断点。

    0x03

    讲解dex文件优化,dex文件解析为DexFile,运行时加载数据为ClassObject到最后运行的流程。基于Android2.3源码进行讲解。

    0x04

    讲解Davlik虚拟机运行时篡改字节码,参考apk自我保护的一种实现方式——运行时自篡改dalvik指令。

    0x05

    阿里的壳子会用一种技巧导致反编译dex,看到的方法都被替换为throw exception(),这是怎么做到的,运行时又是怎么样动态修复的呢?在这篇文章中,我会抛砖引玉,把其中一个方法修改为throw exception(),并且在运行时动态修复。当然所有的代码都会放在github上。

    0x06

    讲解一个开源的脱壳机,DexHunter,参考从Android运行时出发,打造我们的脱壳神器。进一步理解Dalvik虚拟机执行流程。其实就是一张图:



    0x07

    使用ida静态和动态调试so,网上有很多这样的文章,为了在init_array下断点,每个人都不一样,其中最有效率的一个是安卓动态调试七种武器之孔雀翎-ida-pro,除了分析动态调试so,还要分析so调用函数的堆栈,方便看懂so的arm汇编语言。

    0x08

    讲解常用的native反调试的方法,并且讲解如何通过修改so来过掉这些反调试。

    0x09

    使用ida动态调试dex的smali源码,有两种方式,一种是反编译apk + eclipse中调试smali,一种是直接使用ida调用dex。

    0x0a

    讲解常用的防反编译的方式,比如通过验证签名,验证是否运行在虚拟机中等方式。这部分代码可能在java层,也可能在native层。

    0x0b

    讲解通过smali注入log或者注入方法的调用栈,来动态分析程序的运行。

    0x0c

    讲解so加壳,一是对section加壳,一个是对函数加壳。参考Android逆向之旅---基于对so中的section加密技术实现so加固,Android逆向之旅---基于对so中的函数加密技术实现so加固。

    0x0d

    讲解so注入和c/c++利用GOT表进行hook。参考Android中的so注入(inject)和挂钩(hook) - For both x86 and arm。

    0x0e

    讲解dex注入,参考dex注入实现详解。

    0x0f

    讲解java拦截技术,最简单的拦截就是替换,在加壳脱壳程序中我们已经看到了。还有一种方式是通过Dalvik虚拟机的方式,如果我们能把一个Java函数修改为Native函数,并且将nativeFunc指针设置为自定义的函数,那么就可以实现拦截了,参考注入安卓进程,并hook java世界的方法。

    0x10

    讲解从system.loadlibrary到执行init_array的流程。


    Android APP漏洞挖掘

    组件公开安全漏洞

    Content Provider文件目录遍历漏洞

    AndroidManifest.xml配置安全检测

    Intent劫持风险安全检测

    数据存储安全检测

    WebView高危接口安全检测:webview高危接口漏洞,有漏洞利用代码和详细的讲解。

    拒绝服务攻击安全检测

    WebView明文存储密码漏洞

    随机数生成函数使用错误

    WebView不检验证书漏洞

    中间人攻击漏洞: 有漏洞代码和详细的讲解。

    从sdcard加载dex漏洞

    Activity被劫持风险

    file跨域访问:webview跨域访问访问文件,有漏洞利用代码和详细的讲解。

    端口开发:主要分析Baidu地图和高德地图,并有漏洞利用代码,展示实际的效果。并且通过反编译smali分析了为什么漏洞利用代码要这么写

    明文存储,明文传输

     

    Android系统漏洞

    0x00

    讲解了Linux下ROP,参考一步一步学ROP之linux_x86篇。

    0x01

    讲解了android下ROP,DEP,ASLR,Information Leak,参考一步一步学rop之android-arm-32位篇。

    0x02

    讲解了cve-2014-7911,讲解了Dalvik-Heap Spray,C++反编译后代码的利用,参考Cve-2014-7911安卓提权漏洞分析,再论CVE-2014-7911安卓序列化漏洞。

    0x03

    讲解部分Android Libcutils库中整数溢出导致的堆破坏漏洞的发现与利用,漏洞利用代码比较复杂,只讲解其中一部分。

    实际的博客可能还有出入,我也在学习中,欢迎交流,每条回复我都会认真回。

  相关解决方案