对 ELF 可执行文件的简单代码注入

发布: (2026年3月3日 GMT+8 20:44)
3 分钟阅读
原文: Dev.to

Source: Dev.to

示例来源

/**
 * Simple Code Injection
 */

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    int i, num;

    num = 10;

    for (i = 0; i :
    1149:   f3 0f 1e fa             endbr64
    114d:   55                      push   %rbp
    114e:   48 89 e5                mov    %rsp,%rbp
    1151:   48 83 ec 20             sub    $0x20,%rsp
    1155:   89 7d ec                mov    %edi,-0x14(%rbp)
    1158:   48 89 75 e0             mov    %rsi,-0x20(%rbp)
    115c:   c7 45 fc 0a 00 00 00    movl   $0xa,-0x4(%rbp)
    1163:   c7 45 f8 00 00 00 00    movl   $0x0,-0x8(%rbp)
    116a:   eb 1d                   jmp    1189 
    116c:   8b 45 f8                mov    -0x8(%rbp),%eax
    116f:   89 c6                   mov    %eax,%esi
    1171:   48 8d 05 8c 0e 00 00    lea    0xe8c(%rip),%rax        # 2004 
    1178:   48 89 c7                mov    %rax,%rdi
    117b:   b8 00 00 00 00          mov    $0x0,%eax
    1180:   e8 cb fe ff ff          call   1050 
    1185:   83 45 f8 01             addl   $0x1,-0x8(%rbp)
    1189:   8b 45 f8                mov    -0x8(%rbp),%eax
    118c:   3b 45 fc                cmp    -0x4(%rbp),%eax
    118f:   7c db                   jl     116c 
    1191:   b8 00 00 00 00          mov    $0x0,%eax
    1196:   c9                      leave
    1197:   c3                      ret

确定要修改的指令

设置 num = 10 的指令是:

c7 45 fc 0a 00 00 00    movl   $0xa,-0x4(%rbp)
  • c7movl 带 32 位立即数的操作码。
  • 45 fc – 位移 -0x4(%rbp)
  • 0a 00 00 00 – 立即数 0x0a(10),采用小端序。

该操作码的起始地址为 0x115c,立即数字节 0x0a 位于 0x115f

修改二进制文件

使用十六进制编辑器打开可执行文件,将 0x115f 处的字节(0x0a)替换为 0x05

$ hexedit ./main

定位到偏移 0x115f,修改数值,保存并退出。

结果

运行已打补丁的二进制文件:

$ ./main

输出:

#0
#1
#2
#3
#4

程序现在只循环五次,演示了通过直接修改 ELF 可执行文件中的机器码实现的简单代码注入。

注意: 该技术仅在不改变二进制整体布局的情况下替换字节时有效。若要更改指令长度或重新定位代码,则需要更高级的方法,这将在后续文章中介绍。

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...