BUUCTF 新年快乐 脱壳工具与手动脱壳

BUUCTF 新年快乐 脱壳工具与手动脱壳

ida打开,发现函数很少:

 

 

 

推测可能被加了壳.

用查壳软件发现是upx:

 

 

 

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

 

 

 

ida打开这个文件即可

 

 

 

已经完成脱壳了.

 

 

 

发现flag.

flag{HappyNewYear!}

这是另一个upx脱壳工具:

 

 

 

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

 

 

 

 

 

 

两个工具都是一样的结果.

 

下面介绍下手动脱壳的方法:

 

 

 

x32dbg打开

个人认为脱壳主要找pushad指令和popad指令.

Pushad指令会将寄存器的值都压入栈中,popad指令将寄存器的值进行还原.

我们只需要把pushad的外壳代码运行完后找到oep(程序的原始入口点)就行了.

 

首先点击上方的断点,进入这样的界面:

 

 

 

发现pushad,双击

 

 

 

鼠标右键点击转到的地址(最顶上的红框)

选择设置新的运行点.

 

 

 

 

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

 

 

 

 

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

 

 

 

然后在上面点击运行

 

 

 

 

结果如下:

 

 

 

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

 

 

 

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

oep00401280

 

 

 

 

接下来进行dump

 

 

 

点击打开

 

 

 

 

 

点击右下角Dump框中的Dump

 

 

 

 

点击保存.

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

 

 

 

 

 

 

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

 

 

 

之后点击右侧的Fix Dump

 

 

 

选择后缀为dump的文件

 

 

 

这样去壳就成功了

回到文件夹会发现这样一个文件

 

 

 

ida打开

 

 

 

和上文用工具去壳结果一样.

 

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

posted @ 2022-12-14 15:06  M4r1s4  阅读(562)  评论(0编辑  收藏  举报