-------壳的概述:
壳主要有压缩壳和加密壳两种:加壳软件在运行时运行外壳代码,对程序进行解压操作或解密操作,所以对于比较简单的壳,一般思路就是在运行完外壳操作后,找到源程序入口(即OEP–original entry pointer)将源程序通过工具dump出来为一个exe文件,然后再进行一些修复操作,比如说重建输入表。
BUUCTF新年快乐:
1.下载附件将exe文件拖入查壳软件进行分析,发现加了upx壳:
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
在不脱壳的情况下拖入ida进行分析的结果如图:
函数明显有点少
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
3.开始脱壳:
esp定律脱壳(个人理解):
在外壳代码中有一个pushad的指令,该指令会将所有的寄存器的值都压入栈中也就是说在pushad指令之后esp的值就是指向外壳的代码段了,等之后运行完外壳程序,我们只要找到OEP就可以了
开始操作
将程序拖入x32dbg进行分析(查壳的时候可以看到程序为32位):
由于一开始x32dbg断在的位置不是pushad所以我从断点处找到pushad处重新在此处开始运行程序(pushad指令可以在x32dbg打开exe文件之后在菜单栏中的断点那一栏找到,因为是一次性断点所以可能运行过了那个断点之后就找不到了,但是还是会停在那,不过可能会被忽略)
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
单步运行程序,在pushad之后esp发生变化之后设置硬件断点
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
点击运行,之后会自动停下来, 往上可以看到一个popad的指令,该指令将寄存器的值进行还原。找到下面一个jmp指令所要跳转的位置,就是程序的OEP
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
dump操作
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
对文件进行修复,理论可以看文末小甲鱼的视频。
操作如下:
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
BUUCTF前几题感想:
有时候将程序拖进ida之后会发现有好多函数,为了更快的找到要开始分析的程序片段,个人觉得从shift+F12查看字符串比较快,关键词一般是flag,或者乱码(大多数情况下是中文)然后一步一步分析需要哪些条件
推荐阅读: 使用x64dbg脱壳之开源壳upx
http://www.kanhaige.com/post-67.html
B站有关知识点讲解 小甲鱼解密系列脱壳篇https://www.bilibili.com/video/BV1us411P7yo?from=search&seid=1267368212914346292
仅个人理解,如有错误欢迎指正
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
欢迎大家加群一起讨论学习和交流
(此群已满200人,需要添加群主邀请)
![BUUCTF 新年快乐(xdbg手动脱壳) BUUCTF 新年快乐(xdbg手动脱壳)]()
从业精于勤而荒于嬉,
行成于思而毁于随。
原文始发于微信公众号(衡阳信安):BUUCTF 新年快乐(xdbg手动脱壳)
评论