上节小程介绍了微信在进入 "附近的人" 时修改位置信息的办法,这一次,小程来修改 "自己" 的信息,伪装成别人.
但是,这里的伪装只是 "本地的伪装",也就是小程看到 "自己" 变成了他人,而实际上,在服务端(别人看到的)还是没有变化的,那就更不会迫使被伪装的人下线了,也不能以对方的身份发送信息或发朋友圈.
伪装成别人的表现是,小程手机上的微信信息完全变成目标对象的信息,连相册也变成对方的相册.所以,如果对方是好友则相册全是对方发朋友圈的内容,如果对方不是好友则只能看到部分内容.
这个效果看起来,就像小程盗用了别人的账号一样(实际并没有!).所以,如果读者看到有人截图来证明 "已经盗用了很多人的微信账号",请一定不要轻易相信,因为你也可以做到这个效果的.
要在本地伪装成别人,关键在于修改微信的用户名,即把自己的用户名修改成目标对象的用户名.
本文演示如何动态修改微信的用户名.
(1)在哪里改用户名
用户名很可能在不同的类都有使用到,那小程需要确定在哪一个类的哪个函数去修改用户名.
还是使用小程之前介绍的办法来跟踪,比如用户名有可能出现在 "设置" 模块,那可以查找一下 "setting" 的关键字.
思路与知识点是一样的,但跟踪的过程却千差万别,所以这个过程的参考意义可能不大.小程直接给出跟踪的结果,在微信的某个版本,用户名在的 CSetting 类中:
所以,只需要把 m_nsUsrName 的 "get" 函数重写就好,比如通过 iosOpenDev 来修改用户名:
NSString * m_nsUsrName() {
if (g_canmodify) {
return "wxid_tagetxxxid";
}
return % orig();
}
小程在这里使用了一个全局变量 g_canmodify,在它为 YES 时,才进行修改.比如可以在点击某个按钮后,或切到某个页面后,才把这个值置为 YES,这时 username 才被更改.
而在微信刚启动时,是不会修改用户名,因为,如果一运行就更改这个值,会看到这样的提示:
所以,让微信启动完,在某个时机再去修改它,才能达到目的.
(2)修改的效果
小程在这里演示一下,把 username 改成微信公众号 "编程牛人" 的管理员之一的 "锋哥" 的用户名,看一下会有什么效果出现.
动态修改后,先看 "我" 这个页面:
注意,头像秒变锋哥,而昵称跟微信号并没有变,因为这里只改了用户名.当然,小程也可以把昵称跟微信号都改掉的.
再看一下相册:
可以看到,小程的相册已经变成 "锋哥" 的相册了,里面全是他发布的内容.
注意,相册 "今天" 那一行,是小程("奇哥")发的 test 信息,实际上并没有变成锋哥发的内容,因为这只是一个假的伪装者.另外,因为小编已经加了锋哥为好友,所以能看到相册里面的所有内容.
而至于朋友圈的内容,则只有头像变成了锋哥的,其它还是小程自己朋友圈的内容.
(3)微信的一个设计漏洞
虽然小程并没有真正变成 "另一个人",但在伪装之后,却可以知道这个目标对象在什么时候重新登陆了微信.
大概是这样的,微信运行起来后,把 m_nsUsrName 改写成一个陌生人(非好友)的用户名,在看到界面头像之类发生变化后,退出微信.
这时,只要这个陌生人再次登陆微信,小程也再次启动自己的微信时,会看到这样的提示:
也就是说,微信把真用户的登陆信息,通知给假用户了,让假用户 "小心密码泄露了",而且可以知道,目标对象在什么时候,在什么设备上,登陆了微信.
可以想像,微信在登陆时,会以之前用的用户名去服务器查一下,看有没有同名的人登陆过,如果有,就警告一下.
而这个友善的警告,却刚好让伪装者,有机会拿到目标对象的一些信息.
小白:可是,这有什么呢?
小程:你可以知道 TA 在什么时候登陆了微信,甚至连 Ta 的姓名都知道,用什么手机都知道.如果换成你女朋友的信息,你会不会觉得不能接受?
小白:咦?! 我没有女朋友!
来源: http://www.bubuko.com/infodetail-2474563.html