某IOT蠕虫病毒分析之UPX脱壳实战
某IOT蠕虫病毒分析之UPX脱壳实战
关于UPX的脱壳文章比较多,基本上都是Windows平台下的脱壳文章,处理起来比较简单。FormSec将在本文中分析一款mips下病毒程序使用的upx壳保护手段。
在应急事件处理过程中,提取到病毒样本为virus.dat,样本使用了UPX(3.91)壳,对程序进行了压缩处理。
作者对加壳后的样本进行了修改,导致使用upx –d命令解压失败;虽然解压失败了,但是不影响程序正常功能的执行。

分别使用两个版本的upx程序尝试脱壳,可以看出最新版的提示信息比较具体;
提示: upx: virus.dat: CantUnpackException: p_info corrupted
由于最新版的脱壳程序直接报告出是p_info字段的问题,在网上找了一圈没有关于针对该问题的解决方案,这里直接找upx(3.94)最新版的源码分析一下,主要简单分析作者使用的干扰脱壳程序的技术手段,以及如何修复;
- 定位输出错误信息的位置,直接查找错误信息字符串即可;查找到两处分别对应32位和64位版本的文件头;

- 简单分析一下p_lx_elf.cpp -> PackLinuxElf32::unpack 函数的功能;

- p_info结构体的定义如下,12bytes;

- 定位文件中p_info的位置,可以看出作者将该结构体用0填充后,解压程序检测到异常,导致解压缩失败;

- 修复upx壳,下图标记的位置保存着有效的p_info->p_filesize 字段(p_filesize 和
p_blocksize相同)

- 修复p_info信息:

- 脱壳成功;

上面主要记录了整个处理定位问题,一直到如何修复的方法与思路,希望能够帮助到对二进制病毒分析比较感兴趣的同学;
后续有机会的话,会出一篇关于该病毒的详细技术分析报告;欢迎各位斧正;)
声明:该文观点仅代表作者本人,转载请注明来自看雪专栏