飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 6633|回复: 7

[Android] 小X盾so加固分析与带壳修改程序

  [复制链接]
  • TA的每日心情
    开心
    2021-7-27 17:21
  • 签到天数: 9 天

    [LV.3]偶尔看看II

    发表于 2020-6-18 12:40:18 | 显示全部楼层 |阅读模式
    本帖最后由 BinCrack 于 2020-6-18 12:28 编辑
    事情是这样的,闲得没事做的时候在破解一个叫xxfix的apk,最近的版本so文件进行了单独加固,后来了解到作者使用了小x盾。虽然不脱壳也能有手段破解它,但为了让他感受一下江湖险恶,打算把他用的保护壳给日了。

    1. so加固初探  首先看一下官网对自己保护的介绍,知己知彼,百战不殆。
    1.png
    乍一看觉得还是很牛掰的,而且还是免费的。接下来我们就上传一个so进行加固,这些保护究竟是吹嘘的,还是真实存在的,又或者强度如何,我们一探究竟。
    2.png

    3.png


    加固后,文件变大了许多,导出表成了一堆毫无意义的字符串,多了一些新的section,原始so的字符串基本上一个都搜不到。基本上可以确定原始so已经被整体加密,我们在IDA中看到的全是壳的代码。

    2. 静态解密壳代码
    4.png
    JNI_OnLoad函数如上图所示,已经被加密了,那么程序必然会在更早的时机进行解密,例如init_array。
    5.png
    分析发现第一个函数即为壳代码的解密函数,其中byte_767D8指向的数据刚好对应待解密数据的偏移长度以及解密用的key。
    6.png

    7.png
    8.png

    上图四段数据分别对应密钥长度,偏移地址,密文长度,key。其中偏移地址刚好就是main区段的地址,JNI_OnLoad刚好也在main。
    9.png

    10.png

    11.png

    继续分析发现壳会修改内存的属性,并且执行sub_111C8与sub_11244两个函数,不难发现二者对应RC4加密的rc4_init与rc4_crypt。接下来就能编写IDAPython脚本静态解密壳代码了。解密后的JNI_Onload如下。
    12.png

    3.用户so解密
    13.png
    虽然JNI_OnLoad解密出来了,但明显不是我自己写的。Sub_C974函数会读取一堆设备并上传到服务器,与so解密无关直接忽略。__cxa_cleanup_vir函数则尤为重要,第一个参数0x63698指向用户so密文,68482位密文长度。该函数进行了VM保护,为了更高效的分析程序,我们可以对指令进行trace。直接说答案了,用户so的解密用到的算法也是RC4,而且和前一个壳代码调用的是同一个函数(所以你懂的,直接在RC4解密处下断点就能拦截到壳与用户so两者的明文),只是用到的key是不同的,猜测key与VM的执行有关,所以没有深入研究来源。
    14.png


    用户so进行RC4解密后,还会进行zlib解压缩,随后得到的才是明文。如下图对比解密后的so与原始so发现某些固定的section数据是不同的(但是text,rodata段已经解密完成了,意味着我们可以随意篡改原始so代码和字符串),说明此时并没有完全脱壳。
    15.png


    4. 剩余section解密
    调试发现程序不会在已有的解密数据上继续解密其余section,内存中在任何时机也不会存在一个完整的原始so,是专门防止内存dump设计的。
    注意到data段除了刚刚的密文还有一大堆数据没有使用,推测与剩下的section解密有关。
    16.png

    17.png

    分析到上图位置,则为其余section解密阶段,算法就是异或固定的数据,不同的section异或的数据也是不同的。这里偷个懒就不截解密完成的图了,和原始so中数据是一样的,但section的位置是乱七八糟的,想要完美脱壳,必须解决其与原始so的映射关系。

    5. 壳加载用户so
    18.png

    19.png

    20.png
    在一切解密工作完成后,壳就要将用户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加固产品,能做到如此强度,表示作者很良心了。










    评分

    参与人数 6威望 +21 飘云币 +30 收起 理由
    Ravey + 1 + 1 PYG有你更精彩!
    cjteam + 3 + 2 感谢发布原创作品,PYG有你更精彩!
    不破不立 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    Rooking + 10 + 20 春风欲度玉门关,下次评分翻一番!
    shaoge + 1 + 1 万水千山总是情,给个评分最贴心!
    dryzh + 5 + 5 原创精品 感谢分享!

    查看全部评分

    本帖被以下淘专辑推荐:

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-11-17 11:41
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    发表于 2020-6-18 12:47:20 | 显示全部楼层
    沙发,悍妇,强大的无语!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-9 22:48
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    发表于 2020-6-18 12:47:56 | 显示全部楼层
    bin表哥带带我。我很好带的。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

    发表于 2020-6-18 14:19:40 | 显示全部楼层
    表哥你这么优秀 马化腾知道吗
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 2202 天

    [LV.Master]伴坛终老

    发表于 2020-6-18 19:30:24 | 显示全部楼层
    文章收藏,还要点赞
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-4-6 22:18
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2020-6-18 20:32:26 | 显示全部楼层
    冲啊啊啊啊啊啊啊!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-3-20 09:24
  • 签到天数: 373 天

    [LV.9]以坛为家II

    发表于 2020-6-19 21:33:41 | 显示全部楼层
    虽然不懂安卓,但表哥牛逼就完事儿了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-15 22:15
  • 签到天数: 521 天

    [LV.9]以坛为家II

    发表于 2020-6-21 14:33:02 | 显示全部楼层
    感谢经验分享,收藏
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表