來源鏈接: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%的分析時間。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/148/