iOS 逆向工程小实验 1 -- 微信多开

最近学习 iOS 逆向工程,想从实际应用的角度回头总结一下自己的这做的几个有趣的小实验。这一篇介绍一个最简单,但是有趣且非常实用的小实验: 微信多开

微信多开的好处简直可以和双开双待的手机来媲美,工作一个微信号,生活一个微信号。像一些专业人士,比如销售或者猎头、公关他们都需要多个微信号,因为一个微信号 3000 个的好友上线是根本无法满足他们需求的。本文可以教不会 iOS 开发的人自己制作一个安全的微信。

准备工作

首先你需要

  1. 一台 MAC 电脑
  2. 一个 iOS 开发者证书(或者可以是一个有添加你手机 UUID 的个人的个人开发证书的任意一个 APP 的描述文件,或者一个企业级开发证书的任意一个 APP 的描述文件)
  3. XCode

关于第二点,有证书的同学可以自己从自己的 APP 的 导出一个 Develop 的描述文件。这里注意必须是 Develop 的证书签名的的。(如果是企业证书的话 InHouse 也是可以的)具体操作的话打开 XCode 选择 Window – Organizer
blog001_01

然后任意一个 Archive 然后选择 Export。

blog001_02

如果你是个人证书你就选择第四个 Save for Development Deployment 如果你是企业证书就选择第三个 Save for Enterprise Deployment

选择后点击 Next 然后选择你的账号,最后就可以得到一个 ipa 文件了。将 ipa 文件用解压软件打开,得到一个叫 Payload 的文件夹,里面有一个你工程名问名字的文件,右键打开它选择 显示包内容。在里面找到一个名字叫 embedded.mobileprovision 的文件复制到桌面备用。

这里需要注意的是如果你是个人证书,必须在 苹果开发者中心 将你的 iPhone 的 UUID 添加到你的账号中,然后生成描述文件。如果你的描述文件是 XCode 自动生成的话,那么只要你真机测试过你的 APP 那么描述文件是会有你的 iPhone 的 UUID 的。iOS 的签名和打包流程很多,如果你没有接触过 iOS 开发的话,建议你还是问你的朋友要一个描述文件。或者你可以联系我 QQ:6184121

第一步:找一个微信的 ipa 文件

这一步可以有两种办法,第一从应用市场下,然后自己砸壳。第二从越狱市场(PP助手等)下载越狱应用。

1、自己砸壳

自己砸壳比较麻烦但是得到的软件是肯定安全的,因为越狱市场下载的微信也许是经过篡改的(可能性不是特别大)。
自己砸壳需要一台越狱的 iPhone。最好后 iPhone 5s 及以后机型。

首先,在 Terminal 中将 Cluth 仓库 clone 到本地:

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

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

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

之后,就可以使用这个工具来进行砸壳了。

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

1
2
3
4
5
6
$ ssh root@<your.device.ip>
$ clutch -i
# Installed apps:
# 1: WeChat <com.tencent.xin>
# 2: DingTalk <com.laiwang.DingTalk>
# 3: 喜马拉雅FM(听书社区)电台有声小说相声英语 <com.gemd.iting>

可以得到 clutch 把相应的包名也显示出来了,这时我们就可以进行砸壳了:

1
2
3
4
5
6
7
8
9
$ 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

可以看到,clutch 将砸过后的 ipa 文件放到了 /private/var/mobile/Documents/Dumped/ 目录下。

我们将它改成一个比较简单的名字,然后拷回电脑上:

1
2
$ 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.device.ip>:/private/var/mobile/Documents/Dumped/wechat.ipa ~/Desktop

这里,我把它拷到了电脑桌面上。之后就可以进行下一步操作了。

2、从越狱市场下载。

上面的确实繁琐,其实可以直接从 PP助手 越狱市场中下载一个。一下完成后再下载列表中右键显示文件目录然后复制到桌面上备用。

但是需要注意的是 PP助手 下载的 ipa 文件是还有
x86_64 架构的,如果你需要给微信添加动态库,是需要将 x86_64 架构消除掉否则是不能签名成功重新生成 ipa 文件的。

第二步:重新签名

重新签名我们用一个 swift 编写的工具 ios-app-signer 下载下来后直接用 XCode 编译就会出现这软件了。
blog001_03

然后我们需要做几个准备工作,首先将 wechat.ipa 解压

1
2
$ cd ~/Desktop
$ unzip wechat.ipa -d wechat

然后进入文件夹将 Watch 文件删除。这个目录是跟 Watch 有关的,如果不删除的话,会导致后继的安装步骤出问题。出现 A WatchKit app within this app is not a valid bundle 的错误。

然后我们就可以用刚才下载的软件了,Input File 选择 解压后 payload 文件下的 wechat.app 文件,Signing Certificate 选择你上面准备的描述文件的那个证书。Provisioning Profile 选择 Choose Custiom File 然后选择我们准备好的描述文件。然后点击 Start 最后选择一个输出路径。

第三步:安装到手机

打开 XCode – Window – Devices 插上你的手机,选择你的手机 然后点击加号 然后选择 刚才生成的 ipa 文件,就大功告成了。
打开手机看看 是不是出现了两个微信呢。

后面我还会写一些我学习 iOS 逆向工程时做的一些有趣的试验,比如说 微信自动抢红包,自动加好友,改微信内的图标或者文字的内容,敬请期待。