menu 牢记自己是菜
一.手动进行UPX脱壳
1064 浏览 | 2020-03-10 | 阅读时间: 约 3 分钟 | 分类: 二进制脱壳,CTF比赛实战学习 | 标签:
请注意,本文编写于 885 天前,最后修改于 879 天前,其中某些信息可能已经过时。

一.UPX壳的简介

首先我们有知道什么是壳,壳是在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。而一般的我们将壳分为两类:一类是压缩壳,另一类是加密壳。UPX壳就是一种简单的压缩壳,一般可借助工具完成UXP脱壳。
压缩壳:压缩壳早在 DOS 时代就已经出现了,但是当时因为计算能力有限,解压开销过大,并没有得到广泛的运用。使用压缩壳可以帮助缩减 PE 文件的大小,隐藏了 PE 文件内部代码和资源,便于网络传输和保存。通常压缩壳有两类用途,一种只是单纯用于压缩普通 PE 文件的压缩壳,而另一种则会对源文件进行较大变形,严重破坏 PE 文件头,经常用于压缩恶意程序。常见的压缩壳有:Upx、ASpack、PECompat。参考CTF-wiki


二.UPX脱壳手动实现实验

首先给自己准备一点实验用的程序,攻防世界入门题,simple-unpack正好就是我们需要的UPX壳,但是它是一个64位程序,OD只支持32位的程序,对于64位的程序我们可能需要用到DebugX64了。虽然教程都是使用OD进行脱壳的,但是原理应该大同小异。正所谓师傅领进门,修为看个人。查壳,载入DebugX64。

  1. 单步追踪法
    最基本的退壳方法,主要是遵循一个原则,向下跳转允许进行,阻止向上的跳转,一步一步的单步执行(F8)。最终找到程序的真正入口。通过OD的脱壳插件改变整个程序入口点完成UPX程序的脱壳。

  1. ESP定律法
    利用ESP发生变换的规律,对数据设置断点,后运行程序。最终程序会停在JMP指令附近,然后进行单步追踪,找到程序入口。

  1. 二次内存镜像法
    可以通过菜单栏"查看—内存"或直接按m进入内存界面。对区段".rsrc"下断点,下面的区段不用管,之下第一个rsrc,后面的是系统的区段。下完之后运行走一步,然后回来,回来之后在uxp0处再下一次
  2. 直捣黄龙(适用于绝大部分的UPX壳和部分Aspack壳)
    由于UPX等压缩壳,通常都是以PUSH开始的,在通过压缩壳后会有一个popad的出栈操作。于是我们可以搜索关键POP代码,完成无关代码的跳越。

三.结尾

虽然UPX的壳的脱壳只能叫做解压,都不能叫做解密。并且很多的UXP的壳都可以使用各式各样的软件进行自动脱壳。但是对UPX壳的学习还是有必要的,一是可以熟悉一下OD,二是可以联系一下自己对汇编代码的理解。补充一点,本身这篇博文应该在昨天就可以完成,但是遇到了一些问题。

在我第一次使用插件脱壳的时候,OD发生了报错,我翻遍了论坛,说什么问题的都有,最终我在我的VM上又给自己装了一个XP的系统,然后上面的所有操作都在32位的XP虚拟机中完成。还有就是昨天的比赛我们队里的大佬的wp出来了,可以开始研究研究了。打开一看,咦~生涩且枯燥。之后NULL战队的题解也出来了,咦~更加生涩且枯燥。哎~研究透这些题可能还是需要一些时间吧,噶油!!

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!

Emoji

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 47

Warning: file_get_contents(): Failed to enable crypto in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 47

Warning: file_get_contents(https://ljzjsc.com/usr/themes/Cuckoo-master/assets/json/owo.json): failed to open stream: operation failed in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 47

Warning: array_keys() expects parameter 1 to be array, null given in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 49

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 88

Warning: file_get_contents(): Failed to enable crypto in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 88

Warning: file_get_contents(https://ljzjsc.com/usr/themes/Cuckoo-master/assets/json/owo.json): failed to open stream: operation failed in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 88

Warning: array_keys() expects parameter 1 to be array, null given in /www/wwwroot/116.62.100.243/usr/themes/Cuckoo-master/includes/owo.php on line 90