2019年4月12日星期五

軟件逆向工程目前的研究方向?



  vc++項目使用IDA進行代碼逆向工程級逆向主要有幾個步驟:

  1。檢測RTTI是否開啟,如果開啟,則利用RTTI信息獲取有關類名、繼承關系、虛函數地址。

  2。通過1得到的類名和繼承關系,用自己寫的腳本將其轉換成一個c++完整的項目,裡面包含。h和對應的。cpp。

  3。具體分析某個類的結構的時候,RP一定3D列印要找到他的構造函數。(構造函數一般出現在[ecx+n]進行一系列賦值的情況下)。

  4。通過3找到的構造函數得到裡面的最大偏移,暫定此偏移就是類的大小,然後在2建立的項目裡面寫入變量名,用DWORD unknow_n表示未知變量,n代表變量的偏移,等具體分析到某個偏移時才賦予他一個你自己取的名字。

  5。通過4獲取的類的大小可能不是那麼准確,還可以根據在堆中分配對像時new之前的push判斷大小,另外還可以根據STL的操作,比如vector他的許多操作都會判斷分配內存是否夠用,然後會new一個2倍的空間,釋放原來的空間,這個時候可以准確判斷他的大小。

  6。那麼怎麼確定5中提到的STL呢,因為不同版本的STL代碼和內存布局不一樣,所以我們首先需要用工具查看軟件的編譯器版本,然後通過查看某些特定字符串(如"list is too long"),或者通過構造函數中STL某些公共基類虛函數表初始化得知STL信息。

  7。如果要分析的主程序是可以寫plugin 並提供SDK的,先分析SDK中的類(那些沒有出現在頭文件中的類),得到一些數據結構,這些打樣結構可能是plugin和主程序通用的,為我們分析主程序打基礎。

  8。對於某些特定函數先要熟悉其源代碼,比如最常見的string。c_str()這個函數有個標志性的判斷size是否大於16,以此為線索進行分析。

  9。小心IDA本身的缺陷(模板類型導入,c++頭文件解析,F5插件sp-value判斷錯誤導致虛函數參數個數推導錯誤,F5返回浮點和bool不顯示等等樣品)

没有评论:

发表评论