You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需重编译:修改ELF可执行文件静态字节数组的方案探讨

解决方案:无需重编译修改自解压程序的压缩数据

方案一:占位符替换法

  • 预先在自解压程序源码里定义固定大小的占位符数组,比如:
    // 预设足够大的占位空间,比如10MB,用固定字节填充便于识别
    const unsigned char compressedData[10*1024*1024] = {0xAA, 0xAA, ...};
    const size_t uncompressedSize = 0; // 初始占位值
    
  • 编译完成后,直接在二进制文件中扫描这段固定填充字节的连续区域,以及uncompressedSize的存储位置。
  • 实际生成自解压文件时,将压缩后的真实数据覆盖到占位符区域,同时更新uncompressedSize的数值。注意必须保证真实数据大小不超过预设的占位容量,避免破坏程序其他内容。

方案二:自定义可扩展段(优化版)

  • 编译自解压程序时,通过链接脚本创建一个可写且放在程序末尾的自定义段(例如命名为.compressed_data),将compressedData和uncompressedSize都放到这个段内。
  • 使用LIEF修改时只需处理该自定义段:
    1. 定位到自定义段,调整其size和virtual_size字段以容纳新的压缩数据。
    2. 将真实压缩数据写入段内容区域,同步更新uncompressedSize的值。
    3. 由于段位于程序末尾,扩展时无需调整其他段的地址和偏移,操作复杂度大幅降低。

简化实现的小技巧

  • 在占位符开头添加特殊标记(比如0xDEADBEEF),无需硬编码偏移,直接扫描二进制文件即可定位占位区域。
  • 将uncompressedSize放在标记位后的固定偏移位置,方便快速找到并修改。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:22:37