一種固件代碼反彙編中端模式差異的處理方法
2023-04-28 13:26:16
專利名稱:一種固件代碼反彙編中端模式差異的處理方法
技術領域:
本發明涉及一種涉及計算機學科中的硬體結構、固件逆向工程技術,尤其是涉及一種固件代碼反彙編中端模式差異的處理方法。
背景技術:
逆向工程技術是指分析特定目標系統的結構組成及其相互關係並建立更高級更具抽象化的系統的過程。固件代碼的反彙編就是把目標固件中的機器代碼轉換為彙編代碼的過程,亦即從低級語言向高級語言的轉換,該技術被廣泛地運用於計算機軟體破解、病毒分析以及軟體漢化等領域。
固件逆向工程是逆向工程技術的重要分支,其特徵主要是由固件的差異引起的,計算機中的端模式差異是一個典型例子。端模式差異,簡而言之,就是計算機中內存中的數據存放順序不同數據的高位保存在內存的低地址,而數據的低位保存在內存的高地址中,這樣的存儲模式稱為大端(Big-Endian)模式;與之相反,數據的高位保存在內存的高地址,而數據的低位保存在內存的低地址中,這樣的存儲模式稱為小端(Little-Endian)模式。由於內存中數據的存放方式的差異,固件代碼反彙編的結果也會大相逕庭。儘管近年來針對固件的反彙編工具不斷湧現,其中有IDA、W32Dasm等,但是這些工具大多沒有明確說明解決端模式差異的解決方案。
發明內容
本發明的上述技術問題主要是通過下述技術方案得以解決的提出問題計算機端模式差異,大端和小端會影響機器碼的真實順序和值。一般地,在反彙編之前要做的是將代碼從固件之中提取出來,根據給定的硬體,可以很容易得知其內部的端模式,但是去除硬體的約束,任意給出一段機器碼,怎樣獲知其運行環境下的端模式信息進而合理地反彙編?分析問題在運行環境確定,即微處理器型號已知的情況下,我們可以直接得到兩種情況即兩種端模式下的高級指令,分別進行語法語義判斷,選取其中最合理的作為最優解,因為原始機器碼錶徵的高級程序顯然是確定並且在語法語義上是正確的,這樣得到的最優解顯然也是最接近原始高級程序的。解決問題反彙編的流程是由二進位代碼得到指令,二進位代碼的順序直接影響最終結果。而端模式的差異恰恰體現在機器碼的順序差異方面。因此解決問題的思路即在反彙編處理(靜態掃描或者動態掃描)之前調整機器碼為合理的順序。因此,本發明涉及的一種固件代碼反彙編中端模式差異的處理方法,其特徵在於,包括以下步驟步驟I :由初始化模塊將從晶片中提取的機器碼存放在數組C中;通常情況下機器碼樣本為二進位形式或十六進位形式,若為二進位形式,則將其轉換為十六進位形式;
步驟2 :由檢測模塊進行機器碼檢測,即檢測機器碼的長度L,保證L是N的整數倍,若不足則補零,將步驟一中的數組C轉換成數組D。其中N是依據不同硬體情況決定,若硬體的存儲單元大小為Mbit,則N=M/2 ;步驟3 :由局部逆置模塊將步驟2中的數組D中的元素以每N個元素為一個單元U,單元內部對半調換,即前N/2個元素和後N/2個元素整體調換位置;步驟4:由全局逆置模塊將步驟3中的單元U編號為0、1、……、n_l,分別將編號之和為n-1的兩個單元的內容進行逆置,即0單元和n-1單元交換內容;1單元和n-2單元交換內容;2單元和(n-3)單元交換內容......m單元和(n-m-1)單元交換內容。因此,本發明具有如下優點本發明根據硬體不同產生的端模式差異,調整機器代碼順序,有助於提升反彙編的準確度,並能有效解決各種微處理器的反彙編機器碼的正確性問題。
圖I是本發明中Big-Endian模式下內存和數據映射示意圖。圖2是本發明中Little-Endian模式下內存和數據映射示意圖。圖3是本發明中Little-Endian模式下機器碼處理示意圖。
具體實施例方式下面通過實施例,並結合附圖,對本發明的技術方案作進一步具體的說明。實施例本發明的方法的目的是解決反彙編過程中微處理器端模式的差異引起的結果的不準確性,為了方便闡述,現在以M16C微處理器的反彙編為例進行說明。圖I和圖2分別是Big-Endian模式和Little-Endian模式下的內存和數據的映射示意圖,從提取機器碼的角度出發,我們默認提取出來的機器碼的內存實際地址是從小到大遞增的方向,那麼在Big-Endian模式下,由於地址的方向性未被破壞,因此可以直接進行下一步的反彙編;而在Little-Endian模式下,機器碼的地址遞增的方向與真實指令的字節方向相反,所以需要進行處理。在Little-Endian模式下,考慮M16C嵌入式微處理器,其內存單元為8位,處理的過程如圖3所示,假設提取的機器碼用十六進位表示為「0123456789ABCDEF02468ACE」,那麼在Little-Endian模式下,進行反彙編的代碼應當為「CE8A4602EFCDAB8967452301 」。
經過分析發現,這一步的過程等價為
權利要求
1. 一種固件代碼反彙編中端模式差異的處理方法,其特徵在於,包括以下步驟 步驟I :由初始化模塊將從晶片中提取的機器碼存放在數組C中;通常情況下機器碼樣本為二進位形式或十六進位形式,若為二進位形式,則將其轉換為十六進位形式; 步驟2 :由檢測模塊進行機器碼檢測,即檢測機器碼的長度L,保證L是N的整數倍,若不足則補零,將步驟一中的數組C轉換成數組D,N是依據不同硬體情況決定,若硬體的存儲單元大小為M bit,則N = M / 2 ; 步驟3 由局部逆置模塊將步驟2中的數組D中的元素以每N個元素為一個單元U,單元內部對半調換,即前N/2個元素和後N/2個元素整體調換位置; 步驟4:由全局逆置模塊將步驟3中的單元U編號為0、1、……、n-l,分別將編號之和為η-l的兩個單元的內容進行逆置,即O單元和η-l單元交換內容;1單元和n-2單元交換內容;2單元和(n-3)單元交換內容......m單元和(n-m-1)單元交換內容。
全文摘要
本發明涉及一種固件代碼反彙編中端模式差異的處理方法。首先初始化機器碼;然後由檢測模塊進行機器碼檢測,檢測機器碼的長度L,保證L是N的整數倍,若不足則補零,將數組C轉換成數組D。其中N是依據不同硬體情況決定,若硬體的存儲單元大小為Mbit,則N=M/2;再由局部逆置模塊將數組D中的元素以每N個為一個單元U,單元內部對半調換;最後由全局逆置模塊將單元U編號為0、1、……、n-1,分別將編號之和為n-1的兩個單元的內容進行逆置。利用本發明可以有效解決各種微處理器的反彙編機器碼的正確性問題,在反彙編之前對智能電能表內部MCU晶片提取的機器碼的順序加以調整,提高最終生成的高級語言的精確度。
文檔編號G06F9/45GK102968330SQ20121048930
公開日2013年3月13日 申請日期2012年11月27日 優先權日2012年11月27日
發明者劉金碩, 王謝兵, 李少騰, 章喻龍, 劉源, 劉天曉, 王亞鴿, 曾秋梅 申請人:武漢大學