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

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

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

准备工作

首先你需要

  1. 一台 MAC 电脑
  2. 一个 iOS 开发者证书(或者可以是一个有添加你手机 UUID 的个人的个人开发证书的任意一个 APP 的描述文件,或者一个企业级开发证书的任意一个 APP 的描述文件)
  3. XCode
    关于第二点,有证书的同学可以自己从自己的 APP 的 导出一个 Develop 的描述文件。这里注意必须是 Develop 的证书签名的的。(如果是企业证书的话 InHouse 也是可以的)具体操作的话打开 XCode 选择 Window – Organizer

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

如果你是个人证书你就选择第四个 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 编译就会出现这软件了。

然后我们需要做几个准备工作,首先将 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 文件,就大功告成了。
打开手机看看 是不是出现了两个微信呢。