飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 31861|回复: 75

[iOS] 非越狱环境WeChat插件注入之旅

    [复制链接]
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2021-5-18 15:27:22 | 显示全部楼层 |阅读模式
    本帖最后由 small-q 于 2021-5-18 19:56 编辑

    0x00 本文由来
         笔者对插件抢红包这东西是比较感兴趣的,不知道为什么,反正就是喜欢!然后这就成为了一种动力想去深入研究!由于之前用的是旧的 MBP,很多东西都无法深入去学习实例,都只能在外面磨蹭一下(你懂的),直到今年用上了苹果全新的 M1 ,才有机会进行各种深入学习。
         笔者把飘总的《iOS应用逆向与安全之道》https://item.jd.com/12800426.html 购买学习了一遍,在此期间深得飘总和 C 版指导指引,得以解决各种问题(比如手动注入 xx.dylib 为什么死活闪退,而用 MonkeyDev 则能成功注入),带着有问题就要解决的精神请你与笔者一起开启后续学习之旅。

    0x01 工具环境
    • MacBook Pro (M1), iPhone (越狱)
    • Xcode
    • xcode-select --install
    • theos
    • frida
    • optool


    0x02 事前准备

    2.1 提取描述文件
    这一步可参照《iOS应用逆向与安全之道》第 9.5.1 节进行。
    先用 Xcode 新建一个空的 iOS 工程并编绎,具体步骤见如下几张图片:
    新建App
    16209571699758.jpg
    App工程名字
    16209572515861.jpg
    选择证书

    选择证书

    选择证书
    设置BundleId

    设置BundleId

    设置BundleId
    定位描述文件

    定位描述文件

    定位描述文件
    最后得到 embedded.mobileprovision 描述文件复制出来备用。
    特别提示:记住本节的 Bundle identifier(BundleId)为: com.qyc.test ,后面最重要的一环需要用到。

    2.2 应用脱壳
    脱壳方式也有很多种,这里使用 C 版压箱底的神秘工具进行,如下图所示。
    应用脱壳
    16209583543076.jpg
    得到脱壳后的 ipa 文件备用

    2.3 编译插件
    通过 git 下载插件源代码(已支持最新8.0.5):
    make 后得到 WeChatRedEnvelop.dylib 备用。
    编译插件
    16209594550546.jpg

    2.4 查看依赖
    这一步查看插件的依赖库,使用如下命令:
    [Shell] 纯文本查看 复制代码
    otool -L WeChatRedEnvelop.dylib
    查看依赖
    16209603801445.jpg

    需要 CydiaSubstrate.framework 依赖,根据路径去越狱手机上定位 。
    定位到CydiaSubstrate.framework
    16209605729058.jpg

    展开 CydiaSubstrate.framework ,导出 libsubstrate.dylib 备用。
    导出libsubstrate.dylib

    导出libsubstrate.dylib

    导出libsubstrate.dylib



    2.5 修改依赖
    将 WeChatRedEnvelop.dylib 文件依赖的路径改为: @executable_path/Frameworks/(也就是 App 目录下的 Frameworks 子目录),具体如下:
    [Shell] 纯文本查看 复制代码
    install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @executable_path/Frameworks/libsubstrate.dylib WeChatRedEnvelop.dylib
    

    修改依赖路径
    16210791946230.jpg

    再次查看 WeChatRedEnvelop.dylib 依赖,一切正常!
    再次查看依赖
    16210795332138.jpg

    现在整个项目目录如下所示:
    项目目录

    项目目录

    项目目录


    0x03 注入 dylib


    3.1 解压 ipa
    [Shell] 纯文本查看 复制代码
    unzip -oqq ./WeChat_8.0.5_gfd.ipa -d "${SRCROOT}"

    查看主程序是否解密:↓(为0表示已正确解密的)。
    [Shell] 纯文本查看 复制代码
    otool -l ./Payload/WeChat.app/WeChat | grep crypt

    查看是否解密成功
    16209732043177.jpg


    3.2 脚本处理
    新建 copydel.sh 脚本,其实就是删除和复制一些文件到 App 包里去:
    [Shell] 纯文本查看 复制代码
    rm -rf ./Payload/WeChat.app/com.apple.WatchPlaceholder
    rm -rf ./Payload/WeChat.app/Watch
    rm -rf ./Payload/WeChat.app/PlugIns
    cp -r WeChatRedEnvelop.dylib ./Payload/WeChat.app/Frameworks/WeChatRedEnvelop.dylib
    cp -r ./CydiaSubstrate.framework/libsubstrate.dylib ./Payload/WeChat.app/Frameworks/libsubstrate.dylib
    cp -r embedded.mobileprovision ./Payload/WeChat.app/embedded.mobileprovision

    记得 embedded.mobileprovision 描述文件也要复制进 app 去

    3.3 开始注入
    利用 optool 工具注入,下载地址:https://github.com/yuchuanfeng/optool
    更改主程序执行权限:
    [Shell] 纯文本查看 复制代码
    chmod +x ./Payload/WeChat.app/WeChat

    开始注入:
    [Shell] 纯文本查看 复制代码
    optool install -c load -p @executable_path/Frameworks/WeChatRedEnvelop.dylib -t ./Payload/WeChat.app/WeChat
    

    注入过程如下图所示。
    注入过程
    16209663868502.jpg

    确认注入情况:
    [Shell] 纯文本查看 复制代码
    otool -L ./Payload/WeChat.app/WeChat

    确认注入情况
    16209664596393.jpg
    看到已注入完成!

    3.4 修改 BundleId

    需要修改 BundleId 与 Demo 工程保持一致:
    [Shell] 纯文本查看 复制代码
    /usr/libexec/PlistBuddy -c "set :CFBundleIdentifier com.qyc.test" ./Payload/WeChat.app/Info.plist
    

    修改BundleId
    16210784762401.jpg

    这步非常重,要不然会造成非越狱机器无法安装。
    顺便处理:安装 ipa 报 DeviceNotSupportedByThining. 错误:
    [Shell] 纯文本查看 复制代码
    /usr/libexec/PlistBuddy -c "Delete :UISupportedDevices" ./Payload/WeChat.app/Info.plist
    


    0x04 应用重签

    4.1 列出证书
    [Shell] 纯文本查看 复制代码
    security find-identity -v -p codesigning

    列出证书
    16209726314774.jpg

    这里选用第 2 个证书编号进行后续签名(后续证书签名及 ID 已被掩码)。

    4.2 提取 entitlements.plist 文件

    要给 App 文件签名得先从 embedded.mobileprovision 文件中提取出 entitlements.plist 权限文件:
    [Shell] 纯文本查看 复制代码
    security cms -D -i embedded.mobileprovision > temp.plist
    
    /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
    

    分成两步,最终生成一个权限文件entitlements.plist

    4.3 签名 Framework

    这一步签名 Framework 目录下的所有 Mach-O 可执行文件(这点非常重要
    [Shell] 纯文本查看 复制代码
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/andromeda.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/App.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/Flutter.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/ilink_network.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/libsubstrate.dylib
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/Lottie.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/matrixreport.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/mm_dart_cpp.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/OpenSSL.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/ProtobufLite.framework
    codesign -f -s "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" ./Payload/WeChat.app/Frameworks/WeChatRedEnvelop.dylib
    


    4.4 签名 App
    [Shell] 纯文本查看 复制代码
    codesign -fs "Apple Development: 888888888*qq.com ([url=tel:9999999999]9999999999[/url])" --no-strict --entitlements=entitlements.plist ./Payload/WeChat.app

    签名App

    签名结果

    签名结果

    一气合成,这就签完名啦!

    4.5 查看/验证签名


    [Shell] 纯文本查看 复制代码
    codesign -vv -d ./Payload/WeChat.app

    查看签名情况
    16212404330911.jpg

    Framework 目录的检查同理可推,略过。
    下面这一步如果没有任何输出代表签名验证通过
    [Shell] 纯文本查看 复制代码
    codesign --verify ./Payload/WeChat.app


    4.6 重新打包
    [Shell] 纯文本查看 复制代码
    zip -qr Simple_WeChat_8.0.5.ipa Payload/


    4.7 安装ipa
    这一步是最常规的操作了,也详细列出来吧,使用爱思助手:
    导入安装
    16209752113066.jpg

    非越狱机器顺利安装,没有任何错误!打开不会闪退!并看到插件成功注入:↓

    16209754047923.jpg

    插件效果

    插件效果

    本节使用的命令行在你完成单步理解后,完全可以做成 sh 脚本完成自动化操作,这里就不讲述了。
    最后,你就可以愉快的学习别人的代码并进行各种功能改进了!

    0x05 友情提示

    • 在此我想说一下,使用别人的开源插件一定要要保留人家的版权信息并表示谢意,做人要厚道,不要像有个 Cydia 的 xx 号,拿了别人的插件加入各种信息进行获利,真不要脸!
    • 本文技术仅供技术交流,请勿用于非法用途。

    0x06 总结
    macOS、iOS的签名工具非常多,如果不理解其签名原理,则是知其然不知其所以然,从而耽误很多事情。在遇到问题的时候得深入研究,仔细探究其中的奥秘,避免完全做个“工具党”。

    0x07 参考文献


    《iOS应用逆向与安全之道》
    https://item.jd.com/12800426.html







    评分

    参与人数 16威望 +28 飘云币 +27 收起 理由
    ws001980 + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    Conda + 1 PYG有你更精彩!
    yp124202453 + 1 + 1 PYG有你更精彩!
    Niwde + 1 + 1 PYG有你更精彩!
    风行天下jj + 1 + 1 PYG有你更精彩!
    echo + 2 + 2
    东方优源 + 1
    2402436533 + 1 赞一个,这个帖子很给力!
    beijingren + 1 + 1 感谢发布原创作品,PYG有你更精彩!
    独狼04 + 1 赞一个,这个帖子很给力!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-17 22:44
  • 签到天数: 132 天

    [LV.7]常住居民III

    发表于 2021-5-18 18:02:06 | 显示全部楼层
    前排膜拜小Q大神
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

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

    [LV.4]偶尔看看III

    发表于 2021-5-18 19:01:36 | 显示全部楼层

    前排膜拜小Q大神
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-29 08:08
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2021-5-19 08:46:13 | 显示全部楼层
    前排膜拜小Q大神
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    3 天前
  • 签到天数: 1312 天

    [LV.10]以坛为家III

    发表于 2021-5-19 09:23:38 | 显示全部楼层
    前排膜拜小Q大神
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-5 08:23
  • 签到天数: 291 天

    [LV.8]以坛为家I

    发表于 2021-5-21 08:56:58 | 显示全部楼层
    牛比,学习啦,虽然看不懂
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-7 09:17
  • 签到天数: 331 天

    [LV.8]以坛为家I

    发表于 2021-5-21 16:59:03 | 显示全部楼层
    来到论坛第二天,我看了很多,唯独楼主的这篇我看的津津有味有浅到深,感谢楼主
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-15 19:10
  • 签到天数: 110 天

    [LV.6]常住居民II

    发表于 2021-6-1 08:39:35 | 显示全部楼层
    膜拜小Q大神,大哥牛皮6666
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    7 小时前
  • 签到天数: 120 天

    [LV.7]常住居民III

    发表于 2021-6-2 21:59:46 | 显示全部楼层
    感谢发布原创作品,PYG有你更精彩!
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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