如何hook那些在IDA中顯示為sub_xxx的函數


唉,說起來這就是一個坑,Cydia Substrate在其文檔中也沒找到詳細說明,最后也只能來看看代碼曾半仙最早給的那份substrate-master源碼,然后一切就了然於胸了,這個坑很大,很大!!!
現在我們先來看下MSHookFunction怎么Hook IDA中的sub_xxxx函數,然后再來談談為啥是這樣的。

就以這段代碼為例吧,下斷點紅色選中部分,中的sub_17C94就是我想要Hook的函數,首先確認了下參數個數為2個。
以下給出代碼片段截圖:

看到這里我想很多人有點不理解,為啥需要 | 0x00000001,別急,下面我就借花獻佛,慢慢道來也。
既然源頭是出現在MSHookFunction上,那們我們就去閱讀下這塊的代碼:

從這2 段代碼中可以很明顯的看到在SubstrateHookFunction中,看到這么一句
if ((reinterpret_cast(symbol) & 0x1) == 0)
也就是說,MSHookFunction在判斷Hook函數的時候,是通過在傳到進來函數地址的奇偶數來判斷是ARM指令的函數,還是Thumb指令的函數。
這個坑好大,我勒個去啊!!!
別急,接下來看這句
reinterpret_cast(reinterpret_cast(symbol) & ~0x1)
判斷完后,為了能正確Hook地址,又改回原來的地址了,這下變清楚了吧。
再者,從MSFindSymbol函數中也能清楚的看到**value |= 0x00000001**這句!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM