美文网首页IT/互联网Mac·iOS开发生活和工作
iOS逆向:实现功能最全的微信插件

iOS逆向:实现功能最全的微信插件

作者: focusontech | 来源:发表于2019-07-23 21:25 被阅读82次

    对于iOS开发者来说,iOS逆向工程并不陌生。本文主讲的是逆向微信,实现目前较全的实用的功能:“自动抢红包,修改微信运动步数,伪定位(朋友圈和附近的人),屏蔽消息和群消息,过滤群,防撤回消息和信息内容页的背景透明等”。

    免责声明

    • 本文所有纯属个人娱乐学习用,相关技术仅用于学习交流,请勿用于非法目的,不得有其他任何商业用途!!!
    • 外挂有风险,使用需谨慎。
    • 当使用本插件时,请使用者自行承担各种状况,包括但不限于“禁用红包功能”以及“微信封号”。

    tweak

    • 何谓 tweak ?

    tweak 定义是:对复杂的系统—通常是电子设备—进行微调或修改来增强其功能。而在 iOS 当中,tweak 是指那些能够增强其它进程功能的 dylib。可以将 tweak 理解为一个外挂,只不过这个外挂是以动态链接库的方式注入到目标应用当中。我们已经了解外挂其实就是用来作一些原本的应用无法做到的事情。

    安装 theos

    theos 是一个越狱开发工具包,它可以生成 iOS 越狱APP以及tweak等程序的框架,并提供makefile来编译、打包和安装。

    • 从 Github 下载 theos ,打开命令行,进行如下操作:
    export THEOS=/opt/theos
    # 如果之前已经安装过 theos,请先删除,然后下载最新版
    rm -rf $THEOS
    sudo git clone --recursive https://github.com/theos/theos.git $THEOS
    
    • 配置ldid

    ldid是用于对 iOS 可执行文具进行签名的工具,可以在越狱 iOS 中替换 Xcode 自带的签名工具。

    http://joedj.net/ldid 下载,将其移动到 /opt/theos/bin 目录下,然后设置可执行权限。

    cd <下载ldid的目录>
    sudo mv ldid /opt/theos/bin
    sudo chmod 777 /opt/theos/bin/ldid
    

    Hook常用工具

    • iOSOpenDev - Xcode增强工具,需要通过它生成用于注入的dylib。也可用theos编译tweak项目生成注入的dylib库。
    • dumpdecrypted - 用于解密iOS的可执行文件,砸壳时可不需要。
    • otool - 一般Mac OS X自带,用于查看解密后文件的依赖项检查。
    • install_name_tool - 一般Mac OS X自带,修改动态库的路径。
    • yoyolib - 用于向iOS的可执行文件中注入dylib。
    • optool - 将动态链接库注入二进制文件中。
    • class-dump - 导出app所有头文件 (class-dump -s -S -H ~/Desktop/x.app -o ~/Desktop/xx-headers)。
    • ios-app-signer - 打包 ipa 与重签名图形化工具。

    获取砸壳版本的微信

    将 Cluth 仓库 clone 到本地:

    $ git clone https://github.com/KJCracks/Clutch
    $ cd Clutch
    

    使用 Xcode 进行构建,得到可执行文件:

    $ xcodebuild -project Clutch.xcodeproj -configuration Release ARCHS="armv7s arm64" build
    

    将可执行文件 clutch 拷贝到手机上:

    $ scp Clutch/clutch root@<your.device.ip>:/usr/bin/
    

    先 ssh 到越狱手机上,然后查看当前安装的应用:

    $ ssh root@<your.device.ip>
    $ clutch -I
    
    # Installed apps:
    # 1: WeChat <com.tencent.xin>
    # 2: DingTalk <com.laiwang.DingTalk>
    

    开始砸壳

    $ clutch -d com.tencent.xin
    
    # com.tencent.xin contains watchOS 2 compatible application. It's not possible to dump watchOS 2 apps with Clutch 2.0.4 at this moment.
    # Zipping WeChat.app
    # Swapping architectures..
    # ASLR slide: 0xb3000
    # ...
    # writing new checksum
    # DONE: /private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-(Clutch-2.0.4).ipa
    # Finished dumping com.tencent.xin in 76.9 seconds
    

    将砸完壳的ipa包拷回电脑上

    $ mv /private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-\(Clutch-2.0.4\).ipa /private/var/mobile/Documents/Dumped/wechat.ipa
    $ scp root@<your.device.ip>:/private/var/mobile/Documents/Dumped/wechat.ipa ~/Desktop
    

    微信插件开发

    • WeChatPluginDev - 微信插件tweak源码开发。
    • Dynamic library - dylib 目录 (Raw Library) 和 modify 目录 (Modified Library),可直接拿来注入。

    注入库和重签名打包

    • 编译 (Compiling)
    $ cd /Users/dyf/Desktop/XApleSysCalcService
    $ make
    $ cp .theos/obj/debug/XApleSysCalcService.dylib ~/Desktop 
    
    # 直接打开目录,拷贝或拖动dylib库至桌面
    # $ open .theos/obj/debug/
    
    • 移除架构 (Remove Architecture)
    $ lipo libsubstrate.dylib -remove armv7 -output ./libsubstrate.dylib
    $ lipo -info libsubstrate.dylib
    $ lipo XApleSysCalcService -remove armv7 -output ./XApleSysCalcService
    $ lipo -info XApleSysCalcService
    
    • 改变动态库的路径 (Change Library Path)
    $ otool -L XApleSysCalcService
    $ install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/XApleSysSubstr XApleSysCalcService
    $ otool -L XApleSysCalcService
    
    • 注入动态库 (Install Dynamic Library)
    $ /Users/dyf/Desktop/WeChat_tweak/Hook-Tools/optool install -c load -p "@executable_path/XApleSysCalcService" -t ./WeChat
    
    • 修改微信Info.plist和本地化文本 (Modify Info.plist of WeChat and Localized File)

      修改 WeChat.app/Info.plist 的 bundle id 和 bundle display name,删除本地化文本(Localized File)中的CFBundleDisplayName,删除Watch目录。

    • 修改微信插件 (Modify WeChat PlugIns)

      修改插件的bundle id,重签名。

    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/PlugIns/WeChatShareExtensionNew.appex
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/PlugIns/WeChatSiriExtension.appex
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/PlugIns/WeChatSiriExtensionUI.appex
    
    • 重签名动态库 (Resign Dynamic Library)
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/Frameworks/mars.framework
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/Frameworks/MMCommon.framework
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/Frameworks/WCDB.framework
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/Frameworks/MultiMedia.framework
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/XApleSysCalcService 
    $ codesign -f -s "iPhone Distribution: XXX (5WQHRCQ7JQ)" Payload/WeChat.app/XApleSysSubstr
    
    • 重签名应用 (Resign app)
    $ ./DYFCodesign.sh /Users/dyf/Desktop/Payload "iPhone Distribution: XXX (5WQHRCQ7JQ)" /Users/dyf/Desktop/wcp_adhoc.mobileprovision
    
    • 打包应用 (Package app for Xcode7)
    $ xcrun -sdk iphoneos PackageApplication -v Payload/WeChat.app -o ~/Desktop/WeChat_New.ipa
    
    • 最后使用 PP 助手 / 爱思助手 / ifunbox 安装 WeChat_New.ipa

    iOS逆向交流

    参考文章

    技术交流群(群号:155353383)

    欢迎加入技术交流群,一起探讨技术问题。


    群号:155353383

    如果你觉得能帮助到你,请去Github项目给一颗小星星。谢谢!(If you think it can help you, please go to the github project and give it a star. Thanks!)

    相关文章

      网友评论

        本文标题:iOS逆向:实现功能最全的微信插件

        本文链接:https://www.haomeiwen.com/subject/kojdfctx.html