这里的伪装不是真的伪装,并不会让对方下线,也不能以对方的身份发送信息或发朋友圈之类。
这里的伪装可以让客户端上的信息完全变成目标对象的信息,连相册也变成对方的相册。所以,如果对方是好友则相册全是对方发朋友圈的内容,如果对方不是好友则只能看到部分内容。
动态修改的目标变量是m_nsUsrName、m_nsNickName、m_nsAliasName之类。
(1)一个漏洞
仅以修改m_nsUsrName为例。
微信运行起来后,把m_nsUsrName改写成一个陌生人(非好友)的用户名,在看到界面头像之类发生变化后,退出微信。
在这个陌生人再次登陆微信,小编也再次运行自己的微信时,会看到这样的提示:
也就是,可以知道,目标对象在什么时候,在什么设备上,登陆了微信。
小白:那有什么,不就是告诉你我用iPhone吗,总比叶城主你用vivo高档多了。
叶孤城:你不觉得这个可以用来监视你女朋友是不是起床了吗?
小白:我女朋友不会用手机!
叶孤城:。。。
(2)用户名在哪里
同样,是class-dump几板斧的使用,在拿到类结构信息后,以lldb调试或hook输出信息的方式,定位变量所在类。
比如微信某个版本的CSetting类:
所以,只需要把m_nsUsrName的“get”函数重写就好,比如用iosOpenDev来写的话:
NSString* m_nsUsrName() { if (g_canmodify) { return "wxid_tagetxxxid"; } return %orig(); }
小白:喂,你能讲一下iosOpenDev吗?
叶孤城:这种资料很多,你会用浏览器吗?或者,等有兴趣的人来投稿分享给你吧,到时你要给红包她!
小白:她?
(2)何时修改
上面的代码,是在g_canmodify为YES时,才进行修改。比如可以在点击某个按钮后、或切到某个页面后,才把这个值置为YES,这时username才被更改。
如果一运行就更改这个值,会看到这样的提示:
(3)修改效果
这里演示一下,把username改成小编心目中的牛人“锋哥”的用户名,看一下会有什么状况出现。
动态修改后,先看“我”这个页面:
注意,头像秒变锋哥,而昵称跟微信号并没有变,因为这里只改用户名。
再看一下相册:
可以看出,锋哥是一个很尽责推“编程牛人”公众号的人,他要服务于程序员,让他们轻松找到工作与情人…
小白:哇,这马屁够了吧!还找情人?
注意,相册“今天”那一行,是“奇哥”发的test信息,实际上并没有变成锋哥发的内容,因为这只是一个假的伪装者。另外,因为小编已经加了锋哥,所以能看到相册里面的所有内容。
而至于朋友圈的内容,则只有头像变成了锋哥的,其它还是小编自己朋友圈的内容。
https://mp.weixin.qq.com/s/O6qF8tow-4SqqBrPcuWaMg