文章目录

  • 查壳
  • OD脱壳
  • 修复导入表
  • 处理附加数据
  • 关于附加数据
    • NO.1
    • NO.2
    • NO.3

查壳

拿到样本之后先查壳 发现是NsPack 后面还有个Overlay 看到这个就要警惕了 说明PE程序尾部有附加数据

OD脱壳


载入OD之后在入口点发现了pushfd和pushad 于是采用最快的脱壳方法
使用Ctrl+S键 查找所有命令

查找对应的两条命令

在jmp的地方下断点 F7就能到达OEP 之后dump文件

修复导入表

这一次我们使用LoadPE脱壳 选中目标进程 依次执行下面两个步骤

  1. 修正镜像大小
  2. 完整转存


接着使用ImportREC修复导入表

查找到的IAT只有两条 明显有问题 直接dump文件


运行之后 显示文件中的数据无效 应该是刚刚的附加数据的问题

处理附加数据


将原程序用LoadPE查看 计算出PE文件的结束位置 即ROffset+RSize=0xCA00
将目标程序拖进010Edit 找到0xCA00的位置 右键选择 标记选择开始


然后拖到最下面 右键选择 标记选择结束 复制数据


接着打开已经脱壳修复好的文件 拖到文件末尾 粘贴数据 保存

程序正常运行 脱壳完成

关于附加数据

关于附加数据 不同的壳情况也不一样 总的来说 会有三种情况

NO.1

有些壳虽然有overlay但是却不用特别处理 因为他根本就没有用到过这些数据

NO.2

为什么有些壳要定位指针? 所谓的dump就是把内存中的数据转储到磁盘 dump下来之后 文件对齐和内存对齐粒度不一样 overlay数据的起始地址就相应的发生了改变 所以在这个时候直接粘贴附加数据是行不通的 当需要重设指针的时候需要在脱壳后的程序的SetFilePointer下断点 然后对原先的文件指针进行栈回溯跟踪 一直往上找到赋值的位置 然后修改会正确的指针 就可以了

NO.3

但是为什么有些壳可以直接粘贴overlay数据呢 这是因为目标程序在使用附加数据的时候需要用到两个函数 一个是CreateFile SetFilePointer 一个用于打开文件 一个用于设置文件指针

   DWORD SetFilePointer(HANDLE hFile,                //在用CreateFileA打开后得到的文件句柄LONG lDistanceToMove,         //要移动的距离,这个是低32位PLONG lpDistanceToMoveHigh,  //要移动的距离,这是高32位,要注意这是一个指向数据的指针DWORD dwMoveMethod          //表示指针开始的位置);

使用这个函数的时候会出现一种情况 就是讲第四个参数直接设置为FILE_END 然后将第二个参数设置为一个负值 负数表示向前移动 FILE_END表示设置到文件末尾 而附加数据无论在原来未脱壳的文件中和还是在脱壳的文件中,因为我们复制的是整个overlay区域,他的overlay部分的数据对于最后的一个字节的距离是不变的。他每次都用FILE_END当然我们这样复制就不需要重定位指针了,也就是说即使我们把原来的文件(从0地址开始)全部复制到脱壳后的文件中也是能够运行的,因为他是靠与最后的地址的距离来定位读取数据。换个说法,如果这个时候你把最后一个数据删掉,或者少复制哪怕是一个字节,就不能运行了。这也是我们为什么要先修复导入表的原因
总结:也就是说如果你把附加数据复制到脱壳后的程序发现能够运行,呵呵~恭喜你,你碰巧遇到用FILE_END为指针的程序。
关于附加数据可以去看Lenux大神的浅谈脱壳中的附加数据问题(overlay) 附上看雪链接 以上三个问题也是我从这篇文章中得到答案的
https://bbs.pediy.com/thread-9182.htm

需要相关文件可以到我的Github下载:https://github.com/TonyChen56/Unpack-Practice

005 NsPack 1.4 之附加数据初探相关推荐

  1. linux sh : 由未实现函数引起bash读取2进制附加数据引起的报错

    前言 写好的linux安装包管理脚本附加了tar文件. 运行安装包,本来要执行安装管理脚本,可是没运行,直接报错.说2进制附加数据里面有语法错误. 刚写好的脚本100行左右,开始没看出是哪引起的错误. ...

  2. 脱壳中的附加数据问题(overlay)

    1.前言    最近,在 论坛 上看到很多人在弄附加数据overlay的问题,加上上次答应了各位兄弟所以觉得写一些着方面的废话.如果下面的内容对你有帮助那是最好.    这篇文章我们将解决以下问题: ...

  3. [转] 浅谈脱壳中的附加数据问题(overlay)

    浅谈脱壳中的附加数据问题(overlay) Author:Lenus From: www.popbase.net E-mail:Lenus_M@163.com -------------------- ...

  4. 【转】脱壳中的附加数据问题(overlay)

    发布人:kgdyga 1.前言 最近,在论坛上看到很多人在弄附加数据overlay的问题,加上上次答应了各位兄弟所以觉得写一些着方面的废话.如果下面的内容对你有帮助那是最好. 这篇文章我们将解决以下问 ...

  5. 浅谈脱壳中的附加数据问题(overlay)

    浅谈脱壳中的附加数据问题(overlay) Author:Lenus From: www.popbase.net E-mail:Lenus_M@163.com -------------------- ...

  6. azure 微软云 规范挂载附加数据磁盘

    >azure云上面,一般系统盘都很小,空间基本不够使用,所以我们需要附加磁盘,首先在管理界面附加一个SSD磁盘,一般默认的是/dev/sdc目录.在2016年的时候,附加磁盘可以直接使用< ...

  7. 附加数据时出错,有关详细信息,请单击消息。

    在帮别人附加数据库的时候出现了一个这样的问题,感觉很突然,之前自己怎么弄都没事,这次感觉很不给面子啊.后来想了一下,它这个数据库是从别人那里拷过来的,应该是权限设置出了点问题. 首先就是右击数据库文件 ...

  8. 大数据初探——Hadoop历史

    Hadoop是一个开源的分布式框架,是Apache下的一个开源项目.Hadoop运行可以在成千上万个普通机器节点组成的集群上,通过分布式的计算模型和存储模型来处理大数据集.Hadoop具有高容错性.工 ...

  9. Keil(MDK)下用仿真器烧程序的同时烧写附加数据到SPI FLASH

    之前在i.MX rt板块经常看到i.MX RT最新支持XXX Flash的下载算法,于是冒出一个问题,下载算法是啥.故花时间研究了一下. 一.了解下载算法 研究过程中参考了这篇文章:更进一步的了解Ke ...

最新文章

  1. boost::histogram::detail::accumulator_traits用法的测试程序
  2. php判断是否为数字_PHP将英文数字转换为阿拉伯数字
  3. linux读取.data文件,[20121227]v$datafile访问是从数据文件获取信息吗.txt
  4. cuda第一次计算耗时_CUDA编程入门(四)并行归约算法
  5. ADO.NET入门教程(六) 谈谈Command对象与数据检索
  6. QT视频教程系列:QuickTester概述
  7. java 概率生成随机数_JAVA 生成随机数,并根据概率、比率
  8. 物联网竞赛-LoRa和NB-IOT模块学习知识汇总
  9. 庞博 上海交大计算机系,那个脱口秀的段子手——交大帅哥庞博
  10. win7浏览器主页修改不过来_win7系统浏览器主页修改不了的解决方法
  11. JavaScript 音乐播放器
  12. php登陆界面点登陆没有反应,ThinkPHP5实战的登录界面的登陆按钮点击之后没有任何反应怎么解决?...
  13. 紫光同创国产FPGA学习之Fabric Inserter
  14. linux cnc 树莓派,谈谈LinuxCNC
  15. ceph kernel rbd (一): 简介
  16. linux基础学习-ssh基础
  17. qq动态名片代码_巧用云调用,实现【共享名片夹】小程序
  18. 【阿里云】 混合云备份服务(HBR)的本地备份配置流程简述
  19. 7-36 调查电视节目受欢迎程度
  20. 西电软工操作系统复习纲要

热门文章

  1. 成功解决raise XGBoostError(_LIB.XGBGetLastError()) xgboost.core.XGBoostError: b'[22:08:00] C:\\Users\\Ad
  2. Microsoft .NET:Microsoft .NET之.net4.5.1简介、安装、使用方法之详细攻略
  3. DL之RBM:基于RBM实现手写数字图片识别提高准确率
  4. angularJs基础学习
  5. javaweb 要学习的东西
  6. PHP教程-防止网站被刷票的小技巧
  7. 在线 Sql Server 服务无法启动的解决办法
  8. 在EXE和DLL中,FindResource的区别
  9. Bluetooth ATT介绍
  10. STM32-使用函数指针时莫名复位问题原因