一道题展开的UPX脱壳问题

文章介绍了如何处理UPX壳的加壳程序,包括直接使用upx-d命令脱壳、修改被篡改的区段名以恢复UPX特征码,以及利用ESP定律找到OEP进行手动或自动脱壳。在某些情况下,需要使用十六进制编辑器如010Editor进行辅助操作。
摘要由CSDN通过智能技术生成

目录

一,直接脱壳

二,修改区段名

三,利用ESP定律,找到oep,dump文件


之前在打hznuctf校赛时遇到了一个upx壳的题,学到了不少东西,特地总结一下

题目链接(http://ite.hznu.edu.cn/challenges#esay%20signin-84

UPX是一个著名的压缩壳,主要功能是压缩PE文件(比如exe,dll等文件),有时候也可能被病毒用于免杀.壳upx是一种保护程序,遇到upx加壳问题如何解决

一,直接脱壳

直接用upx -d 文件名.exe脱壳,一般的没被改过的壳时可以脱掉的,例如这样:

二,修改区段名

有的upx壳被改了区段名,无法使用此方法脱壳,关于修改upx壳区段名的问题具体可以参考一位大佬的文章(https://blog.csdn.net/whatday/article/details/99709317)这里引用一小段

用任何一个十六进制编辑器(UltraEdit,还有VS自带的十六进制编辑器等等都可以,但是不如WinHex)打开加壳后的程序。可以看到三个区段名。“UPX0”和“UPX1”是加UPX壳后的两个区段名。其中UPX1区段包含了需要解压的数据块。“.rsrc”是程序资源信息区段名,这个区段含有原资源段的完整头部以及图标、Manifest、版本等未被压缩的资源,当然还有UPX自身需要的导入信息等(如果程序自身不含资源段,加壳后就是“UPX2”)。“UPX0”和“UPX1”可以被随意改成任何字符串,虽然这样改用处不大,但是也能起到伪装的作用。我们可以把它全部抹去(写0),或者把它改成无效数据,这样就无法使用命令“upx -d”快速脱壳了

 

 修改过区段名的壳无法用upx -d 指令脱壳,像这样子

但是可以通过修改区段名,改回upx的特征码。将文件放入到010Editor中,来找被修改的区段名,其实它一般可以在查壳的时候被工具识别出来

所以直接在010Editor中找ZVM 再改回UPX就可以了

 现在就可以脱壳了

三,利用ESP定律,找到oep,dump文件

这里引用大佬的文章介绍

ESP定律的原理在于利用程序中堆栈平衡来快速找到OEP,由于在程序自解密或者自解压过程中, 不少壳会先将当前寄存器状态压栈, 如使用pushad, 在解压结束后, 会将之前的寄存器值出栈, 如使用popad. 因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发. 然后在程序当前位置, 只需要少许单步操作, 就很容易到达正确的OEP位置.

程序运行先从壳代码运行,壳代码执行完之后会跳转到真正的OEP,也就是是说第一步,首先要找到真正的OEP,大部分情况下,壳代码会在一个单独的区段里面,壳代码执行完一定会跳转到原来的.text段去执行,跳转之后的地址就是这个程序原始的OEP,也就是程序真正的入口,dump文件就是把得到的新的源文件给它保存下来,可以采用从头到最后一个区段的手动复制下来,也可以用工具

因为程序的流程是pushad(所有寄存器压栈),解压,popad(出栈),jmp oep

所以不论是改没改区段名,都可以用这种方法来脱壳。这种可以手动脱壳,也可以用插件自动脱壳

脱壳步骤

1 找到OEP

2 dump(导出)内存文件

3 修复

程序流程:

    pushad 
​
•   //壳代码
​
•   popad
​
•   jmp xxxx

这里介绍使用插件dump脱壳:

先把程序用x32dbg打开,程序停在了这里:

 pushad直接出现,F8进入下一步,这时esp的值改变,在寄存器窗口esp处右键点击在内存窗口中转到-内存一

 此时在内存窗口选中前面几个字节-右键-断点-硬件,访问-4字节,再F9运行,即可跳转到popad处停下

  可以看到下面有jmp指令,程序跳转到另一个地址处,在C0817C处下断点,F9运行程序,再F7单步进入,即可找到oep,程序真正的入口

 找到oep后要开始dump文件

打开插件,依次点击

 保存好dump文件后,需要进行修复,如下步骤,其中uppppx.exe是保存的dump文件

最后修复好的文件就是

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UPX脱壳工具是一款用于密并还原被UPX壳包装的程序的工具。UPX是一种非常流行的免费开源压缩工具,许多黑客使用它来保护自己的恶意代码。为了决这个问题,开发人员开发了UPX脱壳工具,它可以反向工程UPX壳,使原始代码可读性高,并且可以检测和修复代码中的漏洞和攻击。UPX脱壳工具也可以帮助代码分析人员进行代码审计,以及帮助开发人员提高代码的质量。 UPX脱壳工具的优点是快速、高效、易用。它可以快速识别和UPX壳,并还原原始代码。此外,UPX脱壳工具非常容易使用,不需要任何专业技能或知识。使用UPX脱壳工具,用户可以通过几个简单的步骤来密和还原被加密的程序。 总之,UPX脱壳工具是一款非常有用的工具,它可以为代码分析人员、安全研究人员和开发人员提供帮助,确保他们能够在维护程序安全及质量方面取得成功。 ### 回答2: UPX是一种用于压缩和加密可执行文件的开源工具。UPX压缩后的文件体积明显减小,加密也能增强文件的保密性,常被恶意程序使用以防止反汇编和分析。 UPX脱壳工具是专门为压和UPX压缩的文件而设计的工具。目前市面上有很多UPX脱壳工具,在密时会根据具体的UPX版本和加密方式进行处理,从而压出原始的可执行文件。这些工具具有操作简单、速度快、功效稳定的特点,大大提高了对加密文件的分析和研究效率。 但是,UPX脱壳工具也面临着一些问题。首先,一些UPX脱壳工具只适用于特定版本的UPX程序,如果UPX版本发生变化,这些工具可能无法正常工作。其次,恶意程序有时会使用更高级的加密方式,这些加密方式超出了UPX脱壳工具的处理能力。此外,UPX脱壳工具也可能会被反病毒软件所检测和拦截,需要谨慎使用。 总的来说,UPX脱壳工具对于分析和研究可执行文件具有重要意义,但在实际使用时需要考虑到所处理的文件类型、加密方式、以及UPX工具版本等因素,以免出现错误。 ### 回答3: UPX脱壳工具是一种用于反编译、反混淆和脱壳UPX压缩的软件的工具。UPX是一种广泛使用的可执行文件压缩器,用于减小可执行文件大小和保护代码,但这可能会使反汇编和动态分析变得困难。因此,UPX脱壳工具是研究人员、安全专业人员和黑客们常用的工具,因为他们可以使用该工具更容易地分离出压缩的代码并进行更深入的研究。 UPX脱壳工具的使用方法相对简单,通常通过指定代码中的UPX头来识别可执行文件的使用UPX压缩的情况,然后压缩头会被删除,使反编译变得更容易。但是需要注意的是,使用该工具用于非法活动会被视为侵犯知识产权,这是不道德和非法的。 总之,UPX脱壳工具是一个有用的反编译、反混淆和脱壳UPX压缩的软件的工具,它可以帮助研究人员快速识别出压缩的代码和进行更深入的研究,但必须遵守法律和道德规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值