最近玩微信有点多,加上又“申诉”出来一个微信号,这下所有设备加起来都不够用了,于是就想着干脆象微博一样能够自由切换账号。当然,微信官方是不提供这功能的,但不妨碍我们自己添加。废话不述了,糙快猛直接上吧:
1、class-dump获取.h文件,第一次见微信代码的同学该惊叹了:艾玛,3537个.h,这么多看都看死了。
2、导入xcode,搜login关键字试试?还是不提这可怕的结果了。再搜login相关的.h文件,还好也就几十个。其实这时已经能筛选一下了:Login+Controller,符合条件的也就没多少了。
3、接reveal,你会很悲催的发现,虽然UI很清晰地看到了,但是你依旧不知道对应的.h是谁,甚至连cell都看不出来。所以我才夸微信的代码写的“太有特色”了。
4、接snoop-it,好在method_tracing记下了用户行为,虽然log实在是有点多,好歹是能根据输入的密码之类关键字逆推,初步定位到WCAccountPhoneLoginControlLogic 、WCAccountLoginControlLogic,再通过语义可以猜到,其实它们只是Logic,真正对应的UI应该是WCAccountLoginLastUserViewController和WCAccountLoginFirstUserViewController这样的class
5、查看WCAccountLoginLastUserViewController和WCAccountLoginFirstUserViewController,以及相关联的一系列.h
比如,WCAccountLoginLastUserViewController里的onNext。
PS:同学们,这里写的虽然轻松,可是在大量的log、代码中查找可就不是这么轻松了。
6、接cycript
随便输入几个字符,调用这个onNext函数试试,说明是好使的。
7、后面就该是theos的活了,代码已开源,可见https://github.com/iosre/WXAccountSwitcher
8、当然,ida是绝对少不了的,在调试代码的过程中,有的函数是需要去看的,
以下再对代码做个说明:
1、Tweak_Account.xm,顾名思义,就是用来处理Account的,它hook了WCAccountLoginLastUserViewController和WCAccountLoginFirstUserViewController;
2、Tweak_Account.xm中引用了一系列.h,如下所示:
#import “Account/AccountListController.h”
#import “Account/WCAccountControlData.h”
#import “Account/WCAccountLoginLastUserViewController.h”
#import “Account/WCAccountLoginLastUserViewControllerDelegate-Protocol.h”
#import “Account/WCAccountLoginControlLogic.h”
#import “Account/WCBaseTextFieldItem.h”
除了AccountListController.h,其它WC前缀的都是微信自己的.h,当然,这些.h直接拿过来是不灵的,要经过裁剪才能build;
3、AccountListController是新加的文件,用来显示账号列表,以及辅助的一些代码,另外,它是MRC的,你可以看到里面一堆的release;
4、测试期间,我的密码是保存在plist里的,测试通过后就从网上扒了开源NSDictionary+Keychain,虽然这个tweak能盯密码,但是自己编译过的还是可以放心用吧…
好了,就这样吧:)
最后,这个deb放出来的时候,build号已经到90了,也就是说这个工程打包过90次。当然,从这个tweak的角度,有个10次build应该就能完成调试、测试,咳咳。。。