iOS逆向开发(7):微信伪装他人

上一节小程介绍了微信在进入“附近的人”时修改位置信息的办法,这一次,小程来修改“自己”的信息,伪装成别人。

但是,这里的伪装只是“本地的伪装”,也就是看到“自己”变成了他人,而实际上,在服务端(别人看到的)还是没有变化的,那就更不会迫使被伪装的人下线了,也不能以对方的身份发送信息或发朋友圈。

伪装成别人的表现是,小程手机上的微信信息完全变成目标对象的信息,连相册也变成对方的相册。所以,如果对方是好友则相册全是对方发朋友圈的内容,如果对方不是好友则只能看到部分内容。

这个效果看起来,就像小程盗用了别人的账号一样(实际并没有!)。所以,如果读者看到有人截图来证明“已经盗用了很多人的微信账号”,请一定不要轻易相信,因为你也可以做到这个效果。

要在本地伪装成别人,关键在于修改微信的用户名,即把自己的用户名修改成目标对象的用户名。

本文演示如何动态修改微信的用户名。

(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的姓名都知道,用什么手机都知道。如果换成你女朋友的信息,你会不会觉得不能接受?

小白:咦?! 我没有女朋友!

总结一下,这次演示,依然是工具的使用,依然是跟踪与修改的实现。



原文地址:https://blog.51cto.com/13136504/2379025

时间: 2024-08-30 04:03:48

iOS逆向开发(7):微信伪装他人的相关文章

iOS逆向开发(1):基础工具 | ssh | scp | socat

小白:小程,我一直想问,什么是逆向来着?是逆向行驶吗? 小程:理解为逆向行驶也没错.一般的项目是从无到有,而逆向是从已有的状态入手,分析出已有的流程与结构的手段. iOS上的逆向开发,是一件有趣的事情(虽然有时很痛苦),而且还可能给你带来收益. 在接下来的几篇文章,小程会尝试介绍iOS逆向的一系列的知识与技能:从基础工具的使用,到目标类的定位.目标代码的调试,再到注入微信的实战示例. 本文介绍iOS逆向的基础工具的使用. 硬件方面,你需要一台iOS设备(iphone/itouch/ipad,以下

iOS逆向开发(3):锁定APP的目标类与函数 | reveal | lldb

之前介绍了怎么获取APP的所有类的结构信息,这个有什么用呢?用处大了,比如以这一步为基础,下一步通过注入来做更多研究工作. 注入的最小单位是函数,实际上,编译执行的程序在编译后,类就不复存在了,留下来的只是二进制代码(指令或数据都是一样的二进制代码).所幸的是,跟我们打交道的,并不是二进制代码(那会困难很多),而是函数,而且是某个类的函数. 那么,在用classdump拿到成千上万个类与函数后,哪个函数才是我们关心的呢?怎么锁定它们呢? 本文介绍锁定目标类与函数的可行的办法. 基本上小程研究的目

iOS开发之微信聊天页面实现

在上篇博客(iOS开发之微信聊天工具栏的封装)中对微信聊天页面下方的工具栏进行了封装,本篇博客中就使用之前封装的工具栏来进行聊天页面的编写.在聊天页面中主要用到了TableView的知识,还有如何在俩天中显示我们发送的表情,具体请参考之前的博客:IOS开发之显示微博表情,在这儿就不做赘述啦.在聊天页面用到了三对,六种Cell,不过cell的复杂度要比之前的新浪微博(IOS开发之新浪围脖)简单的多.废话少说吧,还是先来几张效果图,在给出实现代码吧. 聊天界面的效果图如下:在下面的聊天界面中中用到了

iOS开发之微信聊天工具栏的封装(走过路过不要错过哦)

之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧.之前已经把微信的视图结构简单的拖了一下(IOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊天界面开始吧.提到封装是少不了写代码的,在封装组件的时候,为了组件的可移植性,我们就不能用storyboard来拖拽了.为了屏幕的适配,适应不同屏幕的手机,所以在封装组件的时候是少不了为我们的组件来添加约束.今天博客中的所有代码都是脱离storyboard的,这些代码在别的工程中也是可以使用的.好,

iOS App开发那些事:如何选择合适的人、规范和框架?

自从做Team Leader之后,身上权责发生了变化,于是让我烦恼的不再是具体某个功能,某个界面的实现,而是如何在现有代码的基础上做渐进式的改进,创造出比较合适规范和框架,使得组内成员更快更好地完成任务.一年下来,颇有点想法,于是啰嗦几句关于iOS App开发的那些事. 合适的人 首先明确一点,合适的人是指纯技术团队的建设.一支战斗力再强的技术团队,面对一个朝三暮四,分分钟推翻自己原有想法的产品经理/项目经理,再好的戏也唱不出来.花几个月加班加点做项目,还没发布,直接推翻重做,这时候你就得去楼下

逆向开发基础工具

小白:小程,我一直想问,什么是逆向来着?是逆向行驶吗? 小程:理解为逆向行驶也没错.一般的项目是从无到有,从大唐而来到西方取经,而逆向是从已有的状态入手,分析出已有的流程与结构的手段. iOS上的逆向开发,是一件有趣的事情(虽然有时也会很痛苦),而且还可能给你带来收益. 在接下来的几篇文章,小程会尝试介绍iOS逆向的一系列的知识与技能:从基础工具的使用,到目标类的定位.目标代码的调试,再到注入微信的实战示例.读者如果感兴趣,可以关注小程的微信公众号"广州小程",获得后续的更新. 本文介

iOS逆向之利用Xcode重签名

iOS逆向之利用Xcode重签名 准备工作 非越狱的iPhone手机 用PP助手下载: 微信6.6.5(越狱应用) 步骤 新建工程"Xocde重签名",选择开发证书,在真机上运行 解压微信6.6.5(越狱应用).ipa,在微信-6.6.5(越狱应用)->Payload下,将WeChat.app改名为Xocde重签名.app 在Products->Xcode重签名上右击show in finder 将第2步的Xocde重签名.app拷贝过来,替换. *以下几个步骤可以参考上一

iOS游戏开发游戏功能之外的东西

对于一个游戏的开发,我们除了完成游戏的功能之外,还有多少东西我们需要考虑呢? 很多,也很烦! 但做过一遍之后下一次就会很简单. 都有什么东西我们想添加到游戏当中呢? (1)分享功能 (2)评分功能 (3)游戏中心(GameCenter) (4)广告(iAd以及其他广告比如Admob) (5)应用内购买 (6)... 这些功能并不是完全必要的,要根据情况考虑.但比如分享,评分,这些功能能提高一个游戏的扩散速度,显示是值得每一个游戏都添加的功能. 下面稍微总结一下每一个功能的基本用法. PS:这只是

iOS动画开发之二——UIView动画执行的另一种方式

iOS动画开发之二--UIView动画执行的另一种方式 上一篇博客中介绍了UIView的一些常用动画,通过block块,我们可以很方便简洁的创建出动画效果:http://my.oschina.net/u/2340880/blog/484457,这篇博客再介绍一种更加传统的执行UIView的动画的方法. 这种方式相比如block的方式,显得要麻烦一些,apple官方也推荐我们使用带block的创建动画的方式,我们可以将编程重心更多的放在动画逻辑的实现上.使用begin和commit方式主要分为三个