紅包外掛那點事
*本文原創作者:薛定諤的大表哥 ,本文屬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原創獎勵計劃,未經許可禁止轉載
※一個和任天堂遊戲機有關的0-day漏洞,可能對大多Linux系統造成影響
※烏克蘭再次發生大規模停電事故,疑似遭遇黑客攻擊
※搭建屬於你自己的維基站點:MediaWiki
※這個300美金的設備能夠在30秒內竊取你的Mac密碼(含攻擊演示視頻)
TAG:FreeBuf |
※一個「偽紅包」的故事
※午夜鬼故事——別亂搶紅包
※現在紅包也那麼污了么?
※現在妹子要紅包都這麼直接了嗎?紅包狗太奇葩
※妹砸聽我說貪吃蛇總動員 現金紅包有點多
※拿紅包這件事,日本小朋友跟我們有一樣的痛
※紅包,紅包,紅包,我看見紅包了!
※為了搶紅包,班花竟然當著全班做那種事
※家裡的粽子一直很好吃「搶紅包群敘述」
※諷刺故事:索要紅包
※老外也搶紅包!美國人這樣克隆似乎根本停不下來
※深夜裡的那些「紅包」
※關於紅包那點事兒,男人看了沉默,女人看了流淚
※停車居然免費?還送紅包?還有這種好事
※搶紅包,關火腿腸什麼事?
※一點紅包,略表心意
※大板瓷磚這麼火,簡一如何駕馭?內含紅包
※從薛之謙被網紅包養事件看愛情中我們該學會的那些事
※你攤上大事了!這裡有個天大的紅包快搶