[英]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.