本發明專利技術涉及一種固件代碼反匯編中端模式差異的處理方法。首先初始化機器碼;然后由檢測模塊進行機器碼檢測,檢測機器碼的長度L,保證L是N的整數倍,若不足則補零,將數組C轉換成數組D。其中N是依據不同硬件情況決定,若硬件的存儲單元大小為Mbit,則N=M/2;再由局部逆置模塊將數組D中的元素以每N個為一個單元U,單元內部對半調換;最后由全局逆置模塊將單元U編號為0、1、……、n-1,分別將編號之和為n-1的兩個單元的內容進行逆置。利用本發明專利技術可以有效解決各種微處理器的反匯編機器碼的正確性問題,在反匯編之前對智能電能表內部MCU芯片提取的機器碼的順序加以調整,提高最終生成的高級語言的精確度。
【技術實現步驟摘要】
本專利技術涉及一種涉及計算機學科中的硬件結構、固件逆向工程技術,尤其是涉及。
技術介紹
逆向工程技術是指分析特定目標系統的結構組成及其相互關系并建立更高級更具抽象化的系統的過程。固件代碼的反匯編就是把目標固件中的機器代碼轉換為匯編代碼的過程,亦即從低級語言向高級語言的轉換,該技術被廣泛地運用于計算機軟件破解、病毒分析以及軟件漢化等領域。 固件逆向工程是逆向工程技術的重要分支,其特征主要是由固件的差異引起的,計算機中的端模式差異是一個典型例子。端模式差異,簡而言之,就是計算機中內存中的數據存放順序不同數據的高位保存在內存的低地址,而數據的低位保存在內存的高地址中,這樣的存儲模式稱為大端(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日專利技術者劉金碩, 王謝兵, 李少騰, 章喻龍, 劉源, 劉天曉, 王亞鴿, 曾秋梅 申請人:武漢大學本文檔來自技高網...
【技術保護點】
一種固件代碼反匯編中端模式差異的處理方法,其特征在于,包括以下步驟:步驟1:由初始化模塊將從芯片中提取的機器碼存放在數組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?1,分別將編號之和為n?1的兩個單元的內容進行逆置,即0單元和n?1單元交換內容;1單元和n?2單元交換內容;2單元和(n?3)單元交換內容……m單元和(n?m?1)單元交換內容。
【技術特征摘要】
【專利技術屬性】
技術研發人員:劉金碩,王謝兵,李少騰,章喻龍,劉源,劉天曉,王亞鴿,曾秋梅,
申請(專利權)人:武漢大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。