这段时间我一直在研究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库中整数溢出导致的堆破坏漏洞的发现与利用 ,漏洞利用代码比较复杂,只讲解其中一部分。 |