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手动去壳的方法,并分享出来.