博客> 逆向第六天-免越狱版微信自动抢红包插件
逆向第六天-免越狱版微信自动抢红包插件
2019-08-23 11:56 评论:0 阅读:737 布兰德
ios 逆向 微信抢红包 免越狱

前言

前几篇讲了一些工具,今天咱们就用这些工具来做一个微信自动抢红包的插件吧。这里代码是从GitHub上下载的。小编也是看着一篇博客来做的,中途也遇到过一些挫折。

原理

越狱机之所以能够使用tweak,主要是因为在越狱的时候,手机里就安装了mobilesubstrate这个库,这个库的作用就是能在程序运行的时候动态加载我们自己写的dylib动态运行库。由于非越狱机系统里没有这个库,那么我们就要把这个库打包到ipa中,使用它的api实现注入。注入原理这里先不说,大家可以去参考这篇文章:移动App入侵与逆向破解技术-iOS篇

获取砸壳版本的微信ipa

在AppStore里下载的应用都是经过加密的,可执行文件上面被加了一层壳,这里我们就要先得到砸过壳的微信应用。有两种方法:

  • 直接利用pp助手 去下载微信
  • 使用Clutch对越狱手机上的应用进行砸壳 这里咱们说第二种方式 首先 ,在终端下将Clutch仓库clone到本地:
    $  git clone https://github.com/KJCracks/Clutch
    $  cd Clutch

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

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

    这里小编生成的可执行文件在Clutch/build/ 文件夹下 可执行文件的名字是Clutch,各位去自己的Clutch文件夹中看看,自己的可执行文件在哪里。将可执行文件拷贝到越狱机上:

    $ scp Clutch/build/Clutch root@<your>:/usr/bin/

    现在,就要利用这个工具进行砸壳了。 先ssh到越狱手机上,然后列出当前安装的应用:

    $ ssh root@<your>
    $ Clutch -i
    # Installed apps:
    # 1:   WeChat <com>
    # 2:   DingTalk <com>
    # 3:   喜马拉雅FM(听书社区)电台有声小说相声英语 <com>

    可以看到clutch把相应应用的包名都显示出来了,得到了包名那么开始砸:

    $ 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-iOS7.0-(Clutch-2.0.4).ipa
    # Finished dumping com.tencent.xin in 76.9 seconds

    我们可以看到砸壳后的ipa在/private/var/mobile/Documents/Dumped/这个文件下。 这里我们把它改一个简单的名字后,再拷贝到电脑上(小编放到了桌面的wechat文件夹下):

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

准备dylib动态链接库

一开始小编就提到了代码是直接clone下来的,然后执行make命令,得到dylib文件 然后拷贝到桌面wechat文件夹下:

$  git clone https://github.com/buginux/WeChatRedEnvelop.git
$ cd WeChatRedEnvelop
$ make

# > Making all for tweak WeChatRedEnvelop…
# ==> Preprocessing Tweak.xm…
# ==> Compiling Tweak.xm (armv7)…
# ==> Compiling XGPayingViewController.m (armv7)…
# ...
# ==> Signing WeChatRedEnvelop…

$ cp .theos/obj/debug/WeChatRedEnvelop.dylib ~/Desktop/wechat # 注意是 .theos 目录,这是个隐藏目录

这一步,你可能会遇到一些问题,遇到了问题可以问小编。小编这里遇到了挺多问题的,原因还没有找到,同样clone下来的代码,小编的同事make就会顺利得到dylib,小编就没有顺利得到,这里小编先把dylib给你提供一下。

检查依赖项

我们要确保dylib所依赖的库都打包进ipa里面。这里使用macOS自带的otool工具进行检查:

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)
    /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.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)
 /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)

在我参考的博客里面,博主得到的libsubstrate.dylib的目录是在/use/lib/下的,而小编的是/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate 这里读者不用担心,这里不会造成影响,咱们通过install_name_tool命令修改动态库WeChatRedEnvelop.dylib的路径。

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

这里的install_name_tool -change 命令其实就是把WeChatRedEnvelop.dylib里面的/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate 改成了loader_path/libsubstrate.dylib 可以简单理解为字符串替换(小编觉得这样好懂一些~)

下面在看一下依赖:

 $ 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)

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

这里用到的工具是开源的optool工具

$ git clone --recursive https://github.com/alexzielenski/optool.git
$ cd optool
$ xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build

这里要留意一下你的optool可执行文件在哪里,后面会用到 6A5AFB44-878B-4B11-8D81-454D69B5304C.png

下面咱们将ipa文件进行解压,然后将libsubstrate.dylib与WeChatRedEnvelop.dylib拷贝到解压后的WeChat.app目录下。

$ cd ~/Desktop
$ unzip wechat.ipa -d wechat
$ cp libsubstrate.dylib WeChatRedEnvelop.dylib wechat/Payload/WeChat.app

接着使用optool把WeChatRedEnvelop.dylib注入到WeChat.app/WeChat中:

$ /Users/mengyijie/optool/build/Release/optool install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t /Users/mengyijie/Desktop/wechat/wechat/Payload/WeChat.app/WeChat 

对这个命令做一下解释说明 install -c load -p "@executable_path/WeChatRedEnvelop.dylib" -t 前面的是上面提到了optool可执行文件的路径 后面是WeChat.app/WeChat的路径(把对应的文件拖到终端下就会得到路径)

F5FA4BAC-7421-4931-90A2-52DA5F9AD6AC.png

在开始打包之前,请先将 WeChat.app 里面的 Watch 目录删除,这个目录是跟 Watch 有关的,如果不删除的话,会导致后继的安装步骤出问题。出现 A WatchKit app within this app is not a valid bundle 的错误。 这里小编再加一条,打包前,看一下plist文件 9029F091-AB99-4E20-BBB9-C1DC81354A44.png 看看是否支持你的手机。

打包并重签名

打包 ipa 与重签名可以直接使用图形化工具 ios-app-signer 来完成。 这个工具可以自动加载出本机的证书以及 Provisioning Profile 文件,使用起来十分方便,当然也可以手动选择证书文件。

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

9575E987-A28D-4C00-BA5D-E6E53F07BD37.png

这里小编用的个人账号。

安装

两种安装方法,一种是使用iTools工具,一种是通过Xcode安装

65713B0E-C687-48DA-B2B5-433493A4C834.png

使用方法

在设置页面,有个微信小助手以及关注我的公众号两项,因为这里用的别人的代码,也没有去修改,关注的公众号是作者的~

参考资料

免越狱版 iOS 抢红包插件

简书地址

http://www.jianshu.com/u/58222f6534db

收藏
1
sina weixin mail 回到顶部