簡體   English   中英

如何在 ELF 文件中剝離 header 表部分?

[英]How do I strip section header table in an ELF file?

我是 ELF 二進制保護的新手。

我想剝離 header 表部分以避免調試。

我嘗試通過運行 readelf -h 在磁盤上找到 header 表偏移部分,並嘗試 nop 它們,但它們都是 0。

如何剝離 header 表部分?

提前致謝。

首先,您可以使用readelf --section-headers檢查 elf 中存在哪些部分。 您應該看到如下內容:

$ readelf --section-headers <your-file>

[ #] Name               Type            Address            Offset
     Size              Size.Ent         Flags     -     -  Alignment
[ 0]                   NULL             0000000000000000  00000000
     0000000000000000  0000000000000000           0     0     0
[ 1] .data             PROGBITS         00000000006000b0  000000b0
     000000000000003b  0000000000000000  WA       0     0     1
[ 2] .text             PROGBITS         0000000000a000f0  000000f0
     00000000000003e9  0000000000000000  AX       0     0     1
[ 3] .shstrtab         STRTAB           0000000000000000  000004d9
     0000000000000027  0000000000000000           0     0     1
[ 4] .symtab           SYMTAB           0000000000000000  00000680
     0000000000000438  0000000000000018           5    41     8
[ 5] .strtab           STRTAB           0000000000000000  00000ab8
     0000000000000258  0000000000000000           0     0     1

而且您應該知道大多數部分是由 linker 添加的,因為您在二進制文件中唯一需要的真實部分是.text.data 如果您手動進行鏈接,則可以省略大多數其他信息。

如果您使用的是經典的ld linker,我建議您嘗試選項--strip-all--strip-debug 顧名思義,它們從二進制文件中刪除了調試信息和其他符號信息——在這里你可以看到文檔。

$ readelf --section-headers <your-file>

[ #] Name               Type            Address            Offset
     Size              Size.Ent         Flags     -     -  Alignment
[ 0]                   NULL             0000000000000000  00000000
     0000000000000000  0000000000000000           0     0     0
[ 1] .data             PROGBITS         00000000006000b0  000000b0
     000000000000003b  0000000000000000  WA       0     0     1
[ 2] .text             PROGBITS         0000000000a000f0  000000f0
     00000000000003e9  0000000000000000  AX       0     0     1
[ 3] .shstrtab         STRTAB           0000000000000000  000004d9
     0000000000000017  0000000000000000           0     0     1

但是到現在為止,您可能應該只有 3 個部分,並且由於大部分數據已經被省略,您可以在這一點停止 - 現在您的.shstrtab只包含文本和數據部分的名稱 - 這並不是一個真正的秘密:)

現在這真的取決於你准備 go 的程度。

如果您想繼續,我建議您嘗試另一個名為strip (來自binutils)的工具,您可以像這樣使用它: strip --remove-section=shstrtab <your-file> - 它基本上刪除了不需要的部分,但事實並非如此我記得使用它時很容易擺脫.shstrtab

您甚至可以嘗試自己刪除它 - 因為您知道部分的確切偏移量(並且它可能在文件的最后),您可以在它上面放置零,也就是將部分“重命名”為 null :)

根據 ELF 規范,執行不需要 shstrtab,因此即使您手動從文件中刪除它(刪除這些字節)也應該沒問題 - 只需保持其他指針、偏移量等有效


在我的情況下,刪除調試信息是可以的,所以我沒有 go 但你可以 - 我只祝你好運:)

您可以下載 Upx 打包程序。 然后,當你運行objdump -fs時,你會有一些鏈接:

ransom:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000140:
DYNAMIC, D_PAGED
start address 0x0000000000003190

沒有別的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM