首页
论坛
专栏
课程

[原创]新手 NsPacK3.7 脱壳记录

2019-11-5 00:55 1106

[原创]新手 NsPacK3.7 脱壳记录

2019-11-5 00:55
1106

1 摘要

加壳压缩是一种对 EXE 文件的数据压缩及加密保护,可以将 EXE 文件压缩成自我解压文件,并能隐藏解压进程。

2 起因

最近在安全交流群里,一位小伙伴发了一道 CTF 逆向题目,寻求帮助,考虑到安全问题,在很自然上传 VT 与沙箱后,发现开启了一个 ntvdm.exe 进程,搜索引擎一查发现是 dos 虚拟机,很自然地以为是 16 位 dos 程序,随手拿 IDA 反汇编一看,发现给解析成了 16 位汇编,心想现在比赛都这么折磨人了吗?16 位汇编现在也很少有人用来写病毒了吧。第二天上班路上,仔细一想,可能事情没有这么复杂,肯定是自己哪里有错,导致分析不对,于是查看该文件的十六进制内容,发现 This program cannot be run in DOS mode 有这个字符串,再仔细一看,发现出题人对该 PE 文件进行了更改…..导致相关的解析器解析成 MSDOS 程序了,哈哈哈……

3 分析环境

3.1 样本信息

文件名  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 参考



[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-11-5 00:56 被jishuzhain编辑 ,原因:
上传的附件:
最新回复 (2)
Spwpun 2019-11-5 09:05
2
0
印象中直接用OD脱完就可以了
xiaohang 3 2019-11-5 14:17
3
0
排版不错,内容适合初学者
游客
登录 | 注册 方可回帖
返回