七少月 发表于 2015-4-25 07:24:51

【安卓加密】 安卓加密发展简介

呃呃,貌似这是我第一次发教程贴,人家有些激动。。。。以往嫌麻烦,又忙于出整套的视频教程,。。。{:5_117:}首先要表示感谢,看了一晚上论坛的帖子了,加上老鬼这么多老朋友,,,
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神器。
   至于以上加密的更进一步阐述,以及如何解密,就可以问。。老鬼,默小坑。。。。

{:5_125:}最后弱弱的问一句,有没有对拦截马锁机等等病毒木马分析和免杀感兴趣的,不过我的免杀都是以逆向免杀为主喔,一起交流嘛

vxzv 发表于 2015-4-25 10:13:28

感谢楼主的分享 ,真心不错啊

vxzv 发表于 2015-4-25 10:17:16

整套教程在哪里???

水波摇曳 发表于 2015-4-25 14:19:18

赞一个

kanon 发表于 2015-4-25 14:53:10

好评 学习了

sndncel 发表于 2015-4-25 20:07:12

{:4_114:}真的是牛人呀。。。。。这些技术都学会了。那离大神也不远了呀。。。。

彼岸花开 发表于 2015-4-27 12:16:56

又涨姿势了,Android安全方面的教程不一定是破解相关的 加密的教程也希望大大多多分享哈

蜀黍的秘密 发表于 2015-4-28 10:04:56

我们都会有肉吃滴

荆轲刺秦琼 发表于 2015-4-29 10:23:36

{:4_86:}   给力

七少月 发表于 2015-4-30 00:58:23

谢谢大家的捧场哈,如果不介意的话,可以看看我在法总视频启发下,录的另一套unity 3d教程,不过逆向破解嘛,我还是小菜鸟,如果喜欢免杀,无论EXE免杀还是安卓免杀,无论LBE还是360,或是MIUI系统等,都可以交流哈。

下面是一点我关于unity 3d安卓逆向IL汇编反思的课件内容:
5.赋值语句修改的要点及技巧
语句格式:变量=表达式
很多人迷惑IL汇编,什么可以改,什么不可以改,什么改了最好,这都是需要锻炼的,但这里可以给出一个大概的要点

例子:
源代码上
   hp=hp #改为hp=1

IL修改:
1.ldarg.0:函数参数调用的开头,一般不能改;而且,IL语句之所以容易看,就是可以把一个ldarg.0看作一个语句或一段函数的开始;
2.ret:结尾,一般不能改;
3.ldarg.2(ldarg.3。。。):调用函数第几个参数,一般最好把这一句改掉;
4.conv.r4(Conv.I4。。。):可改可不改,不过你要知道,当有了这一句话,我们修改后的数据类型要和强制转换的数据类型匹配;
5.System.Single Monster::hp:当遇到System.A.B.C,情况比较复杂,需要参考两个因素才能决定要不要改。(1)如果C是一个类的话,比如是一个绘制类,就不能改;如果最后C是一个变量或属性的话就可以改;(2)要观察源代码,比如,若为return hp,这时就可以改        System.Single Monster::hp,如果源代码是hp = hp 或hp= hp-damage这样的,就不能改。
其他情况,需要具体分析,一般还是不改的好。实际,还是编程能力的一种体现。
               
小技巧:根据赋值语句从右向左执行的原则,也就是语句在下面的IL代码是源代码最左边的,我们通常可以改变量的上一个IL指令,例子中来看,就是System.Single Monster::hp上面一个。更简单的技巧,IL三句指令原则:
ldarg.0
XXXXX #修改的值
System.Single Monster::hp

希望大家喜欢喔
页: [1] 2 3
查看完整版本: 【安卓加密】 安卓加密发展简介