虽然upx已经出现了很多工具,但是出题人其实只需要根据工具或者一写地方,小小改一下就行了,所以我们有必要进行upx手动脱壳
这里我先简述一下脱壳的大概思路
我们直接反编译,会发现里面很多都看不见
但是为什么我们能运行呢? 期间肯定运行的时候,程序自己进行了解密的过程
我们的目的就是要断在解密后的那一刻,然后把程序dump下
然后就是细节(我的理解根据esp定理):
你既然要解密,那么你要压入栈,然后进行解密,你压入栈,又是大工程,那么就有很多的pop,push指令(32位好像popad)
你push后的解密我不管,那你是不是要jmp回来?
你jmp回来程序是不是就正常了?
OK,大致思路如此
这里我们用BUUCTF的新年快乐来举例
____________________________________
可以看见是32位的信息
小蜘蛛x32打开(吾爱破解里面有)
这是我的设置,大家如果有和我不一样的,可以看一下是不是这的设置
进来之后,就看见了push
按一下f8
可以看见esp被修改了
(esp栈顶ebp栈低)
在这里右键,在内存窗口转到
可以看见
这里
其实就是存数据了
同时也在这里断点选择4字节(因为esp是四字节)
然后f9
然后就可以看见,有大跳(jump到很远)(这个方法比较粗糙哈,具体还是要多联合上下文,我比较菜)
双击进入
点击插件
第一步
他会直接创建一个dump文件
第二步
第三步
第四步选择之前的dump文件
就会出现一个succes
最后这个文件
就可以发现已经没壳了