企業殼反除錯及hook檢測分析

Editor發表於2018-01-25


1.寫在開始... 2

2.反除錯之時間執行緒檢測... 2

3.反除錯之ptrace檢測... 5

4.大致呼叫流程... 7

5.Hook檢測之Xposed檢測... 8

6.Hook檢測之substrate檢測... 9

7.小結... 10

8.參考引用... 10

1.寫在開始

最近在學習梆梆殼加固思路,在除錯的過程中遇到了反除錯,很是苦惱,而且每次除錯都會被中斷,盆友在論壇發了篇帖子【1】介紹了其中的一個反調,學習後收穫頗多,給我指明瞭方向,接下來再對其他反除錯進行補充,僅學習目的,若有疏漏或不合理之處請各位大佬多多指教。

2.反除錯之時間執行緒檢測

啟動除錯後是對帖子【1】的驗證,過程大致如下:

執行brpt.py後一路F9,

#下斷點

# 記憶體中獲取模組基地址

base = FindModule('linker');

#.text:00002464    BLX        R4

addr = base + 0x2464; #該偏移值需要使用IDA靜態檢視linker模組的偏移值

#給linker下斷點

AddBpt(addr);

#在libc.so中對庫函式下斷點

AddBpt(LocByName('fopen'));

AddBpt(LocByName('ptrace'));

當lr為pB54EB0CAE49198754C66F4A57BDB01DF函式時即為第一個反除錯的執行緒建立處,然後會呼叫libDexHelper.so:pDD8ABF73B0AE99BD998BC5C954A74856,

企業殼反除錯及hook檢測分析

再按一次F9即可斷到帖子中提到的fopen函式處

企業殼反除錯及hook檢測分析

執行完fopen後,回到呼叫函式libDexHelper.so:p8878CAA1006835C9D43174C88143BA8B+A6處,然後在如下所示處下斷點,F9執行到此處,觀察暫存器的值並做相應的修改,具體思路就是要跳過libDexHelper.so:AEDC62A8

BLX  sub_AEDA6ECC 這個函式呼叫即可。

企業殼反除錯及hook檢測分析

執行完成後,會跳出呼叫函式,來到下圖處將r0暫存器的值修改為0,或將指令#1改為#0即可。

企業殼反除錯及hook檢測分析

並在p39D6B1EED99DC7E506A9D4E07BD58D3A處下斷,

企業殼反除錯及hook檢測分析

執行完之後F9,則會跳到p39D6B1EED99DC7E506A9D4E07BD58D3A處,

企業殼反除錯及hook檢測分析

該函式功能類似kill,具體過程參考帖子【1】。

接下來通過靜態分析知道了時間執行緒的建立點,如下所示:

企業殼反除錯及hook檢測分析

具體的時間檢測函式如下:

企業殼反除錯及hook檢測分析

其中主要就是呼叫了gettimeofday函式,獲取時間,然後再做比較,

企業殼反除錯及hook檢測分析

不滿足條件則kill掉

企業殼反除錯及hook檢測分析

以上便是時間檢測的功能了。

3. 反除錯之ptrace檢測

接下來是ptrace檢測函式通過靜態分析ptrace被呼叫了3次,首先進行PTRACE_ATTACH,第二次呼叫後和0進行比較,最後進行PTRACE_DETACH,如下所示:

企業殼反除錯及hook檢測分析

另一處case 13會呼叫pF77EA32766D841ED6BD10130E181CB0D()是ptrace檢測,

企業殼反除錯及hook檢測分析

在p9392640B2E38B72373213C945704CA08處也呼叫了ptrace檢測,

企業殼反除錯及hook檢測分析

具體函式如下所示:

企業殼反除錯及hook檢測分析

其中p1EBFB58D66C99CAD7405904C9B93559D()->p39D6B1EED99DC7E506A9D4E07BD58D3A。

4.大致呼叫流程

經過上述分析,整理大致呼叫流程如下(隨手畫的比較挫):

企業殼反除錯及hook檢測分析

5.Hook檢測之Xposed檢測

對於Xposed檢測主要是對相關字串做了比對,如下圖所示:

企業殼反除錯及hook檢測分析

在做完比對後返回0和1進行比較,最後又會呼叫那個自己寫的p39D681EED99DC7E506A9D4E07BD58D3A函式,前面提到,該函式功能類似kill,此處做了重新命名為p3_linux_syscal_kill。

企業殼反除錯及hook檢測分析

6.Hook檢測之substrate檢測

通過靜態分析可知,pAFD3E6E79D2F88D9F3563AE570866D51函式在case2中呼叫了

pB4DACEC3279252082ECED1471A664BF7函式,此函式則為substrace的檢測點,

企業殼反除錯及hook檢測分析

具體函式如下所示:

企業殼反除錯及hook檢測分析

當然也是比較的字串,根據以上資訊可以在手機中安裝對應的框架進行動態驗證,由於我的環境沒有安裝該hook框架,故暫未進行動態驗證。

7.小結

根據以上分析,過掉以上反除錯就很容易了,具體操作不難,不再贅述,方法可以參考帖子【2】。我採用idapython指令碼繞過,終於可以開心的除錯了,以上當然不是所有的反調,具體還有其他細節的處理遇到了再根據具體情況加以分析,其中還有inotify沒有分析,具體可以參考另一篇帖子【3】。當然,對於梆梆殼這只是邁出的第一步,還有很多需要繼續加油!

8.參考引用

【1】https://bbs.pediy.com/thread-223808.htm

【2】https://bbs.pediy.com/thread-218938.htm

【3】https://bbs.pediy.com/thread-223320.htm

*宣告:僅供學習交流

本文由看雪論壇 fzyspark 原創  轉載請註明來自看雪社群

相關文章