X64dbg手动脱壳

什么是壳

专门负责对程序体积进行压缩,或者是保护一个程序不被非法修改、逆向分析的一类软件。

壳通过附加自身代码在保护对象(原始程序)上,在操作系统对原始程序代码进行执行只求按获得程序控制权,进而对原始程序进行解压或解密等还原操作,完成操作后控制权将还给原始程序,程序的元时代吗才开始被执行。

壳主要有压缩壳和加密壳两种:加壳软件在运行时运行外壳代码,对程序进行解压操作或解密操作,所以对于比较简单的壳,一般思路就是在运行完外壳操作后,找到源程序入口(即OEP–original entry pointer)将源程序通过工具dump出来为一个exe文件,然后再进行一些修复操作,比如说重建输入表。

手动脱壳工具X64dbg

x64dbg是一款功能强大的Windows平台下的64位和32位程序调试器。

x64dbg官网地址:https://x64dbg.com/#start

我们需要了解一些基本指令

  • F2:设置断点。在调试过程中,用户可以在代码的特定位置设置断点,当程序执行到这些位置时会暂停,以便用户进行详细的检查和分析。
  • F7:单步步入。执行当前指令,并进入被调用的函数内部。这有助于用户深入了解函数的执行流程。
  • F8:单步步过。执行当前指令,但不进入被调用的函数内部。如果用户只想关注当前函数或代码块的执行流程,这个选项会非常有用。
  • F9:运行程序。如果当前没有设置断点或程序已经暂停在某个断点处,按F9将继续执行程序直到遇到下一个断点或程序结束。
  • Ctrl+F9:执行到函数返回处。这个快捷键允许用户跳过当前函数的剩余部分,直接返回到函数调用的下一条指令处。
  • Alt+F9:执行到用户代码。这个快捷键用于快速跳出系统函数或库函数,以便用户能够专注于自己的代码部分。
  • Ctrl+G:快速定位到指定地址。用户可以输入一个十六进制地址,然后按Ctrl+G跳转到该地址处进行调试。

例题

把exe文件拖入x64dbg

pushad意味着upx壳解压缩代码的入口。

PUSHAD是一个x86汇编指令,用于将当前程序的所有通用寄存器(EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI)的值依次入栈。PUSHAD指令压入32位寄存器,其堆栈指针SP将加32。

但是这个程序是一个64位的。64位程序中没有puahad,而是用几个push汇编代码替代

按F9到达该断点,最好可以都按几次,可能有其他断点

F8单步执行,观察右上角RSP是否有变化

ESP定律指的是,当观察到ESP(或RSP)寄存器的值在调试过程中变红,意味着程序执行流程中有重要的栈操作发生。

为了定位程序后续执行的关键点,可以定位ESP(或RSP)当前指向的内存地址,并在此地址上设置一个硬件断点。打一个硬件断点后,按下F9运行到停下的位置,这个位置后面一般有一处跳转,完成跳转之后的地方就是OEP(程序真正的入口点)

操作过程

点击RSP 从内存窗口中转到

右击栈顶,选中断点,选择硬件访问断点,选择4字节。

打好断点后 F9运行

这里发现下面有一个比较大幅度的jmp跳转,并且已经显示文件特征。

并且通常E9表示入口,判断jmp指令会跳转到OEP。

选中jmp指令 按下F4 运行到此处 F4键的功能是“运行到光标处”

之后按下F8步过成功跳转到OEP

脱壳结束

这就正式进入了原程序,可以进行dump了

dump

启动插件

先进行dump

但是dump后的文件是无法执行的,所以我们要修复文件

文件修复

先点击 IAT Autosearch

再点击 Get Imports ,在 Imports 列表中右键delete删掉带有红叉的。

最后再fix dump

得到最终的exe文件成功去壳 可以在ida里运行

得到最终的flag

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值