小X盾so加固分析与带壳修改程序
本帖最后由 BinCrack 于 2020-6-18 12:28 编辑事情是这样的,闲得没事做的时候在破解一个叫xxfix的apk,最近的版本so文件进行了单独加固,后来了解到作者使用了小x盾。虽然不脱壳也能有手段破解它,但为了让他感受一下江湖险恶,打算把他用的保护壳给日了。
1. so加固初探首先看一下官网对自己保护的介绍,知己知彼,百战不殆。
乍一看觉得还是很牛掰的,而且还是免费的。接下来我们就上传一个so进行加固,这些保护究竟是吹嘘的,还是真实存在的,又或者强度如何,我们一探究竟。
加固后,文件变大了许多,导出表成了一堆毫无意义的字符串,多了一些新的section,原始so的字符串基本上一个都搜不到。基本上可以确定原始so已经被整体加密,我们在IDA中看到的全是壳的代码。
2. 静态解密壳代码
JNI_OnLoad函数如上图所示,已经被加密了,那么程序必然会在更早的时机进行解密,例如init_array。分析发现第一个函数即为壳代码的解密函数,其中byte_767D8指向的数据刚好对应待解密数据的偏移长度以及解密用的key。
上图四段数据分别对应密钥长度,偏移地址,密文长度,key。其中偏移地址刚好就是main区段的地址,JNI_OnLoad刚好也在main。
继续分析发现壳会修改内存的属性,并且执行sub_111C8与sub_11244两个函数,不难发现二者对应RC4加密的rc4_init与rc4_crypt。接下来就能编写IDAPython脚本静态解密壳代码了。解密后的JNI_Onload如下。
3.用户so解密
虽然JNI_OnLoad解密出来了,但明显不是我自己写的。Sub_C974函数会读取一堆设备并上传到服务器,与so解密无关直接忽略。__cxa_cleanup_vir函数则尤为重要,第一个参数0x63698指向用户so密文,68482位密文长度。该函数进行了VM保护,为了更高效的分析程序,我们可以对指令进行trace。直接说答案了,用户so的解密用到的算法也是RC4,而且和前一个壳代码调用的是同一个函数(所以你懂的,直接在RC4解密处下断点就能拦截到壳与用户so两者的明文),只是用到的key是不同的,猜测key与VM的执行有关,所以没有深入研究来源。
用户so进行RC4解密后,还会进行zlib解压缩,随后得到的才是明文。如下图对比解密后的so与原始so发现某些固定的section数据是不同的(但是text,rodata段已经解密完成了,意味着我们可以随意篡改原始so代码和字符串),说明此时并没有完全脱壳。
4. 剩余section解密
调试发现程序不会在已有的解密数据上继续解密其余section,内存中在任何时机也不会存在一个完整的原始so,是专门防止内存dump设计的。注意到data段除了刚刚的密文还有一大堆数据没有使用,推测与剩下的section解密有关。
分析到上图位置,则为其余section解密阶段,算法就是异或固定的数据,不同的section异或的数据也是不同的。这里偷个懒就不截解密完成的图了,和原始so中数据是一样的,但section的位置是乱七八糟的,想要完美脱壳,必须解决其与原始so的映射关系。
5. 壳加载用户so
在一切解密工作完成后,壳就要将用户so加载到系统了。如上图就是完成加载依赖so库,执行原始so的init_array和JNI_OnLoad,这里就不深入探讨了。
6.带壳修改程序
分析至此,有两种方案可以用于攻击小X盾保护的应用。1. 带壳修改程序:我们在第三节里面得到了一个不完整的原始so,但足够去篡改代码段和字符串数据,只需要修改后按原流程逆过程加密回去即可。优点:分析成本较低,如同做手术一般,修改后的so依然是加固的状态,自带防御。缺点:IDA无法完美的静态分析不完整的so,意味着我们分析原始so逻辑只能靠动态调试,同时操作也较为繁琐。2. 完美脱壳SO:上文研究中,应该完全还原了原始so的数据,只是section的映射关系是乱的,将其修补回去即可完美脱壳。优点:完美脱壳优点太多缺点:分析成本较高,如果要实现静态脱壳,可能需要硬刚VM保护的代码。 为了偷懒,我使用了第一种方案,最后成功破解了xxfix。第二种方案则留给诸位大佬研究了。视频中通过脚本可以一键加解密,篡改代码后重打包完成静态带壳破解,视频演示链接:https://www.bilibili.com/video/BV1yp4y1D7Le/
7. 后记 小X盾官方吹嘘说的六种保护,在so中实际存在的只有 逻辑混淆和虚拟化保护。在运行时没发现任何反调试,篡改文件也能正常运行,也可以对so进行hook。至于独创VM引擎也不过是用在壳自己身上,而且关键的解密函数都是没有任何保护的。但作为一款免费的so加固产品,能做到如此强度,表示作者很良心了。
沙发,悍妇,强大的无语! bin表哥带带我。我很好带的。 表哥你这么优秀 马化腾知道吗 文章收藏,还要点赞 冲啊啊啊啊啊啊啊! 虽然不懂安卓,但表哥牛逼就完事儿了 感谢经验分享,收藏
页:
[1]