打入二进制标识

elf 打标记技术

方案列举

在 Linux上,可以使用命令行工具 objcopy 来给编译好的二进制打上标记,根据参数的不同实现方式也有差别:

方式一:添加 section

具体步骤如下:

1.准备一个任意二进制文件,假设为 demo

2.运行打标签命令:objcopy --add-section unioncode=demo demo

3.运行查看标签命令:objdump -h demo

logan@logan-PC:~/work/temp/bin$ objdump -h demo

demo:     文件格式 elf64-x86-64

节:
Idx Name          Size      VMA               LMA               File off  Algn
 0 .interp       0000001c  00000000004002a8  00000000004002a8  000002a8  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 1 .note.ABI-tag 00000020  00000000004002c4  00000000004002c4  000002c4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 ......
 
 32 .debug_str    00045921  0000000000000000  0000000000000000  00048c87  2**0
                  CONTENTS, READONLY, DEBUGGING
 33 .debug_ranges 000002b0  0000000000000000  0000000000000000  0008e5a8  2**0
                  CONTENTS, READONLY, DEBUGGING
 # 这里已经加上了 section
 34 unioncode     00091600  0000000000000000  0000000000000000  0008e858  2**0
                  CONTENTS, READONLY

方式二:追加 .strtab

在 elf 文件中,可以使用字符串表节(.strtab)来存储字符串,通过添加一个自定义的字符串来实现标记。具体步骤如下:

1.打开二进制文件,使用 objdumphexeditor工具查看 ELF 文件的节表信息,找到 .strtab 节的偏移量和大小。

2.将自定义的字符串添加到该节的末尾,并在字符串末尾添加一个 NULL 字符。

3.在 elf 文件的符号表节(.symtab)中添加一个符号,用于引用新添加的字符串。可以使用 objcopy 工具来实现,具体命令如下:

objcopy --add-symbol <symbol_name>=<str_offset> <binary_file> 

其中,<symbol_name> 是新添加的符号名称,<str_offset> 是新添加的字符串在 .strtab 节中的偏移量。 相比方式一,本方法明显要复杂许多。

方式三:添加 .note section

该字段专用于注释,可以添加更多信息,使用命令如下:

objcopy --add-section .note.your_note=your_note_file.elf your_input_file.elf your_output_file.elf

注意:该命令中的提示字符需要四字节对齐,否则会报错

其中 .elf 是注释文件,需要满足规定的格式 Elf64_Note

struct Elf64_Note {
    Elf64_Word n_namesz;  // 名称的大小
    Elf64_Word n_descsz;  // 描述信息的大小
    Elf64_Word n_type;    // 注释类型
    char *n_name;         // 注释名称
    char *n_desc;         // 描述信息
};

运行命令可以得到:

# 添加
logan@logan-PC:~/work/temp/bin$ objcopy --add-section .note.builder=your.elf target target

# 查询结果
logan@logan-PC:~/work/temp/bin$ readelf -n target

Displaying notes found in: .note.ABI-tag
  所有者             Data size  Description
  GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
    OS: Linux, ABI: 3.2.0

Displaying notes found in: .note.gnu.build-id
  所有者             Data size  Description
  GNU                  0x00000014       NT_GNU_BUILD_ID (unique build ID bitstring)
    Build ID: ec8c0ba711b17f71ffe6c74e98b047908bf89903

# 这部分是新添加的,其中“description data“的值为UUID
Displaying notes found in: .note.builder
  所有者             Data size  Description
  Owner     0x00000020       NT_VERSION (版本)
   description data: 22 32 64 36 66 34 64 34 34 63 38 64 34 66 35 63 39 64 33 65 33 66 33 66 39 65 37 63 31 63 35 65 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值