來源鏈接:rootkiter.com

Author:RootKiter

無符號表情況下的逆向

LINUX平臺下的程序,可以通過strip程序進行精簡,精簡過的可執行文件會變小,同時又絲毫不影響執行效率。但這種情況會給程序逆向帶來困擾。由于沒有符號表的支持,所有函數在IDA中都會被顯示為sub_xxx的形式,這會給逆向工程帶來麻煩。

這里簡單記錄一下各常見平臺下的系統調用識別方法。

常見平臺的系統調用識別方法

無論哪個平臺的系統調用都有兩個關鍵點,一個是調用指令,另一個是調用號。

系統調用的具體功能由系統調用號制定,調用號和功能的對應關系要參考相關頭文件。

我把目前所有能找到的系統調用有關的頭文件,都放在了github 上的Reverse-bins項目中,供查閱。

X86

調用指令 INT 80h
寄存器 eax
參考表 x86系統調用表

ARM

ARM 下的系統調用,有兩種,一種是帶參數的,另一種是指令調用時參數指定,分別如下:

寄存器指定

調用指令 SVC 0
寄存器 r7
參考表 ARM系統調用表

指令內指定

調用指令 SVC 0xXXXXX
寄存器  
參考表 ARM系統調用表

MIPS

調用指令 syscall 0
寄存器 $v0
參考表 MIPS系統調用表

PPC

調用指令 sc
寄存器 r0
參考表 PPC系統調用表

SH4

調用指令 trapa #h’10
寄存器 r3
參考表 SH4系統調用表

SPC

調用指令 ta 0x10
寄存器 %g1
參考表 SPC系統調用表

這里記錄了無符號表時,系統調用函數的識別方法,可用于LINUX下逆向參考。

這種對照關系也可以在IDA腳本進行實現,以節省逆向時間,在分析MIRAI樣本的工作中,大概能節約30%的分析時間。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/148/