呃呃,貌似这是我第一次发教程贴,人家有些激动。。。。以往嫌麻烦,又忙于出整套的视频教程,。。。首先要表示感谢,看了一晚上论坛的帖子了,加上老鬼这么多老朋友,,,
1.1安卓的加密,免杀与防修改
加密的对手就是破解,在安卓前期,由于字节码的存在,也就是smali,极易被修改,然后被二次打包。面对这种情况,很多加密公司蓬勃发展,如:爱加密,梆梆加固,娜加加固,而百度,阿里,腾讯,360也各自推出自己的加密方案。实际上,安卓加密的发展,和电脑端的发展遵守着类似的轨迹,这个轨迹也是我在免杀中提出来的,从外存-内存-系统ring0底层。
免杀与加密有很多共通之处,简单来说,加密是在保护软件不被他人破解获取源码或修改,而免杀是在保护病毒不被杀软破解查杀。加密可以达到一定免杀的效果,但免杀绝不仅仅是在加密。在安卓端,最常见的问题就是二次打包,安卓的加密最直接的效果便是防修改,但防修改除了加密之外,也有其他方法,如各种验证,签名验证、代码自检等。
1.2 安卓加密历程简介
从安卓APP的加密历程来看,我们发现以下大致从简单到困难的过程:
1.字符串混淆:使用混淆技术,对函数名,类名等最简单的字符串名称混淆,然而名称混淆并没有太大意义,后来又发展为流程混淆、逻辑混淆等;如早期的APKProtect
2.DEX加壳加密:DEX中包含了源码,将DEX进行加密加壳的处理,此时本质上来说,只是根据了DEX的文件结构,对DEX进行加密处理。还有一种,就是把混淆技术结合起来,在dex中增添类似于花指令的无用类;
3.动态SO加壳加密:将DEX封装在so里,此时so就相当于一层壳,程序开始运行的DEX是壳的DEX,程序代码往往只有system.loadlibary(...),当需要时,在内存中,从壳里提取出真正的DEX运行;
4.其他文件的加密:这些文件的加密基本都是基于十六进制,修改文件的十六进制码,看过我的免杀一定知道,00变01这样的技术手段。(1)XML文件加密:AndroidManifest.xml文件加密;(2)ARSC文件加密:resources.arsc文件加密
5.ZIP压缩加密与JAVA伪加密:可以理解为类似于电脑端upx这样的压缩壳;
6.安卓软件的防破解验证手段及防调式,如:文件验证、网络验证、重启验证、签名验证、代码验证等等;防调式一般都是防止动态调式下断,一旦发现有工具在调式,就退出;
7.动态加载dex,把dex放在别的地方,比如就可以放在so中,此时就类似于3,当然也可以是网络中,程序需要时再动态加载。动态加载的dex可以是整个dex,也可以更复杂一些,使用类似于源码免杀中的分割技术,把dex分开放在资源里,或一些自定义部分。
8.动态反射加载整个APK:利用反射机制,将整个APK,如源码、资源等都利用反射来加载
9.更为高层的源码级加密技术,如:源码分割、源码改非法类、源码级编写一个壳等。
10.动态框架加密
1.3 基于第三方的加密
我们可以发现,把一个拦截马稍微处理下,哪怕是简单的混淆处理,然后再利用爱加密加密一下,360及大部分杀软都不会报毒。不过如今使用爱加密非常麻烦了,都要身份证。
最后,我们来看看,各种第三方加密手段的特征。
另外,AIDE与IAPP这两个开发环境的加密,AIDE有时只有一个logcat,有时却比较清晰,这可能是因为原创开发与导入开发,或作者本身的技术及意识。IAPP是什么也看不到的,必须解密iyu,常见的有霸哥和灰狼的解密iapp神器。
至于以上加密的更进一步阐述,以及如何解密,就可以问。。老鬼,默小坑。。。。
最后弱弱的问一句,有没有对拦截马锁机等等病毒木马分析和免杀感兴趣的,不过我的免杀都是以逆向免杀为主喔,一起交流嘛 |