上一节小程介绍了微信在进入 "附近的人" 时修改位置信息的办法, 这一次, 小程来修改 "自己" 的信息, 伪装成别人.
但是, 这里的伪装只是 "本地的伪装", 也就是看到 "自己" 变成了他人, 而实际上, 在服务端 (别人看到的) 还是没有变化的, 那就更不会迫使被伪装的人下线了, 也不能以对方的身份发送信息或发朋友圈.
伪装成别人的表现是, 小程手机上的微信信息完全变成目标对象的信息, 连相册也变成对方的相册. 所以, 如果对方是好友则相册全是对方发朋友圈的内容, 如果对方不是好友则只能看到部分内容.
这个效果看起来, 就像小程盗用了别人的账号一样(实际并没有!). 所以, 如果读者看到有人截图来证明 "已经盗用了很多人的微信账号", 请一定不要轻易相信, 因为你也可以做到这个效果.
要在本地伪装成别人, 关键在于修改微信的用户名, 即把自己的用户名修改成目标对象的用户名.
本文演示如何动态修改微信的用户名.
(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 的姓名都知道, 用什么手机都知道. 如果换成你女朋友的信息, 你会不会觉得不能接受?
小白: 咦?! 我没有女朋友!
总结一下, 这次演示, 依然是工具的使用, 依然是跟踪与修改的实现.
posted on 2019-04-15 18:23 广州小程 阅读(...) 评论(...) 编辑 收藏
来源: https://www.cnblogs.com/freeself/p/10712177.html