[發明專利]一種二進制反編譯中數組數據結構恢復方法及系統有效
| 申請號: | 201810573717.3 | 申請日: | 2018-06-06 |
| 公開(公告)號: | CN108958739B | 公開(公告)日: | 2020-11-10 |
| 發明(設計)人: | 高慶;張世琨;孫永杰;馬森 | 申請(專利權)人: | 北京大學;北京北大軟件工程股份有限公司 |
| 主分類號: | G06F8/53 | 分類號: | G06F8/53 |
| 代理公司: | 北京路浩知識產權代理有限公司 11002 | 代理人: | 王瑩;吳歡燕 |
| 地址: | 100871*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 二進制 反編譯 數組 數據結構 恢復 方法 系統 | ||
本發明提供一種二進制反編譯中數組數據結構恢復方法及系統,所述方法包括:S11,對于目標反編譯結果中任一非指針變量,若該非指針變量的實際占位大小與該非指針變量的類型對應的占位大小之間的差值大于第一預設閾值,則將該非指針變量作為目標變量;S12,獲取目標變量在目標反編譯結果中各使用位置對應的第一使用模式,若根據第一使用模式對應的第一權重確定目標變量為數組變量,則對數組變量的數據結構進行恢復。本發明實現了對反編譯結果中數組數據結構的自動恢復,且提高了數組數據結構恢復的正確率。
技術領域
本發明屬于軟件分析技術領域,更具體地,涉及一種二進制反編譯中數組數據結構恢復方法及系統。
背景技術
IDA(Interactive Disassembler,交互式反匯編器)工具是一種反匯編工具,用于分析編譯生成的二進制文件,生成反匯編代碼,從而盡可能呈現接近源代碼的類C代碼,可用于惡意代碼分析、漏洞研究和隱私保護等多個軟件分析方向。
目前,IDA工具在自動生成類C代碼時,會丟失大量的數組數據結構信息。如下為編譯前的樣例代碼片段:
void f()
{
int s[10];
memset(s,0,sizeof(s));
}
上述樣例代碼片段中s為數組,memset是為數據分配存儲空間的函數。將上述樣例代碼進行編譯生成二進制文件,對二進制文件進行反編譯生成的類C代碼如下:
unsigned int f()
{int s;
memset(s,0,0x28u);
}
上述類C代碼中s為普通常量,反編譯后丟失了s的數據結構。由于正確的數組數據結構信息對分析人員理解代碼和進一步的軟件分析有重要作用,比如輔助理解代碼內容等。雖然IDA工具中存在對類C代碼進行數組數據結構恢復的插件,但需要手動對每個變量進行標記,效率低,且很容易產生錯誤。此外,對標記人員的要求也較高。在大型的軟件中,變量的數量龐大,從而導致工作量大,需要大量的人力和時間。
綜上所述,現有技術中對反編譯生成的類C代碼進行數組數據結構恢復需要手動操作,需要耗費大量人力和時間,且容易產生錯誤。
發明內容
為克服上述現有的數組數據結構恢復方法費時費力,且容易產生錯誤的問題或者至少部分地解決上述問題,本發明提供一種二進制反編譯中數組數據結構恢復方法及系統。
根據本發明的第一方面,提供一種二進制反編譯中數組數據結構恢復方法,包括:
S11,對于目標反編譯結果中任一非指針變量,若該非指針變量的實際占位大小與該非指針變量的類型對應的占位大小之間的差值大于第一預設閾值,則將該非指針變量作為目標變量;
S12,獲取所述目標變量在所述目標反編譯結果中各使用位置對應的第一使用模式,若根據所述第一使用模式對應的第一權重確定所述目標變量為數組變量,則對所述數組變量的數據結構進行恢復。
具體地,S11之前還包括:
若目標反編譯結果中各非指針變量為局部變量,則獲取所述非指針變量所屬函數的棧結構,根據各所述非指針變量在所述棧結構中的位置獲取各所述非指針變量的實際占位大小;
若各所述非指針變量為全局變量,則獲取各所述非指針變量的存儲區結構,根據各所述非指針變量在所述存儲區結構中的位置獲取各所述非指針變量的實際占位大小。
具體地,S11之前還包括:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京大學;北京北大軟件工程股份有限公司,未經北京大學;北京北大軟件工程股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810573717.3/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:PLC控制的梯級代碼編譯方法及裝置
- 下一篇:一種數據處理方法及裝置





