BUUCTF 新年快乐 脱壳工具与手动脱壳
BUUCTF 新年快乐 脱壳工具与手动脱壳
用ida打开,发现函数很少:

推测可能被加了壳.
用查壳软件发现是upx壳:

这里可以使用upx脱壳工具进行脱壳:

用ida打开这个文件即可

已经完成脱壳了.

发现flag.
flag{HappyNewYear!}
这是另一个upx脱壳工具:

将文件直接拖进去,然后再用ida打开即可.


两个工具都是一样的结果.
下面介绍下手动脱壳的方法:

用x32dbg打开
个人认为脱壳主要找pushad指令和popad指令.
Pushad指令会将寄存器的值都压入栈中,而popad指令将寄存器的值进行还原.
我们只需要把pushad的外壳代码运行完后找到oep(程序的原始入口点)就行了.
首先点击上方的断点,进入这样的界面:

发现pushad,双击

鼠标右键点击转到的地址(最顶上的红框)
选择设置新的运行点.

之后在右边找到esp的位置,鼠标右击,选择在内存窗口中转到.

在下面可以看见我们转到的内存地址,右击选择添加断点

然后在上面点击运行

结果如下:

可以看见上面出现了popad指令,说明外壳程序已经运行完毕.

Popad指令下面的第一个jmp指令跳转的位置就是程序的oep.
即oep为00401280

接下来进行dump

点击打开

点击右下角Dump框中的Dump

点击保存.
然后点击左上角的misc检查配置


完成后首先点击IAT info框中的IAT Autosearch,然后点击Get Imports

之后点击右侧的Fix Dump

选择后缀为dump的文件

这样去壳就成功了
回到文件夹会发现这样一个文件

用ida打开

和上文用工具去壳结果一样.
总结:这道题考了upx壳加密,如果直接用工具去壳的话确实十分简单,但是作为CTFer,我认为不要太依赖工具,于是去学习了upx手动去壳的方法,并分享出来.

浙公网安备 33010602011771号