大概就是通过加载data/app/xx.apk,并且解密加载原dex,替换加载的apk的cookie为解密后
公司专注于为企业提供成都做网站、成都网站制作、微信公众号开发、商城建设,小程序开发,软件按需制作网站等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,成都创新互联公司更提供一系列网站制作和网站推广的服务。
的dex,就可以运行了。
加固的过程中需要三个对象:1、需要加密的Apk(源Apk)2、壳程序Apk(负责解密Apk工作)3、加密工具(将源Apk进行加密和壳Dex合并成新的Dex)主要步骤:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk.他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。
AndFix,全称是Android hot-fix,是一个Android热补丁框架。
原理是:apkpatch将两个apk做一次对比,然后找出不同的部分。可以看到生成的apatch了文件,后缀改成zip再解压开,里面有一个dex文件。通过jadx查看一下源码,里面就是被修复的代码所在的类文件,这些更改过的类都加上了一个_CF的后缀,并且变动的方法都被加上了一个叫@MethodReplace的annotation,通过clazz和method指定了需要替换的方法。然后客户端sdk得到补丁文件后就会根据annotation来寻找需要替换的方法。最后由JNI层完成方法的替换。
如果本地保存了多个补丁,那么AndFix会按照补丁生成的时间顺序加载补丁。具体是根据.apatch文件中的PATCH.MF的字段Created-Time。
局限性:不支持YunOS
无法添加新类和新的字段
需要使用加固前的apk制作补丁,但是补丁文件很容易被反编译,也就是修改过的类源码容易泄露。
使用加固平台可能会使热补丁功能失效。
andfix与Nuwa对比,
Nuwa是另一个热补丁框架。
你好,加固前不需要做代码混淆,直接提交原包进行加固即可。android 自带的代码混淆只是增加了破解者阅读代码的难度,并不能从根本上防止破解。加固是从多维度对代码进行保护,所以安全性更高。
1.避
免技巧:使用内部API。即便我们总是建议不要这么做,但还是有一些开发者选择使用那些不支持或者内部的API。例如,许多开发者使用内部的亮度控制和蓝
牙切换API,这些API出现在1.0和1.1版本上。一个Bug——在Android
1.5上进行了修正——允许App在不需要请求权限的情况下使用这些API。结果,使用了这些API的App在1.5上挂掉了。如果你在App中使用了这
些内部API,你需要做的是:停止这一做法,更新你的程序。
2.避
免技巧:直接操作Settings。严格来讲,这一条不算,因为我们可以通过Android本身进行操作。但之所以我们加上了这一条,是因为一些开发者做
了一些调皮的事情:一些App悄无声息地修改了系统设定,而没有通知用户。例如,一些App没有询问用户就直接打开了GPS,而另外一些则可能直接打开了
数据传输。
因此,应用程序不能直接操作某个特定的系统设定值,即便是它们之前能这么做。例如,App不能直接打开或关闭GPS。不是说使
用会导致App崩溃,而是不应该使用这些API。代替的,App需要发出一个Intent来启动相应的Settings配置画面,这样用户可以手动地修改
这些设定。详细情况可以参考android.provider.Settings.Secure类,你可以在1.5_pre(和之后的)SDK文档中找
到。注意,只有那些移动到Settings.Secure类中设定受到影响。其它的,还会像Android 1.1那样有着相同的功能。
3.避
免技巧:过分布局。由于View渲染部分的变化,在布局中,过于深(超过10层左右)或过于多(超过30个左右)的View树层次可能会导致程序崩溃。过
于复杂的布局总归是有危险的,尽管你可以认为Android
1.5已经好于1.1。大多数开发者不需要对此担心,但如果你的App有着非常复杂的布局,你还是应该对其“瘦身”。你可以使用一些高级的布局类,如
FrameLayout和TableLayout,来简化你的布局。
4.避
免技巧:不好的硬件假设。Android
1.5支持软键盘,因此,不久就会有很多设备不再包含物理键盘。如果你的程序假设物理键盘存在(例如,如果你创建一个自定义的View,并接收键按下消
息),你必须保证在只有软键盘的设备上也工作正常。想了解更多关于这方面的信息,请继续关注这个Blog,我们将会有更多关于处理软键盘的详细资料。
5.避
免技巧:无意识的旋转。运行Android
1.5(及以上)的设备能够根据用户手持设备的方向自动地旋转屏幕。一些1.5的设备默认这么做,而其它的需要用户手动设置。应用程序自己的重定向在某种
程度上会导致不可预期的行为(不论是使用加速度计还是其它一些东西)。这种情况通常发生在应用程序假设有物理键盘时才能旋转;如果设备没有物理键盘,这些
App就不能进行重定向,而这明显就是个编码错误。开发者应该明确应用程序能在任何时间都能处理重定向。
同样,App可以使用加速度计做到与系统
相同的事情——直接重定向自己,这也会引发奇怪的结果。一些App使用加速度计来监测像晃动动作什么的,而又不将其方向锁定为垂直或水平,经常会导致在方
向上来回翻动。而这就会激怒用户。(你可以在manifest文件中使用android:screenOrientation特性来锁定App的方向为垂
直或水平。)
DexClassLoader加载的类是没有组件生命周期的,也就是说即使DexClassLoader通过对APK的动态加载完成了对组件类的加载,当系统启动该组件时,依然会出现加载类失败的异常。
需要替换系统组件的classloader才可以。加固厂商必然饶不过去
两种解决方案:
1、替换系统组件类加载器为我们的DexClassLoader,同时设置DexClassLoader的parent为系统组件类加载器;
2、打破原有的双亲关系,在系统组件类加载器和BootClassLoader的中间插入我们自己的DexClassLoader即可;
壳与脱壳之二代壳函数抽取/#源码分析
Android中实现「类方法指令抽取方式」加固方案原理解析
Android免Root权限通过Hook系统函数修改程序运行时内存指令逻辑
强烈建议阅读此文章
ART 在 Android 安全攻防中的应用