当前位置:主页 > 六肖期期准免费选一 >

Android安全之旅系列博客导读

发布日期:2020-12-22 05:09   来源:未知   阅读:

  这段时间我一直在研究Android安全,我打算接下来的三个礼拜把近期研究的成果分享出来。现在简单的梳理一下,方便后续写博客。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  Android数字证书概述Android系统要求每一个安装进系统的应用程序...