微信免越狱自动抢红包手记
又到年末,微信红包即将成为一个重点娱乐项目,最近看到大家都在玩微信自动抢红包,原来是有好心人把工具开源了,而且配有详细解说,好奇之下也手痒来玩了一下。[作者已经将越狱版的工具发到bigboss,不愿意折腾的可以直接下载使用]
因为在此之前我从未接触过iOS开发,这说明自动抢红包目前来看门槛还很低,所以感兴趣的TX可以试着玩玩,过程中挺涨知识的,原理什么的我大概明白了一点,就不班门弄斧了,纯粹是生日的娱乐。
前期工作
需要设备
- 越狱iPhone一台(非必须,已有未加密微信ipa的可跳过)
- 装好Xcode8的mac一台(或使用虚拟机)
环境准备
- 安装Theos和ldid
export THEOS=/opt/theos
sudo git clone --recursive https://github.com/theos/theos.git $THEOS
wget http://joedj.net/ldid
cp ldid $THEOS/bin/
- 编译WeChatRedEnvelop
make之前请修改WeChatRedEnvelop.plist里的Bundles为你的新应用名字(就是后面签名用的bundles值)。
git clone https://github.com/buginux/WeChatRedEnvelop.git
cd WeChatRedEnvelop
make
cp .theos/obj/debug/WeChatRedEnvelop.dylib ~/Desktop
- 编译安装optool
如果git clone过程中出现权限问题,请自行修改submodule的config内容,或者添加ssh证书。
git clone --recursive https://github.com/alexzielenski/optool.git
cd optool
xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build
sudo cp optool/build/Release/optool ~/Desktop
获取未加密的微信ipa
在AppStore上面下载得到的应用都是经过加密的,可以执行文件上已经被加过一层壳,重签包需要用未加密的应用。一般获取未加密应用有两种方式:
- 在各种第三方助手下载
- 对越狱手机上应用进行砸壳
第一种方法没什么好说的,主要怕助手里的应用夹带私货,这里记录一下自己获取未加密微信ipa步骤。
- iPhone上安装OpenSSH和Cycript
在越狱iPhone上的Lydia里搜索OpenSSH和Cycript,然后进行安装。OpenSSH成功安装后22端口会开启,同一局域网内可以ssh上去,默认root密码alpine,请立即修改默认密码。
接着用Clutch进行砸壳,但Clutch暂时不支持watchOS 2,而微信包是多target的,使用Clutch砸壳的时候会出现如下提示:
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.
所以后续重新打包的时候要把watchOS的相关内容删除。
git clone https://github.com/KJCracks/Clutch
cd Clutch
xcodebuild -project Clutch.xcodeproj -configuration Release ARCHS="armv7 armv7s arm64" build
生成出来的可执行文件就在Clutch目录下,将其拷贝到手机上
scp Clutch/Clutch root@172.16.86.220:/var/root
ssh -l root 172.16.86.220
./Clutch -d com.tencent.xin
成功之后在/private/var/mobile/Documents/Dumped/目录里可以得到解密后的ipa文件,改名为wx.ipa然后scp到桌面上备用。
修改未加密的微信ipa
准备依赖库
用macOS自带的otool工具进行依赖项检查:
yangmudeMacBook-Pro:Desktop yangmu$ otool -L WeChatRedEnvelop.dylib
WeChatRedEnvelop.dylib (architecture armv7):
/Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
WeChatRedEnvelop.dylib (architecture arm64):
/Library/MobileSubstrate/DynamicLibraries/WeChatRedEnvelop.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1349.13.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.22.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.6.21)
/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 307.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
从越狱的iOS设备中把/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate等非系统自带的库scp处理,改名后放在WeChatRedEnvelop.dylib的同级目录下,然后修改库指向。
scp root@172.16.86.220:/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate .
mv CydiaSubstrate libsubstrate.dylib
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WeChatRedEnvelop.dylib
注入Tweak至二进制文件
解压ipa文件,删除会造成问题的watch,将Tweak及其依赖文件拷贝到app目录后向wechat中注入Tweak。
unzip wx.ipa -d wx
rm -rf wx/Payload/WeChat.app/watch
cp libsubstrate.dylib WeChatRedEnvelop.dylib wx/Payload/WeChat.app/
~/Desktop/optool install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t wx/Payload/WeChat.app/WeChat
打包并重签名
打包 ipa 与重签名可以直接使用图形化工具ios-app-signer来完成。他可以自动加载本机的证书以及Provisioning Profile 文件,使用起来十分方便
点击 start 后,指定保存路径,打包成功后生成新的ipa。
安装使用
重签名打包的ipa可以通过xcode或者itool之类的助手安装,安装成功后效果如下(请原谅我无耻地修改):
后记
微信对这种方法其实已经有所对策,主要把判断秒抢和查询bundleid,被查到一般都是直接封禁朋友圈和部分功能之类的,所以各位玩的时候尽量克制,所谓:“小撸怡情 大撸伤身 强撸…… ”
PS:本来想用dumpdecrypted砸壳,结果了解到dumpdecrypted只会砸你手机处理器对应的那个壳,fat binary 的其它部分仍然是有壳的,所以在这里不好用。不过还是记录一下折腾dumpdecrypted的过程。
下载dumpdecrypted源码并编译
git clone https://github.com/stefanesser/dumpdecrypted.git
cd dumpdecrypted
make
编译成功之后会得到一个dumpdecrypted.dylib文件,这就是我们等下砸壳所要用到的工具。将该工具用scp复制到越狱iOS设备上的/var/root/中。
获取APP目录信息
关闭越狱iOS设备上所有的应用,然后打开微信,用ps -e命令可以获取微信的APP目录地址,如图所示,有/var/mobile/Containers/Bundle/Application/字样的结果就是微信可执行文件的全路径,记录下来(设该值为path1),待会儿要用。
获取Documents目录信息
用Cycript找出微信的Documents目录路径,如图所示有/var/mobile/Containers/Data/Application/字样的结果就是微信的Documents目录全路径,记录下来(设该值为path2),待会儿也要用。
cycript -p WeChat
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
开始砸壳
将dumpdecrypted移动到微信的Documents目录下,然后用下列命令开始砸壳{path1}和{path2}请替换成前面两步得到的路径:
DYLD_INSERT_LIBRARIES=/{path2}/dumpdecrypted.dylib /{path1}
效果如图:
当前目录下会生成WeChat.decrypted,即砸壳后的未加密文件,请将该文件scp到电脑上备用。
yangmudeMacBook-Pro:Desktop yangmu$ scp root@172.16.86.220:/var/root/WeChat.decrypted .
root@172.16.86.220's password:
WeChat.decrypted 100% 54MB 5.0MB/s 00:11