CTF逆向-Upx脱壳攻防世界simple unpack

CTF逆向-Upx脱壳攻防世界simple unpack文章目录前言UPX技术原理应用范围软件使用CTF实战程序查壳UPX脱壳总结前言加壳软件分两类:压缩壳:压缩的目的是减少程序体积,如ASPack、UPX、PECompact等;加密壳:加密是为了防止程序被反编译(反汇编)、跟踪和调试,如ASProtect、Armadillo、EXECryptor、Themida、VMProtect。壳的存在会让我们找不到程序的真实入口点,从而不能正确的分析反汇编程序,也就对程序起到了一定的保护作用。加密壳的基本思路:将原本程序的PE相关代码复制

大家好,又见面了,我是你们的朋友全栈君。

前言

加壳软件分两类:

  1. 压缩壳:压缩的目的是减少程序体积,如 ASPack、UPX、PECompact 等;
  2. 加密壳:加密是为了防止程序被反编译(反汇编)、跟踪和调试,如 ASProtect、Armadillo、 EXECryptor、Themida、VMProtect。

壳的存在会让我们找不到程序的真实入口点,从而不能正确的分析反汇编程序,也就对程序起到了一定的保护作用。

加密壳的基本思路:

  1. 将原本程序的 PE 相关代码复制到补丁(壳)中;
  2. 加密程序;
  3. 修改程序入口点,使得程序启动后会先运行补丁程序;
  4. 补丁程序会根据先前复制的相关代码对程序进行解密和还原,使得程序能够正常运行;
  5. 还原后再返回执行原本的入口点。

本文不讨论加密壳,而是通过攻防世界一道 CTF 逆向题目 simple-unpack 来学习下基于 UPX 的压缩壳的特征和脱壳。

UPX

UPX (the Ultimate Packer for eXecutables) 是一款先进的可执行程序文件压缩器, 也是一个著名的压缩壳,主要功能是压缩 PE 文件(比如 exe、dll 等文件),有时候也可能被病毒用于免杀。

UPX 壳是一种保护程序(一般是 EXE 文件的一种外保护措施),其主要用途 :

  • 让正规文件被保护起来,不容易被修改和激活成功教程;
  • 使文件压缩变小;
  • 保护杀毒软件安装程序,使之不受病毒侵害;
  • 木马,病毒的保护外壳,使之难以为攻破。

技术原理

UPX 对于可执行程序资源压缩,是保护文件的常用手段。俗称加壳,加壳过的程序可以直接运行,但是不能查看源代码。要经过脱壳才可以查看源代码。

UPX 加壳其实是利用特殊的算法,对 EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉 CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。

应用范围

压缩文件

用 UPX 压缩过的可执行文件体积缩小 50%-70% ,这样减少了磁盘占用空间、网络上传下载的时间和其它分布以及存储费用。 通过 UPX 压缩过的程序和程序库完全没有功能损失和压缩之前一样可正常地运行,支持的大多数格式程序,没有运行时间或内存的不利后果。

加壳脱壳

程序为了反跟踪、被人跟踪调试、防止算法程序被别人静态分析就需要加壳。使用加壳软件加密代码和数据,就可以保护你程序数据的完整性,防止被程序修改和被窥视内幕。

软件使用

UPX 软件的 Github下载地址,拿来即可食用:
在这里插入图片描述
在 cmder 中打开,使用 -h 参数可以查看使用方法:
在这里插入图片描述核心的用法如下:

upx sample.exe upx -d sample.exe
压缩可执行文件 解压缩可执行文件

CTF实战

了解完关于 UPX 加壳的基础知识后,回归正题,返回到 simple-unpack 题目中来(附件下载地址),题目如下:
在这里插入图片描述

程序查壳

既然题目都已经提示是 “一个被加壳的二进制文件” 了,那么下载后当然是查看下加壳情况了,可以看到是 64 位的文件,做了 UPX 加壳保护:

在这里插入图片描述

直接尝试拖入 IDA Pro 64bit 查看程序结构,会看到压缩壳处理后的程序的函数极少:
在这里插入图片描述然而发现在 16 进制查看区域点击“Alt+T”快捷键进行 flag 关键词搜索,即可看到 flag(惊不惊喜,意不意外…):
在这里插入图片描述这大概就是压缩壳的弊端了,没有对源程序进行加密,压缩后还是可泄露源程序的数据。

UPX脱壳

虽然上面已经拿到了 flag 值,但是本文重点还是要学习下 UPX 的脱壳、以及对比 UPX 加壳、脱壳后的文件结构,所以下面继续对目标文件进行脱壳。

不废话,直接上 upx 软件进行脱壳(解压缩):
在这里插入图片描述
随后将脱壳后的文件直接拖入 IDA Pro 进行反汇编,可以看到源程序的代码结构了,并在 main 函数中成功找到 flag,如下图所示:
在这里插入图片描述在这里插入图片描述最终 flag 值:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny},over!

总结

本文学习记录了 UPX 软件加壳、脱壳(压缩与解压缩)的方法,并直观比较了其加壳后、脱壳后的文件结构,总的来说压缩壳的作用有限,UPX 已经被应用很久了,脱壳技术成熟,使用于防止反编译、病毒免杀的作用十分有限,杀毒引擎基本能直接识别出做了 UPX 加壳的病毒程序。所以要想让加壳达到防止反编译、反调试跟踪的目的,还是得采用加密壳而非压缩壳。对于加密壳的激活成功教程分析练习,等待下一步的学习!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161703.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 经典永不过时的句子_网红的成功案例分析

    经典永不过时的句子_网红的成功案例分析本周给大家分享的数据分析案例是泰坦尼克号幸存者预测的项目,没记错的话,这应该是很多朋友写在简历上的项目经历。如果你目前正在找工作,自身缺少项目经历并且想要充实项目经历的话,可以考虑一下这个项目!…

    2022年10月22日
    0
  • if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’)的作用

    if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’)的作用

    2022年2月9日
    59
  • 检测数据库连接泄漏的最佳方法

    检测数据库连接泄漏的最佳方法介绍数据库连接不是免费的,这就是首先使用连接池解决方案的原因。但是,单独的连接池并不能解决与管理数据库连接相关的所有问题。应用程序开发人员必须确保Connection在不再需要时关闭每一个。在幕后,连接池提供了一个逻辑事务,当它被关闭时,它会返回到池中,以便其他并发事务可以进一步重用它。当连接被获取而从未被关闭时,就会发生连接泄漏。何时应检测到连接泄漏?每个关系数据库都提供了一种检查底层连接状态的方法,因此可以轻松打开一个新的SQL终端并检查是否有任何悬空连接。但是,这种简约的方法是

    2022年9月19日
    0
  • 【漏洞挖掘】QQ钓鱼网站实战渗透[通俗易懂]

    【漏洞挖掘】QQ钓鱼网站实战渗透[通俗易懂]渗透实战,通过报错注入拿到后台账号密码。

    2022年8月24日
    5
  • PHPstrom激活码[最新免费获取]

    (PHPstrom激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsa…

    2022年3月27日
    82
  • 蓝桥杯真题总结(蓝桥杯考什么)

    Python获取每一位的数字,并返回到列表:方法一:whilevalue:result.append(value%10)value=value//10#逆序,按正常的顺序返回result.reverse()方法二:list(map(int,str(value)))方法三:#divmod()是内置函数,返回整商和余数组成的元组result=[]whilevalue:value,r=divmod(value,1

    2022年4月16日
    141

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号