當前位置:
首頁 > 新聞 > 紅包外掛那點事

紅包外掛那點事

*本文原創作者:薛定諤的大表哥 ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載



0×00

很急很關鍵


鄭重申明:外掛這東西,用來搶紅包還是不太好,僅作技術研究用噢~


眼看又到年關了,搶紅包神器的需求很強烈!很急!很關鍵!

這裡只討論iOS平台下的紅包外掛,總的來說分兩種:需越獄和無需越獄。

需越獄的就簡單了,參見github開源項目WeChatRedEnvelop,把代碼clone下來,一個makepackage install就全部搞定了(當然啦,首先你得配置theos環境,這東西真的挺好用的),buginux這位選手就是《iOS應用逆向工程分析與實戰》的作者(不是打廣告,我也不是馬甲!)。

無需越獄的稍微複雜一點,涉及到的主要技術點包括逆向微信接收消息介面、一丟丟的協議逆向、dylib注入、ipa重簽名。

逆向微信介面其實沒什麼好說的,buginux已經幫我們搞定了,代碼都寫好了,就算沒有這份代碼,稍微耐心一點也應該沒什麼大問題,因為微信這種體量的App基本都不會做什麼亂七八糟的保護的,手Q、淘寶、支付寶易燃,所以這裡就不討論怎麼逆向了。相對而言,dylib注入和重簽名才是最有討論價值的。

0×01 ipa重簽名

關於iOS下的簽名機制,我覺得這篇文章已經講的相當清晰了:《代碼簽名探析》,我這裡就不拾人牙慧了(最重要的是我也說不清楚)。

此處以微信iOS版為例,講講重簽名的操作過程:

1.

使用iOSSecAudit工具dump微信ipa到本地(就是小生上一篇文章《iOSSecAudit:一個iOSAPP安全審計工具 》中介紹的iOSSecAudit)

圖 1dump微信

2.解壓ipa文件,ipa文件跟apk一樣都是zip格式文件,Mac下直接雙擊就能解壓,如果你喜歡用命令或者什麼奇奇怪怪的工具都無所謂啦

圖 2解壓ipa

3. 刪除原簽名文件目錄,見圖3步驟2

4. 拷貝簽名描述文件,見圖3步驟3,是的,你首先得有自己的開發者證書(什麼,你不知道啥是開發者證書?那無所謂了,你就當看著玩吧)

5.

簽名,見圖3步驟4

6.

校驗簽名,見圖3步驟5(沒有輸出即為正確)

7.

打包為ipa文件,見圖3步驟6

圖 3重簽名

8.

iOSSecAudit

安裝運行,測試是否成功,見圖4

圖 4安裝運行

其中,簽名時用到了一個entitlements.xml文件,其內容如圖5;還有一個簽名描述文件embedded.mobileproversion為開發者證書文件,你得有自己得開發者證書才有的啦。

以上第3到第7步的重簽名過程,其實可以寫一個腳本來代替,對,我說的就是iOSSecAudit的resign命令。

圖 5entitlements.xml

ipa重打包,重簽名基本就這些,搞定以後,這個重打包的ipa就能安裝到一個未越獄的iPhone上了。


0×02 dylib注入

關於OS X平台下的注入,一年半以前國外就有一篇文章講的非常透徹了,原文鏈接:dylibhijacking on OS X,去年十一期間我在公司看到過翻譯文章:譯文鏈接(不過這個鏈接現在應該打不開了……吧,英文湊合著看吧,看不懂就硬著頭皮看)。

iOS下的注入,簡單來說,大致思路是給binary添加一個Load Commands,每次啟動的時候,這個Load Commands告訴系統在啟動binary的時候要載入指定路徑的dylib,然後你的那點小而髒的代碼就可以執行了哈。

嗯,這裡需要對macho header格式非常熟悉。下面說下具體操作步驟:

1.

用iOSSecAudit將dump回來的微信binary進行nonfat處理,否則會看到好幾個macho頭,不方便改動

圖 6nonfat操作

2.

用MachoView打開nonfat後的binary文件,現在要添加一條如圖7所示的LoadCommand

圖 7load command示例

3.

我使用的是radare2對binary進行修改,使用radare2打開binary,如圖8

圖 8radare2打開binary

4.

原binary中最後一個load command的偏移為0x1bd0,command size為16,所以需在偏移0x1bd0+16處開始添加新的load command,然後按順序寫入Command、Command Size、Str Offset、Time Stamp、Current Version、Compatibility Version和Name欄位,如圖9

圖 9插入一條load command

5.

最後修改Mach header中的Number of Load Commands(這個欄位用於記錄該macho文件中的LoadCommands總數)和Size of Load Commands欄位(這個欄位用於記錄該macho文件中的Load Commands總大小)。

本例中這兩個欄位原來的值為73和7108,則新的Number of Load Commands為73+1=74,新的Size ofLoad Commands為7108+48=7156

6.

另外,由於radare2寫入符號「@」時,會出錯(不知道是不是我不會用,誰會用的請通過各種渠道告訴我下),在第四步中我使用字母「a」來代替「@」,所以,最後還需要將「a」改成「@」,本例中使用UltraEdit進行編輯,如圖10

圖 10修改@號

7.

最後,還有一點需要注意的是,Current Version和Compatibility Version欄位,最好直接給為0×0,因為系統在load dylib的時候,會檢查dylib的版本號。

如果此處的版本號大於dylib實際的版本號,則會導致crash(我是不會告訴你們這個版本號的問題坑了我一整晚的,還有那個「@」號坑了我一個小時,手動再見)。呵呵,因為theos編譯出的dylib,其版本號為0×0。

那麼重點來了,如果一個命令就能將一個dylib注入到一個binary中,豈不快哉~對,我說的就是iOSSecAudit的 dlinj命令;再如果一個命令就能將一個dylib注入到binary,並將ipa進行重簽名,豈不更快哉,嗯,我說的就是iOSSecAudit的 dlini命令。

0×03非越獄外掛上線

只需要把buginux的代碼clone下來,make出一個dylib文件,文件名改成啥您隨意就好,然後把dylib文件copy到微信binary的同目錄下,一起簽名,然後用0×02章節中的方法進行代碼注入。

再用0×01章節中的方法對ipa進行重簽名,最後用iOSSecAudit安裝,登陸進去就能展示紅包外掛的威力了。

最最最重要的是,如果一個命令就能將本文提到的dylib注入、重簽名和安裝,整個過程一鍵搞定,豈不……,您猜對了,就是iOSSecAudit的 dlinji命令!

關於搶紅包神器,只能說這麼多了……如果直接就做個工具丟出來,只會讓搶紅包這件事情失去樂趣,更慘的是你會沒朋友的,不要問我怎麼知道的,捂屁股,哦不,捂臉。有興趣的同學可以聯繫我的微博和Twitter(

@Junejuly

)一起交流。

*本文原創作者:薛定諤的大表哥 ,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載




請您繼續閱讀更多來自 FreeBuf 的精彩文章:

一個和任天堂遊戲機有關的0-day漏洞,可能對大多Linux系統造成影響
烏克蘭再次發生大規模停電事故,疑似遭遇黑客攻擊
搭建屬於你自己的維基站點:MediaWiki
這個300美金的設備能夠在30秒內竊取你的Mac密碼(含攻擊演示視頻)

TAG:FreeBuf |

您可能感興趣

一個「偽紅包」的故事
午夜鬼故事——別亂搶紅包
現在紅包也那麼污了么?
現在妹子要紅包都這麼直接了嗎?紅包狗太奇葩
妹砸聽我說貪吃蛇總動員 現金紅包有點多
拿紅包這件事,日本小朋友跟我們有一樣的痛
紅包,紅包,紅包,我看見紅包了!
為了搶紅包,班花竟然當著全班做那種事
家裡的粽子一直很好吃「搶紅包群敘述」
諷刺故事:索要紅包
老外也搶紅包!美國人這樣克隆似乎根本停不下來
深夜裡的那些「紅包」
關於紅包那點事兒,男人看了沉默,女人看了流淚
停車居然免費?還送紅包?還有這種好事
搶紅包,關火腿腸什麼事?
一點紅包,略表心意
大板瓷磚這麼火,簡一如何駕馭?內含紅包
從薛之謙被網紅包養事件看愛情中我們該學會的那些事
你攤上大事了!這裡有個天大的紅包快搶