iOS逆向-微信一鍵閱讀所有消息

前言

每次打開微信,總有一些公眾號(hào)推送煩人的且無(wú)營(yíng)養(yǎng)消息俄周,而微信又沒(méi)提供全部已閱的功能驴剔,本章詳細(xì)講述一鍵閱讀所有消息.

  • 安裝一個(gè)砸殼的微信碟刺,或者自己去App Store下載一個(gè)再砸殼.
  • 恢復(fù)微信符號(hào)表 iOS符號(hào)表恢復(fù)
  • 給微信添加調(diào)試權(quán)限.
  • 分析.
  • Tweak.xm
  • 總結(jié).

0x1:

IMG_1743.PNG

0x2:

Reveal分析:
11.png

  • 小紅點(diǎn)是個(gè)封裝的圖片控件 MMBadgeView
  • 紅點(diǎn)中的數(shù)字是個(gè)封裝了UILabel控件 MMUILabel

XCode加載微信進(jìn)程:

22.png

從MMBadgeView控件入手:

33.png

這里選擇直接從MMBadgeView入手串稀,po [MMBadgeView _shortMethodDescription] 命令除抛,打印出MMBadgeView的所有屬性和方法,發(fā)現(xiàn)三個(gè)方法格外顯眼.

Symbolic BreakPoint下斷:

44.jpg

放開斷點(diǎn)后母截,小號(hào)發(fā)送條信息給這個(gè)微信到忽,看看斷點(diǎn)是否被斷下.


55.png

微信在收到消息之后經(jīng)過(guò)非常多的頁(yè)面UI處理,然后再設(shè)置小紅點(diǎn)的數(shù)量清寇。這個(gè)時(shí)候往上回溯發(fā)現(xiàn)除了系統(tǒng)的渲染函數(shù)喘漏,第一個(gè)被調(diào)用的微信函數(shù)是[MMTableView layoutSubviews],這個(gè)函數(shù)是微信首頁(yè)這個(gè)表格加載子視圖的函數(shù),我們所看到的首頁(yè)上的任何東西都是這個(gè)函數(shù)加載出來(lái)的华烟,那么在這之前發(fā)生了什么翩迈?如何收到的消息?怎么計(jì)算的未讀消息數(shù)量盔夜?

繼續(xù)下一步分析:

  • 現(xiàn)在程序停留在了UITableView這個(gè)控件的一系列渲染和布局函數(shù)上面负饲,如果繼續(xù)盯著這塊分析,最后會(huì)發(fā)現(xiàn)在做無(wú)用功.

  • 理論上是喂链,當(dāng)微信收到消息后返十,經(jīng)過(guò)一系列處理,最后通知微信的首頁(yè)椭微,刷新這個(gè)表格(UITableView)洞坑,給對(duì)應(yīng)欄目(Cell)上的小紅點(diǎn)+1.

  • 至于為什么有那么多UI渲染函數(shù)是因?yàn)槲⑿攀盏较⒑螅绻且粋€(gè)沒(méi)有在首頁(yè)列表的朋友發(fā)過(guò)來(lái)的呢蝇率?微信會(huì)發(fā)出通知聲音迟杂,然后加入一個(gè)新的欄目(Cell)并置頂.

  • 跳出這個(gè)UITableView控件的渲染層,轉(zhuǎn)到這個(gè)UITableView的父級(jí)本慕,也就是首頁(yè)的控制器NewMainFrameViewController逢慌,在前面Reveal分析中已經(jīng)得到了這個(gè)控制器.

分析 NewMainFrameViewController:

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

  • 在列舉的方法中尋找 Undead ,這個(gè)關(guān)鍵字如何來(lái)的间狂?在前面UITableView的視圖渲染中就有這么個(gè)函數(shù)[MainFrameitemView updateUnreadCountView],簡(jiǎn)潔明了一看就知道是修改未讀數(shù)量.

  • 記錄所有和這個(gè)關(guān)鍵字有關(guān)的方法:

    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;方法是取消所有未讀會(huì)話攻泼,貌似是我們要的,實(shí)際上這是個(gè)坑鉴象,執(zhí)行了這個(gè)方法忙菠,微信首頁(yè)所有的消息都沒(méi)了,包括欄目(Cell)纺弊,再次打開微信牛欢,首頁(yè)就是個(gè)白板.

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

    77.jpg

微信收到消息后斷在- (void) updateUnReadCount;,注意:如果這個(gè)時(shí)候已經(jīng)在當(dāng)前會(huì)話的聊天房間淆游,并不會(huì)觸發(fā)這個(gè)函數(shù).
* 這個(gè)時(shí)候出現(xiàn)了一個(gè)新的類在堆棧調(diào)用過(guò)程中 MMNewSessionMgr
* 當(dāng)微信收到消息傍睹,如果這個(gè)消息欄目(Cell)在首頁(yè)列表中隔盛,小紅點(diǎn)的數(shù)量會(huì)遞增.
* 點(diǎn)擊某個(gè)有小紅點(diǎn)的欄目進(jìn)去后,小紅點(diǎn)會(huì)消失,說(shuō)明當(dāng)前欄目是已讀的.
* 未讀消息為0拾稳,表示當(dāng)前欄目已讀吮炕,小紅點(diǎn)消失.
* 邏輯推測(cè):收到消息,未讀數(shù)量遞增. 進(jìn)入房間未讀數(shù)置0访得,隱藏小紅點(diǎn).說(shuō)明都會(huì)改變消息未讀數(shù)

  • 查看進(jìn)入房間的堆棧調(diào)用:


    88.jpg

進(jìn)入單間龙亲,表示消息已讀,調(diào)用了MMNewSessionMgr類的三個(gè)函數(shù)悍抑。分別給三個(gè)函數(shù)下斷鳄炉,查看參數(shù)的值.
* MMNewSessionMgr類 - 函數(shù):

99.png

  • $arg3表示第一個(gè)參數(shù) $agr4表示第二個(gè) po printObject
    通過(guò)三個(gè)函數(shù)調(diào)用,然后調(diào)用微信首頁(yè)控制器的- (void) updateUnReadCount方法搜骡,會(huì)清除小紅點(diǎn)拂盯。
  • [MMNewSessionMgr OnUnReadCountChange:]的參數(shù)是 一串字符串
  • [MMNewSessionMgr ChangeSessionUnReadCount:to:]的兩個(gè)參數(shù)分別是 上一個(gè)函數(shù)的參數(shù) 和 一個(gè) 0|假 .
  • 返回到首頁(yè),剛剛進(jìn)去過(guò)的欄目小紅點(diǎn)消失记靡,其余的還是存在谈竿。
  • 再進(jìn)入一個(gè)別的有未讀消息的房間,[MMNewSessionMgr OnUnReadCountChange:]又會(huì)不同簸呈,說(shuō)明這個(gè)參數(shù)很可能是一個(gè)ID榕订,代表首頁(yè)的每一個(gè)欄目(Cell).
  • 羊毛出在羊身上店茶,打印一波MMNewSessionMgr類:
    aa.jpg
  • 嘗試調(diào)用一下那些不需要參數(shù)就有返回值的函數(shù):


    bb.png
          - 至此能拿到的東西已經(jīng)很多
          - 整理一下邏輯就能完成一鍵閱讀
    

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;
    //微信首頁(yè)左上角添加一個(gè)功能按鈕
    UIBarButtonItem *barBtn = [[UIBarButtonItem alloc]initWithTitle:@"?" style:UIBarButtonItemStylePlain target:self action:@selector(cleanAllUnreadSession)];
    [((UIViewController *)self).navigationItem setLeftBarButtonItem:barBtn];
}

%new
- (void)cleanAllUnreadSession{
    //獲取 MMNewSessionMgr 實(shí)例
    MMNewSessionMgr *sessionObj = [[%c(MMServiceCenter) defaultCenter] getService:[%c(MMNewSessionMgr) class]];
    //獲取所有的 sessionID
    NSArray *SessionListArray = [sessionObj GetUserNamesOnSessionList];
    for (NSString *str in SessionListArray) {
        // 循環(huán)修改每個(gè)會(huì)話 改成已讀        
        [sessionObj ChangeSessionUnReadCount:str to:0];     
     }
}
%end


總結(jié)

實(shí)際上分析過(guò)程中會(huì)用到 Hopper Disassembler 靜態(tài)分析.

實(shí)際上部分公眾號(hào)推送的消息還是有價(jià)值的.

我沒(méi)有任何針對(duì)微信的意思蜕便,如果你非要問(wèn)我支持不支持微信,我當(dāng)然支持贩幻,可以很明確的告訴你轿腺,我不支持我還天天用微信。??

aaa.gif

最后附上效果圖丛楚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末族壳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子趣些,更是在濱河造成了極大的恐慌仿荆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坏平,死亡現(xiàn)場(chǎng)離奇詭異拢操,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)舶替,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門令境,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人顾瞪,你說(shuō)我怎么就攤上這事舔庶∨滓希” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵惕橙,是天一觀的道長(zhǎng)瞧甩。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吕漂,這世上最難降的妖魔是什么亲配? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮惶凝,結(jié)果婚禮上吼虎,老公的妹妹穿的比我還像新娘。我一直安慰自己苍鲜,他們只是感情好思灰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著混滔,像睡著了一般洒疚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坯屿,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天油湖,我揣著相機(jī)與錄音,去河邊找鬼领跛。 笑死乏德,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吠昭。 我是一名探鬼主播喊括,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矢棚!你這毒婦竟也來(lái)了郑什?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蒲肋,失蹤者是張志新(化名)和其女友劉穎蘑拯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兜粘,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡申窘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妹沙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偶洋。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖距糖,靈堂內(nèi)的尸體忽然破棺而出玄窝,到底是詐尸還是另有隱情牵寺,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布恩脂,位于F島的核電站帽氓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏俩块。R本人自食惡果不足惜黎休,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玉凯。 院中可真熱鬧势腮,春花似錦、人聲如沸漫仆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盲厌。三九已至署照,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吗浩,已是汗流浹背建芙。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懂扼,地道東北人禁荸。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像微王,于是被迫代替她去往敵國(guó)和親屡限。 傳聞我的和親對(duì)象是個(gè)殘疾皇子品嚣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • java在運(yùn)行程序時(shí)炕倘,在內(nèi)存中劃分了5片空間進(jìn)行數(shù)據(jù)的存儲(chǔ)。分別是:存儲(chǔ)器翰撑、本地方法區(qū)罩旋、方法區(qū)、棧眶诈、堆涨醋。 在Jav...
    倔強(qiáng)小草77閱讀 872評(píng)論 0 1
  • 傳統(tǒng)教育推廣方法幾乎沒(méi)效果?不如試試教育小程序 當(dāng)今是移動(dòng)互聯(lián)網(wǎng)的時(shí)代逝撬,移動(dòng)在線教育在日益強(qiáng)烈的市場(chǎng)需求下浴骂,以教育...
    拿甜圈齁你閱讀 197評(píng)論 0 0
  • 必備課:目前這4點(diǎn)才是線下教育培訓(xùn)機(jī)構(gòu)最迫切需要的! 現(xiàn)在傳統(tǒng)教育培訓(xùn)機(jī)構(gòu)面臨著傳播難,有了資深的教學(xué)團(tuán)隊(duì)宪潮,但是知...
    拿甜圈齁你閱讀 183評(píng)論 0 0
  • 真誠(chéng)來(lái)自不斷地自我介紹溯警, 大家好趣苏,我是,我是一名13歲女孩的媽媽梯轻, 一名獨(dú)立攝影師食磕,主要拍攝孩子和美食,同時(shí)也兼職...
    小桃888閱讀 718評(píng)論 0 0
  • 隆冬未至喳挑,身子卻止不住地在凜冽寒風(fēng)瑟縮發(fā)抖彬伦。很長(zhǎng)一段時(shí)間QQ空間都充斥著對(duì)氣候變化無(wú)常的抱怨。學(xué)長(zhǎng)們也告訴我們...
    隨緣Matinda閱讀 197評(píng)論 0 0