upx解压出现 p_info corrupted错误解决办法

本文讲述了如何处理遇到的upx3.93加壳的work32挖矿木马,通过winhex修复p_info并成功脱壳的详细过程,最终在IDA中完成正常分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天捕获到一个挖矿木马work32,在分析过程中,查壳发现加壳为 upx3.93

使用upx脱壳工具脱壳过程中,会提示以下错误

p_info corrupted为p_info损坏,百度了一圈说是病毒制作者使用的一种防范手段,不让轻易脱壳

下面为解决这个问题的方法

使用winhex十六进制查看工具查看这个加壳的样本,发现upx文件头的p_info位置的12个字节部分被0填充,这也是我们无法解压的原因

现在要恢复p_info的值,而p_info和p_filesize包含相同的值,p_filesize的值在文件的末尾,如下这个位置

把这个位置的值复制,填充 p_info位置的5-12字节,如下:

保存之后再用upx工具脱壳,就可以成功脱壳,结果如下:
 

载入ida中,发现脱壳已经成功,可以正常分析

 

 

 

 

<think>好的,我现在需要帮助用户解决UPX加壳工具使用时出现的错误。根据用户提供的引用内容,问题主要集中在两个错误:“DT_TEXTREL found; re-compile with -fPIC”和“p_info corrupted”。我得先分别分析这两个错误的原因,然后给出解决方案。 首先看第一个错误:编译UPX时出现“DT_TEXTREL found; re-compile with -fPIC”。引用[1]提到这是因为ELF文件中存在DT_TEXTREL重定位段,说明代码段被修改,需要重新编译时加上-fPIC选项。所以解决方法应该是让用户检查他们的编译参数,确保生成位置无关代码。可能需要指导用户如何修改Makefile或编译命令,加入-fPIC参数。另外,可能需要确认是否所有依赖库都使用了-fPIC,尤其是静态库部分。 接下来是第二个错误:“p_info corrupted”。引用[2]指出,使用winhex查看样本时发现p_info部分被0填充,导致解压失败。这可能是因为加壳过程中文件头被破坏,或者加壳后的文件被篡改。解决方法可能需要用户手动修复文件头,或者检查加壳过程是否正确,是否有权限问题导致写入不完整。另外,建议用户使用十六进制编辑器检查并修复p_info结构,或者重新加壳并确保过程无误。 同时,引用[3]提到UPX源码分析,可能需要更深入理解加壳机制,但用户可能不需要涉及源码,除非问题复杂。不过可以作为参考,了解UPX如何处理文件头信息,帮助诊断问题。 现在需要将这些分析整理成步骤,用中文清晰表达,分点解决每个错误。同时,生成相关问题,如如何预防这些错误,或者其他常见错误的处理方法。确保按照用户给的格式,使用正确的LaTeX,但用户的问题中没有数学公式,所以可能不需要数学表达式。但需遵守系统级指令,比如行内公式用$...$,独立公式用$$...$$,不过这里可能用不上。需注意用户提供的引用标识要正确添加到回答中,例如在解决方案后加上[^1]、[^2]等。 最后检查是否有其他可能的错误或用户未提及的问题,如权限不足、文件损坏等,适当补充通用建议。确保回答结构清晰,步骤明确,用户能一步步操作解决问题。</think>### UPX加壳工具常见错误解决方案 #### 一、错误类型1:编译时出现`DT_TEXTREL found; re-compile with -fPIC` **问题原因** ELF文件包含`DT_TEXTREL`重定位段,说明代码段被修改,不符合UPX加壳要求。通常是因为编译时未生成位置无关代码(PIC)。 **解决方案** 1. **重新编译目标程序** 在编译命令中添加`-fPIC`参数(生成位置无关代码): ```bash gcc -fPIC -o your_program your_source.c ``` 2. **静态库需同步调整** 若依赖静态库,需重新编译静态库并添加`-fPIC`参数。 3. **验证编译结果** 使用`readelf -d your_program`检查输出中是否包含`TEXTREL`字段。若无此字段,则修复成功。 --- #### 二、错误类型2:解压时出现`p_info corrupted` **问题原因** UPX文件头的`p_info`结构(12字节)被破坏,可能是加壳过程中文件头被覆盖或篡改[^2]。 **解决方案** 1. **手动修复文件头** 使用十六进制编辑器(如WinHex)定位到UPX文件头,检查`p_info`字段是否被填充为`0`。若已损坏,需根据原始文件信息重建该字段。 *UPX文件头格式示例*: ``` UPX! [版本] [文件属性] [p_info] ... ``` 2. **重新加壳并检查权限** 确保加壳时具有文件写入权限,避免因权限不足导致数据丢失: ```bash upx --best -o output_file input_file ``` 3. **验证文件完整性** 使用`upx -t output_file`测试加壳后文件是否可正常解压。 --- #### 三、其他通用建议 1. **使用UPX官方版本** 避免第三方修改版导致兼容性问题,从[UPX官网](https://upx.github.io/)下载最新版本。 2. **检查文件格式支持** UPX仅支持特定格式(如ELF、PE),确认目标文件类型是否符合要求[^3]。 3. **调试模式运行** 添加`-v`参数查看详细日志: ```bash upx -v input_file ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值