Boshi的博客

微信自动抢红包

字数统计: 2.2k阅读时长: 10 min
2018/02/26

微信自动抢红包

获取砸壳版本的微信 ipa

注意,标(备用)的文件,主要就是他们。百度分享链接 密码:yt4y

因为在 AppStore 上面下载得到的应用都是经过加密的,可以执行文件上已经被加过一层壳,所以我们需要先拿到砸过壳版本的微信应用。

有两种方法:

  1. 直接在 PP 助手下载
  2. 使用 Clutch 对越狱手机上应用进行砸壳 (具体方法连接)

这里直接使用第一种方法百度网盘分想连接(备用)

第二种有点麻烦,所以先不搞,有时间在研究

准备dylib动态链接库

这步就很简单了,直接到 WechatRedEnvelop 上把源码 clone 下来,然后执行 make 命名,就能拿到 dylib文件。

1
2
3
4
5
$ git clone https://github.com/buginux/WeChatRedEnvelop.git
$ cd WeChatRedEnvelop
$ make
$ cp .theos/obj/debug/WeChatRedEnvelop.dylib ~/Desktop
# 注意是 .theos 目录,这是个隐藏目录

将生成的 WeChatRedEnvelop.dylib 文件拷贝到桌面,跟刚刚砸过壳的微信应用放到一个目录层级。 (备用)

检查依赖项

使用 macOS 自带的 otool 工具就可以进行依赖项检查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ 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.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
/usr/lib/libsubstrate.dylib (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.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
/usr/lib/libsubstrate.dylib (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)

可以看到除了 substrate 库,其它依赖的都是系统自带的库。我们将 libsubstrate.dylib 拷出。

如果你的系统中不是 /usr/lib/libsubstrate.dylib 而是 /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate 的话解决方案如下

我的就是这种,其实这个文件是在越狱手机里面才有,我的做法是通过USB来连接越狱手机,然后把里面的这个文件拷出来,具体链接方法如下:

如果你能通过WiFi连接到越狱手机直接用如下命令考出文件

$ scp root@<your.device.ip>:/usr/lib/libsubstrate.dylib ~/Desktop

我的通过WiFi连接不到,所以用的USB方法。

通过ssh连接越狱手机

WiFi 连接

  • $ ssh root@<越狱手机的IP地址>

    输入默认密码:alpine

USB连接

  • 通过brew来安装

    $ brew install usbmuxd

  • usbmuxd 自带工具iproxy,iproxy 可以快捷的操作连接iPhone等操作。由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。

    $ iproxy 6666 22

    以上命令就是把当前连接设备的22端口(SSH端口)映射到电脑的6666端口,那么想和设备22端口通信,直接和本地的6666端口通信就可以了。

  • 终端提示 waiting for connection ,表示这两个端口之间已经可以通信了,保留当前终端(如果关闭就停止端口之间的通信了),新建另一个终端输入,默认密码:alpine

    $ ssh -p 6666 root@localhost

从越狱手机里面拷文件出来

  • 查看Mac的sshd服务状态,终端输入以下命令:

    $ sudo launchctl list | grep ssh

    输入密码后,如果显示0 com.openssh.sshd提示为开启状态,什么都没有为关闭状态。

  • 开启sshd服务命令:

    $ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

  • 关闭sshd服务命令:

    $ sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

  • 文件拷贝

    下面以相册中照片拷贝到电脑为例:

    1.ssh链接到越狱手机后,cd到相册所在目录/private/var/mobile/Media/DCIM

    2.DCIM可能会有子目录,查找到文件后执行以下命令拷贝:

    $ scp IMG_0026.PNG shibosun@192.168.1.106:/Users/shibosun/Desktop/WeChatRed

    介绍:

    IMG_0010.PNG: 图片名,

    shibosun@xxx.xxx.xxx.xxx:Mac用户名@Mac的IP

    /Users/shibosun/Desktop/WeChatRed: 拷贝到电脑的目标路径

    所以我用到的命令是如下:

    1
    2
    3
    $ scp /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate shibosun@192.168.1.106:/Users/shibosun/Desktop/xxx

    xxx 为你的文件目录

注意:拷出来的CydiaSubstrate文件,改名成 libsubstrate.dylib(配用)

然后使用 install_name_tool 命令修改动态库的路径,指向 app 二进制文件的同级目录。

1
$install_name_tool -change /usr/lib/libsubstrate.dylib @loader_path/libsubstrate.dylib WeChatRedEnvelop.dylib

然后在 -change 后面把 /usr/lib/libsubstrate.dylib 改成你的

/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate。其它不变。

1
$install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib WeChatRedEnvelop.dylib 

检查一下看看路径有没有改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ 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.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
@loader_path/libsubstrate.dylib (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.1.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1348.0.0)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 3600.5.2)
@loader_path/libsubstrate.dylib (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)

到目前为止你的文件夹里面应该有这些文件

其实越狱手机我们要的只是 CydiaSubstrate 这个文件,然后改名为 libsubstrate.dylib,

还有砸壳微信ipa文件,WeChat.ipa

将动态链接库注入二进制文件中

接下来,就需要将我们的库注入到微信的二进制文件中,可以使用开源的 optool 工具

编译安装 optool 工具:

1
2
3
4
# 因为 optool 添加了 submodule,因为需要使用 --recuresive 选项,将子模块全部 clone 下来(我也不知道什么意思,先用)
$ git clone --recursive https://github.com/alexzielenski/optool.git
$ cd optool
$ xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build

如果碰到类似 “error: There is no SDK with the name or path ‘/path/to/optool/macosx10.9’” 的错误,请使用 Xcode 打开工程,在 Build Setting 中选择正确的 SDK 版本(我没有碰到问题,一下编译过)

这个过程会生成一个optool文件,把他拷贝出来放到那些文件夹中, 目录build/Release/optool(备用)

现在你的文件夹里面应该有

将砸壳过的 ipa 文件解压,然后将 libsubstrate.dylib 与 WeChatRedEnvelop.dylib 拷贝到解压后的 WeChat.app 目录下。

1
2
$ unzip WeChat.ipa -d wechat
$ cp libsubstrate.dylib WeChatRedEnvelop.dylib wechat/Payload/WeChat.app

使用 optool 把 WeChatRedEnvelop.dylib 注入到二进制文件中:

1
$ ./optool install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t wechat/Payload/WeChat.app/WeChat

注意:在开始打包之前,请先将 WeChat.app 里面的 Watch 目录删除,这个目录是跟 Watch 有关的,如果不删除的话,会导致后继的安装步骤出问题。出现 A WatchKit app within this app is not a valid bundle 的错误。

打包并重签名

打包 ipa 与重签名可以直接使用图形化工具 ios-app-signer 来完成。

这个工具可以自动加载出本机的证书以及 Provisioning Profile 文件,使用起来十分方便,当然也可以手动选择证书文件。

如果是使用个人开发者证书,需要先将设备的 UUID 加到 Provisioning Profile 中。

点击 start 后,指定保存路径,iOS App Signer 就会帮你搞定所有事情。重签名的ipa就可以在非越狱上安装了。

安装

参考这里吧,不想重复了 链接地址

CATALOG
  1. 1. 微信自动抢红包
    1. 1.1. 获取砸壳版本的微信 ipa
    2. 1.2. 准备dylib动态链接库
    3. 1.3. 检查依赖项
    4. 1.4. 通过ssh连接越狱手机
      1. 1.4.1. WiFi 连接
      2. 1.4.2. USB连接
    5. 1.5. 从越狱手机里面拷文件出来
    6. 1.6. 将动态链接库注入二进制文件中
    7. 1.7. 打包并重签名
    8. 1.8. 安装