飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 23808|回复: 92

[Android] 3x0加固防重打包分析与绕过

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

    [LV.3]偶尔看看II

    发表于 2022-1-29 16:30:43 | 显示全部楼层 |阅读模式
    本帖最后由 BinCrack 于 2022-1-29 16:25 编辑

    飘云阁全网首发,未经许可,禁止转载。

    好久没有发技术贴了,这一年多都在实习以及写论文。秋招投了三家公司,拿到了阿里与腾讯的头部计划、字节的ssp offer后就打算躺平了,似乎没有了以前对技术痴迷的兴趣。前几天RoOking表哥让绕过“电视家”的签名校验,竟然磨蹭了半天才搞定,手速已经不行了。同时兴致来了,于是就有了今天这篇文章。

    本文以最新3x0加固免费版为例,介绍现有的过签名原理、3x0加固防重打包校验以及针对3x0加固的通用绕过方案。想当初CNFIX大火的时候,分析小密盾就是应R版邀请来破解CNFIX的。但破解后一次也没用过,因为当时对这种旁门左道是不屑一顾的。直到最近才尝试自己分析一下3x0加固,结果大跌眼镜。

    1.现有方案
          防重打包技术以及绕过并不是新鲜的话题,红极一时的一键过签工具有:MT、NP、ARMPro、CNFIX等。配合现有的诸多dex内存dump工具,可以实现无需脱壳、无视dexVMP、带壳修改apk并重打包运行,制作出令无数开发人员头疼的 “破解版”应用。但是随着3x0加固的对抗升级,这些工具已对最新版3x0加固无效。他们所使用的技术原理主要分为PMSHook和IO重定向。其中PMSHook利用反射和动态代理技术替换signature,使得依靠PMS方式获取的signature为攻击者构造后的正确签名信息。IO重定向更多的是针对APK完整性校验,又分为直接修改apkpath与hook IO函数两种方式。如hook libc.so的open openat函数,将路径替换为正版apk路径。感兴趣的朋友可以自行搜索学习,网上有大量的相关技术原理与代码实现。
       
    2.逆向分析
          分析前还是对3x0加固充满敬畏的,以为会很复杂,直到分析结束……。3x0加固的so名为libjiagu.so,运行时该so会解密释放真实壳so并以自定义linker方式加载,因此直接静态分析该so无法获取真实逻辑。但解密后的壳so包含大量明文字符串、大量未被混淆的关键函数。不过这些关键函数间的调用关系还是被混淆,然而也并没有什么卵用。这里直接给出分析结果:
    1)  完整性校验:通过sourceDir获取apk路径并做相关校验。这里具体怎么做的校验直接懒得分析,因为IO重定向就能搞定。值得注意的是sourceDir以及open函数的实现方式,这直接决定了IO重定向的成功与否。其中sourceDir的获取过程利用Binder机制直接与PackageManager服务端交互,相当于自行实现了PMS相关函数的功能。因此现有的PMSHook方案无法拦截。Open函数更是类似,直接使用系统调用,相当于自实现libc,同样现有hook工具难以拦截。
    1.png
    2)  Apkpath校验:判断apk路径是否为/data/app开头,因为正常情况下apk路径会在/data/app/packagename下且该目录不能随便写入,然而过签工具的正版apk通常放在私有目录即/data/data/packagename下。这种校验方式绝对是一大槽点,后续介绍。同时还会判断是否包含黑名单路径。
    2.png
    3) 签名校验:直接利用Binder机制,跳过PMS系统提供的函数获取签名。这里与上文获取sourceDir原理一致,仅截取部分实现图片如下:
    3.png

    3.破绽打击
          关于防重打包的思路是非常多的,当分析结束发现就以上几点时,直呼不过瘾。通俗的总结以上升级检测方案:不再信任常规系统函数,而是抄安卓源码自实现之,这样常规的通用过签方案自然也就无效了。这里针对检测的破绽提出新的绕过方案:
    1)     Hook代理类:直接hook Android.content.pm.IPackageManager$Stub$Proxy类的getPackageInfo方法,此时便可以拦截3x0加固的sourceDir与signature获取。Signature直接替换正确数据即可,但sourceDir会再次遇到apkpath校验,怎么办?so easy,修改成/data/app/../data/即可!

    2)     没有第二了,就这。

    4.思考总结
    问:第3节中提到的apkpath校验绕过方式很容易被对抗,那么不修改apkpath就不行了吗?(绕过)
    答:当然不是,修改apkpath只是IO重定向的一种方式,另一种方式是hook open等IO函数。由于壳自实现了open函数,常规的libc库函数hook就无效了。此时可以直接去Hook 壳中自实现的open函数,但通用性差,还需要特别注意时机。时机过早的话,可能壳还没有解密释放真实逻辑,对应的偏移地址内存不合法。时机过晚该函数则可能执行过了,hook个寂寞。

    问:如果hook壳内部函数怎么对抗呢?(防御)
    答:1. 动态shellcode执行自实现函数,执行完立即释放。
          2. 内存CRC校验

    问:有没有办法不侵入壳so实现系统调用hook?(绕过)
    答:1. 修改内核
          2. 加载内核模块

    问:能不能只在用户层,又不侵入壳so实现系统调用hook?(站着把钱挣了呗)
    4.jpg
    答:能,sxxxxxp,不是骂人的话,隐藏掉关键字,懂得自然懂,分享的多了大家都没得玩了。攻防永无止境。

    评分

    参与人数 15威望 +47 飘云币 +47 收起 理由
    desaiapi999 + 1 + 1 赞一个,这个帖子很给力!
    brajna + 1 + 1 反正我是看不懂的
    dych321 + 1 + 1 加油吧 你比你自己想的要强多了
    howill + 1 虽然没看懂,但是感觉很牛皮的样子
    帅帅的QL + 1 PYG有你更精彩!
    shiqiangge + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    fcguo800 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    小杰ljc + 1 + 1 666666
    ColdStars + 1 + 1 PYG有你更精彩!
    pywzi6 + 1 感谢发布原创作品,PYG有你更精彩!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    昨天 08:45
  • 签到天数: 121 天

    [LV.7]常住居民III

    发表于 2022-1-29 16:46:19 | 显示全部楼层
    支持支持,学习一下
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-4-14 20:54
  • 签到天数: 42 天

    [LV.5]常住居民I

    发表于 2022-1-29 17:04:47 来自手机 | 显示全部楼层
    感谢分享思路,又可以搞360了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    3 天前
  • 签到天数: 1537 天

    [LV.Master]伴坛终老

    发表于 2022-1-29 18:29:34 | 显示全部楼层
    我也想用电视家
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    昨天 07:19
  • 签到天数: 518 天

    [LV.9]以坛为家II

    发表于 2022-1-29 19:06:03 | 显示全部楼层
    感谢老师分享!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-2-26 11:14
  • 签到天数: 459 天

    [LV.9]以坛为家II

    发表于 2022-1-30 08:48:38 | 显示全部楼层
    彬哥新年快乐!带带我
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

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

    [LV.9]以坛为家II

    发表于 2022-1-30 10:22:55 | 显示全部楼层
    沃尔德天呐不屑一顾的大表哥
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

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

    [LV.9]以坛为家II

    发表于 2022-1-30 10:37:53 | 显示全部楼层
    这种过签方式的兼容性好不好呢?
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-2-17 14:19
  • 签到天数: 160 天

    [LV.7]常住居民III

    发表于 2022-1-30 11:00:56 | 显示全部楼层
    赞,彬哥无所不能啊。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 1404 天

    [LV.10]以坛为家III

    发表于 2022-1-30 12:09:33 | 显示全部楼层
    膜拜大婶,支持分享文章。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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