前言:確實(shí)好久沒(méi)有更新文章了,最近有些懶了镇饮,逆向確實(shí)水特別深啊蜓竹, 這次發(fā)個(gè)庫(kù)存吧, 不過(guò)大家注意不要用作非法用途储藐,僅供參考學(xué)習(xí)俱济,所以不發(fā)成品。 還諒解钙勃。
分析某Q版本:8.0.7.4085
這里只說(shuō)明以一系列的分析思路和技巧蛛碌,想直接看結(jié)果可以去文章末尾直接看。
? 用另一個(gè)聊天賬號(hào)撤回一條消息辖源,然后用模擬器上的qq觀察蔚携。 Ddms工具捕捉時(shí)間段內(nèi)的棧心思,猜測(cè)捕捉msg關(guān)鍵詞
? 找到mqq.app. MSFServlet. onReceive() 方法克饶,
這里發(fā)現(xiàn)了remove關(guān)鍵詞酝蜒,猜測(cè)為刪除這條信息,那我們不讓這條信息發(fā)出去
? 然后把這個(gè)方法直接重寫(xiě)
? 測(cè)試之后不行矾湃,發(fā)現(xiàn)這個(gè)方法是處理消息的最上層亡脑。 這里的remove是處理一個(gè)Map的、
那這個(gè)response是什么邀跃,我hook到把它打印了出來(lái)远豺。
? 繼續(xù)向下走。坞嘀。
那些亂七八糟的類(lèi)躯护,都在這個(gè)包下
追到這個(gè)類(lèi),我的眼睛已經(jīng)快不行了丽涩。 不過(guò)我想繼續(xù)向下找
WupBuffer 這個(gè)字段很敏感
繼續(xù)往后棺滞,看哪里還有處理這個(gè)的。
這里處理了一下矢渊,然后重新put了一次继准。像個(gè)解密的地方。
看看怎么解密的
減去了4個(gè)長(zhǎng)度矮男,并且調(diào)用了這個(gè)方法
然后回到 atca看到移必,又把這個(gè)對(duì)象給發(fā)走了
點(diǎn)過(guò)去一看還是個(gè)抽象方法,那就去看他的實(shí)現(xiàn)類(lèi)毡鉴。實(shí)現(xiàn)類(lèi)也看不到崔泵。在Hook里已經(jīng)拿到了 wupBuffer的數(shù)組秒赤,我們按照他的處理完之后,重新轉(zhuǎn)String看看能不能得到更多的信息憎瘸。
線索中斷入篮,更換思路
線索中斷,jadx內(nèi)存吃不消了幌甘,用killer找撤回的關(guān)鍵詞潮售,找到撤回的部分
name_APKTOOL_DUPLICATENAME_0x7f0c2a24
全局搜
繼續(xù)搜 0x7f0c2a24
三處
Killer卡死了。锅风。酥诽。 換jadx看代碼吧(手動(dòng)哭泣) 上戰(zhàn)場(chǎng),槍很重要爸宀骸0拐省!漱逸!
從上到先先記錄一下這些類(lèi)中使用的方法
Aidx—aj(ToServiceMsg泪姨,F(xiàn)romServiceMsg游沿,Object) --沒(méi)用
Aiji—a(ArrayList)
Aiji—b(ArrayList)---在這里有個(gè)意外收獲饰抒,發(fā)現(xiàn)了D方法,就是當(dāng)自己撤回的時(shí)候诀黍〈樱看下面
Atdx—a(QQAppInterface,Submsgtype0x8a$ReqBody眯勾,JZ) ---信息量太大枣宫,看看上面的先(但是這里是最有可能的暫時(shí)看來(lái))
Aiji—b
熱門(mén)都走了這個(gè)東西。 然后我們?nèi)タ纯?andk.a
我決定hook這個(gè) andk.a 方法吃环,我不管也颤。我看的頭大了。郁轻。翅娶。 先試試再說(shuō)!
然后好唯,沒(méi)走竭沫。。骑篙。
然后hook atdx的a方法蜕提,一直報(bào)錯(cuò)找不到那個(gè)方法,然后
然后我決定打印他的所有a方法靶端,并且拿到他的所有a方法的參數(shù)類(lèi)型
我們需要找一個(gè)
類(lèi)似這樣的列表看看
應(yīng)該是這個(gè)了谎势,跟我們的核對(duì)一下看看哪里有問(wèn)題
com.tencent.mobileqq.app.QQAppInterface凛膏、tencent.im.msgsync.cmd0x100.Submsgtype0x8a$ReqBody、(暫時(shí)看來(lái)是這里錯(cuò)了)
long它浅、
boolean译柏、
先把上面的方法日志注釋掉,然后看下面的hook能不能拿到參數(shù)
這里打出來(lái)的就是 ReqBody的內(nèi)容姐霍。 (記錄重啟了無(wú)數(shù)次鄙麦。。镊折。胯府。。恨胚。模擬器骂因。。要崩潰)
然后赃泡,hook不報(bào)錯(cuò)了寒波,但是方法好像并沒(méi)有走到這里!I堋俄烁!
我…. 接近崩潰,我要上AndroidStudio調(diào)試了<兑啊R惩馈!蓖柔!
機(jī)器屬實(shí)吃不消了辰企,,畢竟這個(gè)內(nèi)存不是無(wú)限大啊况鸣,i58代cpu也該退休了
? 項(xiàng)目導(dǎo)入AndroidStudio
我選擇8700你隨意
? 然后牢贸,看下qq的
2301
? 輸入adb命令 adb forward tcp:8700 jdwp:2301
? 我要在每個(gè)有撤回文字的地方打上斷點(diǎn)! 分別為:
.
(AndroidStudio一點(diǎn)好處就是不用滾輪镐捧,光標(biāo)放到目錄里潜索,直接輸入類(lèi)名即可)
? 開(kāi)始打斷點(diǎn)
? 好了,調(diào)試失敗
我沒(méi)了愤估。帮辟。。
? 解決各種問(wèn)題卡頓之后玩焰, 斷點(diǎn)走到了 aiji.b 方法
? 來(lái)hook這個(gè)方法
? 最后由驹。。。我成功了蔓榄!
分析不易并炮,一鍵三連。