iOS逆向-微信一键阅读所有消息

前言

每次打开微信,总有一些公众号推送烦人的且无营养消息,而微信又没提供全部已阅的功能,本章详细讲述一键阅读所有消息.

  • 安装一个砸壳的微信,或者自己去App Store下载一个再砸壳.
  • 恢复微信符号表 iOS符号表恢复
  • 给微信添加调试权限.
  • 分析.
  • Tweak.xm
  • 总结.

0x1:

IMG_1743.PNG

0x2:

Reveal分析:
11.png

  • 小红点是个封装的图片控件 MMBadgeView
  • 红点中的数字是个封装了UILabel控件 MMUILabel

XCode加载微信进程:

22.png

从MMBadgeView控件入手:

33.png

这里选择直接从MMBadgeView入手,po [MMBadgeView _shortMethodDescription] 命令,打印出MMBadgeView的所有属性和方法,发现三个方法格外显眼.

Symbolic BreakPoint下断:

44.jpg

放开断点后,小号发送条信息给这个微信,看看断点是否被断下.


55.png

微信在收到消息之后经过非常多的页面UI处理,然后再设置小红点的数量。这个时候往上回溯发现除了系统的渲染函数,第一个被调用的微信函数是[MMTableView layoutSubviews],这个函数是微信首页这个表格加载子视图的函数,我们所看到的首页上的任何东西都是这个函数加载出来的,那么在这之前发生了什么?如何收到的消息?怎么计算的未读消息数量?

继续下一步分析:

  • 现在程序停留在了UITableView这个控件的一系列渲染和布局函数上面,如果继续盯着这块分析,最后会发现在做无用功.

  • 理论上是,当微信收到消息后,经过一系列处理,最后通知微信的首页,刷新这个表格(UITableView),给对应栏目(Cell)上的小红点+1.

  • 至于为什么有那么多UI渲染函数是因为微信收到消息后,如果是一个没有在首页列表的朋友发过来的呢?微信会发出通知声音,然后加入一个新的栏目(Cell)并置顶.

  • 跳出这个UITableView控件的渲染层,转到这个UITableView的父级,也就是首页的控制器NewMainFrameViewController,在前面Reveal分析中已经得到了这个控制器.

分析 NewMainFrameViewController:

66.jpg
  • po [NewMainFrameViewController _shortMethodDescription] 打印输出控制器.

  • 在列举的方法中寻找 Undead ,这个关键字如何来的?在前面UITableView的视图渲染中就有这么个函数[MainFrameitemView updateUnreadCountView],简洁明了一看就知道是修改未读数量.

  • 记录所有和这个关键字有关的方法:

    1. - (void) cleanAllUnreadSession;
    2. -(void)setNewMainFrameTableViewContentOffsetToTheFirstUnreadSessionAndOpen:(BOOL)arg1;
    3. - (unsigned int) getTotalUnreadCount;
    4. - (void) onNextUnreadChat;
    5. - (void) notifyTaskBarOnWillFocusOnFirstUnreadSession;
    6. - (void) updateUnReadCount;
    7. - (void) openMessageContentView:(id)arg1 startSendMessage:(BOOL)arg2 msgWrapToAdd:(id)arg3 animated:(BOOL)arg4 jumpToFirstUnreadNode:(BOOL)arg5 indexPath:(id)arg6 reuse:(BOOL)arg7 extraInfo:(id)arg8;
    8. - (void) openMessageContentView:(id)arg1 startSendMessage:(BOOL)arg2 msgWrapToAdd:(id)arg3 animated:(BOOL)arg4 jumpToFirstUnreadNode:(BOOL)arg5 indexPath:(id)arg6;
  • 从字面意思- (void) cleanAllUnreadSession;方法是取消所有未读会话,貌似是我们要的,实际上这是个坑,执行了这个方法,微信首页所有的消息都没了,包括栏目(Cell),再次打开微信,首页就是个白板.

  • 最后定位到- (void) updateUnReadCount; Symbolic BreakPoint下断

    77.jpg

微信收到消息后断在- (void) updateUnReadCount;,注意:如果这个时候已经在当前会话的聊天房间,并不会触发这个函数.
* 这个时候出现了一个新的类在堆栈调用过程中 MMNewSessionMgr
* 当微信收到消息,如果这个消息栏目(Cell)在首页列表中,小红点的数量会递增.
* 点击某个有小红点的栏目进去后,小红点会消失,说明当前栏目是已读的.
* 未读消息为0,表示当前栏目已读,小红点消失.
* 逻辑推测:收到消息,未读数量递增. 进入房间未读数置0,隐藏小红点.说明都会改变消息未读数

  • 查看进入房间的堆栈调用:


    88.jpg

进入单间,表示消息已读,调用了MMNewSessionMgr类的三个函数。分别给三个函数下断,查看参数的值.
* MMNewSessionMgr类 - 函数:

99.png

  • $arg3表示第一个参数 $agr4表示第二个 po printObject
    通过三个函数调用,然后调用微信首页控制器的- (void) updateUnReadCount方法,会清除小红点。
  • [MMNewSessionMgr OnUnReadCountChange:]的参数是 一串字符串
  • [MMNewSessionMgr ChangeSessionUnReadCount:to:]的两个参数分别是 上一个函数的参数 和 一个 0|假 .
  • 返回到首页,刚刚进去过的栏目小红点消失,其余的还是存在。
  • 再进入一个别的有未读消息的房间,[MMNewSessionMgr OnUnReadCountChange:]又会不同,说明这个参数很可能是一个ID,代表首页的每一个栏目(Cell).
  • 羊毛出在羊身上,打印一波MMNewSessionMgr类:
    aa.jpg
  • 尝试调用一下那些不需要参数就有返回值的函数:


    bb.png
          - 至此能拿到的东西已经很多
          - 整理一下逻辑就能完成一键阅读
    

Tweak.xm

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

%hook MMServiceCenter
%end

%hook MMNewSessionMgr
%end

%hook MMSessionInfo
%end

%hook NewMainFrameViewController

- (void) viewDidAppear:(BOOL)arg1{
    %log;
    %orig;
    //微信首页左上角添加一个功能按钮
    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithTitle:@"" style:UIBarButtonItemStylePlain target:self action:@selector(cleanAllUnreadSession)];
    [((UIViewController *)self).navigationItem setLeftBarButtonItem:barBtn];
}

%new
- (void)cleanAllUnreadSession{
    //获取 MMNewSessionMgr 实例
    MMNewSessionMgr *sessionObj = [[%c(MMServiceCenter) defaultCenter] getService:[%c(MMNewSessionMgr) class]];
    //获取所有的 sessionID
    NSArray *SessionListArray = [sessionObj GetUserNamesOnSessionList];
    for (NSString *str in SessionListArray) {
        // 循环修改每个会话 改成已读        
        [sessionObj ChangeSessionUnReadCount:str to:0];     
     }
}
%end


总结

实际上分析过程中会用到 Hopper Disassembler 静态分析.

实际上部分公众号推送的消息还是有价值的.

我没有任何针对微信的意思,如果你非要问我支持不支持微信,我当然支持,可以很明确的告诉你,我不支持我还天天用微信。🤣

aaa.gif

最后附上效果图。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • java在运行程序时,在内存中划分了5片空间进行数据的存储。分别是:存储器、本地方法区、方法区、栈、堆。 在Jav...
    倔强小草77阅读 852评论 0 1
  • 传统教育推广方法几乎没效果?不如试试教育小程序 当今是移动互联网的时代,移动在线教育在日益强烈的市场需求下,以教育...
    拿甜圈齁你阅读 177评论 0 0
  • 必备课:目前这4点才是线下教育培训机构最迫切需要的! 现在传统教育培训机构面临着传播难,有了资深的教学团队,但是知...
    拿甜圈齁你阅读 165评论 0 0
  • 真诚来自不断地自我介绍, 大家好,我是,我是一名13岁女孩的妈妈, 一名独立摄影师,主要拍摄孩子和美食,同时也兼职...
    小桃888阅读 658评论 0 0
  • 隆冬未至,身子却止不住地在凛冽寒风瑟缩发抖。很长一段时间QQ空间都充斥着对气候变化无常的抱怨。学长们也告诉我们...
    随缘Matinda阅读 184评论 0 0