https://blog.csdn.net/xiaocaiju/article/details/6255262
https://bbs.pediy.com/thread-115901.htm
https://www.virustotal.com/gui/file/f5ff2937507df1513b63c0d6436b69d6d728ec34edb5ccf2aad6fd9f7deb13fe
加壳压缩是一种对 EXE 文件的数据压缩及加密保护,可以将 EXE 文件压缩成自我解压文件,并能隐藏解压进程。
最近在安全交流群里,一位小伙伴发了一道 CTF 逆向题目,寻求帮助,考虑到安全问题,在很自然上传 VT 与沙箱后,发现开启了一个 ntvdm.exe 进程,搜索引擎一查发现是 dos 虚拟机,很自然地以为是 16 位 dos 程 序,随手拿 IDA 反汇编一看,发现给解析成了 16 位汇编,心想现在比赛都这么折磨人了吗?16 位汇编现在也很少有人用来写病毒了吧。第二天上班路上,仔细一想,可能事情没有这么复杂,肯定是自己哪里有错,导致分析不对,于是查看该文件的十六进制内容,发现 This program cannot be run in DOS mode 有这个字符串,再仔细一看,发现出题人对该 PE 文件进行了更改…..导致相关的解析器解析成 MSDOS 程序了,哈哈哈……
最近在安全交流群里,一位小伙伴发了一道 CTF 逆向题目,寻求帮助,考虑到安全问题,在很自然上传 VT 与沙箱后,发现开启了一个 ntvdm.exe 进程,搜索引擎一查发现是 dos 虚拟机,很自然地以为是 16 位 dos 程 序,随手拿 IDA 反汇编一看,发现给解析成了 16 位汇编,心想现在比赛都这么折磨人了吗?16 位汇编现在也很少有人用来写病毒了吧。第二天上班路上,仔细一想,可能事情没有这么复杂,肯定是自己哪里有错,导致分析不对,于是查看该文件的十六进制内容,发现 This program cannot be run in DOS mode 有这个字符串,再仔细一看,发现出题人对该 PE 文件进行了更改…..导致相关的解析器解析成 MSDOS 程序了,哈哈哈……
文件名 crakeme.exe
sha256 f5ff2937507df1513b63c0d6436b69d6d728ec34edb5ccf2aad6fd9f7deb13fe
sha1 a7a1cff8a3e6e7812560a858c411da1caa25870c
md5 2f90aad27a287bc9716206a0f0f757c6
3.2 本地工具
操作系统 Win7_x64_sp1_pro
虚拟机软件 VMware15 pro
调试工具 ollydbg1.10
查壳工具 Detect It Easy 2.05、PEiD v0.94
IAT 修复 ImportREC 1.7
二进制修改工具 010 Editor 9.0.2
4 手工脱壳
4.1 修复PE文件
4.1.1 查壳
该文件在 XP 下运行会失败,所以以下步骤均为 Win7 环境,在第一次拿到样例文件时,首先第一件事就是使用相关的工具进行查壳,如下图:
发现给出的类型为 MSDOS,其余信息没有,为了严谨,接着使用 PEiD 查询下试试,发现解析失败,如下图:
4.1.2 二进制修改
ollydbg 无法载入进行调试,会报错,但仔细一想作为一道 CTF 逆向题目,不会是无法运行的,自然要使用 010 Editor 查看下实际的二进制内容,看看这个 PE 文件哪里出了问题,导致解析工具无法识别,如下图:
发现确实是一个 PE 文件,但是在 PE 标志头出现了错误,实际上应该是 50 45(PE),错误的文件是小写的”pe”,之后就能正常识别了(大小写混淆),如下图:
4.2 寻找OEP
经过修改后的 PE 文件已经可以正常识别了,同样也显示出相应的编译信息与壳的信息,NsPacK V3.7 中文名称为北斗壳,是国内人编写的压缩壳。既然是手工对其脱壳,自然第一步就是寻找 OEP(原始入口点)。
ollydbg 载入后入口点处为:pushfd,pushad,call XXXX
OEP 的特征如下:popad,popfd,jmp OEP
所以接下来就是通过特征寻找到 OEP,如下图:
直接 Ctrl + f 快捷键查找命令 popfd 来快速找到 OEP,发现在接下来几条指令后就是 OEP 的特征(当然也可以一步步的调试,直到找到 OEP 的特征为止),如下图:
下断点后,F9 运行到 0040641B,最后是会跳转到 OEP 处,如下图。
右键使用 OllyDump 插件脱壳,选择当前的 EIP 作为入口点地址。
这里脱壳时,不选择【重建输入表】,之后保存在本地,之后修复 IAT。
此时不要关闭 ollydbg,本地文件如下,dump.exe 为脱壳后的文件:
未修复 IAT 时,刚刚脱壳后的文件在系统中是无法运行的,如图:
4.3 IAT修复
IAT 修复选择 ImportREC 这款工具,如下图:
以管理员权限打开 ImportREC,如下图:
在活跃的进程里选择需要刚刚对其脱壳的进程,这里是 crakeme.exe,如下图:
修改 OEP 为刚刚寻找到的真正的 OEP 地址,这里为 00001336(去掉了基址的偏移),接着点击 AutoSearch,让工具自动搜索。
发现搜索到了 IAT 地址与大小,如下图:
Get Imports 得到 IAT 表,如下图:
得到结果后,需要检查下是否存在错误的 API 信息,如下图:
如果存在错误,需要进行修正,当确认无误后,使用 Fix Dump 来修复之前 Dump 出的文件 dump.exe。
到这一步,脱壳完成,此时使用工具查询下相应的信息,如下图:
已经没有了相应的 NsPacK 壳的信息,并且双击后也能正常运行,如下图:
5 脱壳机脱壳
5.1 本地演示
使用脱壳机脱壳,确实简单粗暴,用上述二进制修改后的工具作为例子,该工具运行后效果如下图:
最后,系统上也能正常运行,如下图:
IDA 对这道逆向题的反汇编结果,如下图,逻辑很清晰, 题就不做了:
7 总结
虽然这个过程一波三折,但也可以学到对 PE 文件结构的理解,以及实际动手去脱 NsPacK 压缩壳。
8 参考
文件名 crakeme.exe
sha256 f5ff2937507df1513b63c0d6436b69d6d728ec34edb5ccf2aad6fd9f7deb13fe
sha1 a7a1cff8a3e6e7812560a858c411da1caa25870c
md5 2f90aad27a287bc9716206a0f0f757c6
操作系统 Win7_x64_sp1_pro
虚拟机软件 VMware15 pro
调试工具 ollydbg1.10
查壳工具 Detect It Easy 2.05、PEiD v0.94
IAT 修复 ImportREC 1.7
二进制修改工具 010 Editor 9.0.2
操作系统 Win7_x64_sp1_pro
虚拟机软件 VMware15 pro
调试工具 ollydbg1.10
查壳工具 Detect It Easy 2.05、PEiD v0.94
IAT 修复 ImportREC 1.7
二进制修改工具 010 Editor 9.0.2
该文件在 XP 下运行会失败,所以以下步骤均为 Win7 环境,在第一次拿到样例文件时,首先第一件事就是使用相关的工具进行查壳,如下图:
发现给出的类型为 MSDOS,其余信息没有,为了严谨,接着使用 PEiD 查询下试试,发现解析失败,如下图:
ollydbg 无法载入进行调试,会报错,但仔细一想作为一道 CTF 逆向题目,不会是无法运行的,自然要使用 010 Editor 查看下实际的二进制内容,看看这个 PE 文件哪里出了问题,导致解析工具无法识别,如下图:
发现确实是一个 PE 文件,但是在 PE 标志头出现了错误,实际上应该是 50 45(PE),错误的文件是小写的”pe”,之后就能正常识别了(大小写混淆),如下图:
经过修改后的 PE 文件已经可以正常识别了,同样也显示出相应的编译信息与壳的信息,NsPacK V3.7 中文名称为北斗壳,是国内人编写的压缩壳。既然是手工对其脱壳,自然第一步就是寻找 OEP(原始入口点)。
ollydbg 载入后入口点处为:pushfd,pushad,call XXXX
OEP 的特征如下:popad,popfd,jmp OEP
所以接下来就是通过特征寻找到 OEP,如下图:
经过修改后的 PE 文件已经可以正常识别了,同样也显示出相应的编译信息与壳的信息,NsPacK V3.7 中文名称为北斗壳,是国内人编写的压缩壳。既然是手工对其脱壳,自然第一步就是寻找 OEP(原始入口点)。
ollydbg 载入后入口点处为:pushfd,pushad,call XXXX
OEP 的特征如下:popad,popfd,jmp OEP
所以接下来就是通过特征寻找到 OEP,如下图:
直接 Ctrl + f 快捷键查找命令 popfd 来快速找到 OEP,发现在接下来几条指令后就是 OEP 的特征(当然也可以一步步的调试,直到找到 OEP 的特征为止),如下图:
下断点后,F9 运行到 0040641B,最后是会跳转到 OEP 处,如下图。
右键使用 OllyDump 插件脱壳,选择当前的 EIP 作为入口点地址。
这里脱壳时,不选择【重建输入表】,之后保存在本地,之后修复 IAT。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-11-5 00:56
被jishuzhain编辑
,原因:
上传的附件: