rpmrebuild

1.工具简介:rpmrebuild

rpmrebuild是一款经典的LinuxRPM包逆向与重构工具。
它的核心能力在于:在没有源代码(SRPM)的情况下,直接对已有的二进制.rpm包进行拆包、编辑和重新打包。

在进行软件跨平台移植、安全组件二次适配或临时修改某些内置配置文件时,如果你手头只有一个打好的二进制包,利用它的--edit-whole--change-files等功能,可以非常方便地进入沙箱修改文件并原地生成新包。

2.踩坑与报错排查

在最近处理一批由第三方跨平台工具打出来的RPM包时,发现官方原生版本的rpmrebuild存在两个严重的问题:

问题一:解包阶段直接崩溃,报错rpm2cpio:Nosuchfile

报错表现:

执行拆包命令时,工具直接报错退出:

复制代码
rpm2cpio::Nosuchfileordirectory
(RpmUnpack)rpm2cpiofailed,tryingrpm2archive,thismighttakelongtime

原因分析:

使用strace抓取底层系统调用后发现,传给rpm2cpio的参数是个空字符串。翻阅官方rpmrebuild.sh源码发现这是一个低级的变量名Bug:原作者在重构解压模块的RpmUnpack函数时,误将存储包路径的全局变量$RPMREBUILD_PAQUET写成了未被赋值的$PAQUET
处理方案:

在源码中将相关的$PAQUET变量彻底修正为正确的$RPMREBUILD_PAQUET

问题二:跨架构(非标架构)打包报错setarch:未识别的架构

报错表现:

当处理一些带有amd64(Debian系惯用命名)或aarch64标签的跨平台包时,工具会报错:

复制代码
setarch:amd64:未识别的架构
#或者在rpmbuild阶段报错:
错误:没有找到可供构建的兼容构架

原因分析:
rpmbuild拥有极其严格的构建环境校验(会去查对/usr/lib/rpm/rpmrc字典),它默认不认识amd64这种非标称呼。而rpmrebuild脚本试图调用setarch去模拟环境,在真正的异构或非标命名面前直接失效报错。
处理方案:

对源码进行深度改造。彻底废弃了原脚本中脆弱的setarch逻辑,并在参数解析器中原生引入了--force-arch参数。其底层逻辑是:在动态生成SPEC文件后,使用sed强行删除BuildArch属性让rpmbuild失去校验基准,随后通过命令行参数将用户指定的target和宏变量强行注入,实现无视宿主机物理架构的"强制交叉重打包"。

3. 开箱即用的修复版获取

如果你也遇到了上述报错,或者需要处理复杂的跨架构RPM包重构,为了避免浪费时间去踩这些上古bash脚本的坑,可以直接使用我修复并增强后的版本。
增强版主要特性:

修复了空变量导致解压失败的致命Bug

原生引入--force-arch=<arch>参数,完美绕过rpmbuild的严苛校验,实现 amd64等非标架构或异构架构的直接重压包

获取方式(GitHub):

👉 rpmrebuild - GitHub

(由于是 Fork 仓库,GitHub 默认搜索不到,请直接点击链接或使用 fork:true 语法搜索)

相关推荐
夜月yeyue3 小时前
TCP/IP 协议解析
linux·服务器·c语言·网络·网络协议·tcp/ip
__Witheart__3 小时前
Android 驱动编译为模块或者built-in内核
android·linux·数据库
好名字更能让你们记住我3 小时前
通过docker在本地部署博客系统服务
linux·运维·服务器·ubuntu·docker·容器
hai3152475433 小时前
FiveOS V3.0 交付(微服务器操作系统版 · 物理合规修正
linux·人工智能·spring boot·后端·神经网络·机器学习
文青小兵3 小时前
Linux云计算——docker 告警(六)
linux·运维·docker·云计算·prometheus
xiep14383335103 小时前
CentOS 7.9 安装 TigerVNC
linux·运维·centos
光电笑映3 小时前
进程间通信(上):深入理解管道与进程池
linux·运维·服务器
2301_809049423 小时前
phase3_note_vivado_2020_ip_packager_revision
linux·fpga开发
老杨聊技术3 小时前
CentOS 7 安装 Docker 完整版教程
linux·docker·centos
l齐天3 小时前
Ubuntu 22.04 环境下 PBC 与 Golang 的安装、配置与测试
linux·ubuntu·golang