对upx壳的一次较深入探究

本文详细探讨了对UPX壳的深入研究,从直接脱壳方法到手动处理壳的步骤,包括了解proc文件和syscall。通过动调分析,揭示了main函数的执行流程,尤其是loader和execve系统调用在脱壳过程中的关键作用。此外,文章还讨论了如何使用die查壳,以及UPX标准加载器的工作原理。

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

对upx壳的一次较深入探究

最开始的起因是一个攻防世界的题目,这个题目使用的upx加壳,题目为easyre-150。

攻防世界题号会变化也就不给链接了,进阶区前三页内,还是比较好找。

如果直接upx脱壳的话,题目基本没有啥难度,但是在题目做完以后我去翻看这个原本加壳后的文件发现很有趣。

于是便去简单的了解了一下。

easy-re-154

直接脱壳的方法

首先直接看到文件die查壳查到是upx_easyre150的壳,

然后直接脱壳,看到文件:

在动调的时候我们可以轻松改变,走向got key的位置,

然后会进入函数lol, 

大概十个这样子,注意判定跳转前的两句:

.text:080486B0                 mov     [ebp+var_C], 0
.text:080486B7                 cmp     [ebp+var_C], 1
.text:080486BB                 jnz     short loc_80486D3

这个其实永远不会进入到另一侧的语句运行,我们动调的时候改动下, 就可以看到flag,

当然,很坑的格式:要套上RCTF{},

就是一个很简单的题目,

下面我们去考虑下手动脱壳的方法?

知识点:

在此之前,我们先写一下这一部分出现的知识点:

proc文件

linux 下的proc文件体系实际上并不是文件,而是我们在运行中的进程,每个进程都会产生一个由其运行的pid为文件名的文件, 其中,/proc/[pid]/目录下的文件:

  • cwd :

    这是一个符号链接,指向这个进程的运行目录。

  • exe :

    这也是个软链接, 指向这个进程对应的可执行文件。

  • fd :

    这是一个目录,里面包含进程打开的文件的文件描述符,并且这些描述符都是软链接,指向实际文件。

  • maps:

    这个文件包含当前进程在虚拟内存中的空间分布已经对应的地址,访问权限。

syscall

主要写一下里面出现的系统调用作用和调用号

32位 linux 程序系统调用 int 80

  • sys_open: eax=5, 打开文件, 并返回一个该文件的文件描述符。
  • sys_lseek: eax=19, 返回文件读写指针距离文件开头的字节大小。
  • sys_unlink: eax=10, 删除文件链接的意思, 大体就是删除我们open的文件吧,
  • sys_ftruncate:eax=93, 将文件截断,
  • sys_execve:eax=11,加载和启动新的程序
  • sys_munmap: eax=91, 映射内存

动调,手动处理壳:

那么就开始处理:

进入ida看到其实函数极少, 动调以后大致可以了解他们的内容, 这里简单进行了一下命名:

start函数:


这里就是函数入口处了,看起来没啥好看的,动调以后也会发现其实就没啥,进入main函数:

main:

main函数比较大,主要分成几个部分:

open ‘/proc/[pid]/exe’

首先是获取pid, 然后组成一个"/proc/[pid]/exe"的一个字符串,打开这个文件,

我们上述提到过,这个地址对应是一个链接,指向这个程序自身的绝对地址,

简单点说就是打开自己这个程序本身。

同样我们也可以在 /proc/[pid]/fd/中看到

open “AAAAAAAACDMVJO1A4NH”

后面的位置主要在两个循环中,处理了一个字符串:

将其处理为:“AAAAAAAACDMVJO1A4NH”

然后打开这个名字的文件,我们可以在/proc/[pid]/fd/中看到:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值