Jollen's email: jollen # jollen.org

more: Jollen's Consulting | Jollen's Wiki

« Qt Centre Programming Contest 2007:與一些自己的小想法 | Home | .bss section:C 語言所種下的因 »

「Truncate It」小技倆的原始碼與原理

jollen 發表於 January 9, 2007 11:41 PM

先前提到的「一個防止程式被玩耍的小技倆」中,Jollen 提供了一個稱為「Truncate It」的小工具,我把他的原始碼放在此處「http://tw.jollen.org/elf-programming/truncate_it.tar.bz2」,有興趣的朋友可下載回家把玩

用法請參考前一則日記的介紹,另外,「Truncate It」只是一個「呈現概念的原型」,並未良好的 coding,除了結果是輸出到 stdout 外,現階段也只能處理 IA32 的 ELF image。

Truncate It 的原理

Truncate It 的原理相當簡單,我只是把「Section Header Table」等資訊由 ELF image 中移除,因此「標準工具」便無法處理 ELF image;這是由於 GNU binutils 的工具都是以 linking view 來解讀 ELF image 之故,若要正常反組譯「truncated ELF image」,就要以 execution view 的角度來解讀執行檔。

此外,Section Header Table 在 execution view 時是 optional 的,可參考 Jollen 先前的日記「ELF(Executable and Linking Format)格式教學文件, #1: ELF 簡介」。

以下以一個操作流程來說明 Truncate It 的原理:

1. 如下圖(objdump)。

truncate_it_01.JPG

2. 把前半段的內容切出來,存成 hello.trunc

# dd if=hello of=hello.trunc bs=1308 count=1
讀入了 1+0 個區段
輸出了 1+0 個區段
# chmod a+x hello.trunc

0x51c 等於十進位 1308。其中,.bss section 的長度為 4,但是 0x51c 並不需要再加上 4,原因請參考 Jollen 的「BSS Section Concepts: .bss section 的基本觀念介紹專欄」。

此外,.bss section 在一般情況下都會是「strip 後的最後一個 section」。.bss section 不佔實體檔案空間,會有 .bss section 的存在,主要的原因是「因為當初 C 語言標準所種下的因。」

--jollen

引用通告

如果您想引用這篇文章到您的Blog,
請複製下面的鏈接,並放置到您發表文章的相應界面中。

http://www.jollen.org/cgi-bin/mt3/mt-tb.cgi/322

發表一個評論

(您發表的意見將被立即接受,但需要一點時間與後端伺服器做同步,您的留言才會顯示在網站上。為避免 spam 攻撃,按「發表」後請輸入帳號密碼。使用者帳號:「nospam」、密碼:「nospam」。)

[Top] Copyright (C) 2006,2010 www.jollen.org.
All rights reserved. All content licensed under Creative Commons License.