# About WeChat Multi-opening on iOS

> A technical exploration of bypassing WeChat multi-open app activation codes through MITM request interception and brute-force code generation using multithreaded Python scripts.

Author: Vincent Yang
Published: 2022-09-13
Tags: WeChat, Code
Source: https://missuo.me/posts/tf-wechat

---

正常情况下，在 iOS 设备上是不可能安装两个一模一样的 App。但是大部分人对于 `微信` 这款 App 都希望能够有 2 个及以上。工作和个人两个号，互不打扰。也能够及时的看到两个账号的消息，这是最完美的事情。

如果要做到以上的情况需要怎么做呢，大部分的选择可能是去某宝购买。某宝的价格基本上在 40-100 元不等，非常昂贵。平均下来，买一次最多使用 1-3 个月左右。淘宝售卖的是各种品牌的微信多开，但是按大类来分，无非就是两种，`TestFlight(TF)` 和 `企业证书`。我不展开说这两个版本有什么区别，如果要我硬是选择一个更好的，我会选择 TF 版本。

既然某宝那么贵到底成本有多少呢，理论上除去开发成本，成本应该只有一个 Apple Developer 订阅的账号(688 元)的成本吧。因此，会有很多叫做 `卡密网` 的网站以非常低的价格售卖微信多开。基本上价格在 5-40 元之间，10-20 元居多。我曾经也买了很多次，最后总结的经验就是，基本上在三个月之内，作者必定会跑路。也就是意味着你三个月之后就用不了了，而且最恶心的事情是，作者会更换一个名字，三个月后重新开始售卖。典型的改名继续圈钱。

正常的流程，买的是一个激活码，然后第一次打开这个多开的时候，需要输入激活码进行验证。验证成功后可以正常使用。我想，是否有办法去绕过这个验证呢？

### 直接屏蔽验证接口
一般情况下，作者为了控制激活码的有效性，简单来说，如果你退款了，他可以立刻封禁你的激活码让你无法使用。所以他们一般会在每次打开 App 的时候，向服务器发起一个请求，如果服务端验证通过，会返回一些东西，例如“成功”等等。这种验证方式，其实还是有办法解决的，我们只要拿到正常的激活码，`Response` 的内容是什么，我们通过强大的 `QuanX` 或者 `Surge` 这类工具，开启 `MITM`，重写 `Response` 即可。在我测试的过程中，有遇到过直接 `Reject` 接口也可以绕过验证。

~~~
DOMAIN-SUFFIX, xxx.com, Reject
~~~

当然有些开发者可能已经考虑到我们会这样做，于是他直接将验证的代码写在了本地。这类程序几乎是无法绕过的。

### 自己获取激活码
由于被薅过太多次羊毛，每次三个月就跑路。我就开始想，有没有办法薅作者的羊毛。初步的想法是搞明白作者的激活码的规律。但是这显然不靠谱，因为这些基本随机生成的，当然肯定有一定的规律，只是我们不是开发者本人，几乎是不可能猜到的。

既然找不到规律，就只能开始暴力破解。我发现大部分的多开的激活码都是 `YW-XXXXXX`，前面两个字母是产品名字的首字母，例如云微是 `YW`，云彩是 `YC` 等等。然后后面的这一串 `XXXXXX` 是随机的六个字母。也就是说激活码的可能性只存在于 `AAAAAA`-`ZZZZZZ` 之中。这个可能性非常大，但是交给我们的服务器去做，简直是小菜一碟。

~~~
pool = threadpool.ThreadPool(99)
while True:
	code = create_code()
	tasks = threadpool.makeRequests(run, code)
	[pool.putRequest(req) for req in tasks]
	pool.wait()
~~~

我开始编写脚本，采用多线程的方案去尝试。效果非常好，几分钟出现很多验证通过的结果。服务器运行 24 小时，可以出现上千个激活码。于是我就有了用不完的激活码，成功薅到了作者的羊毛。