脱壳入门----脱ASPack壳保护的DLL
前言
结合脱dll壳的基本思路,对看雪加密解密里的一个ASPack壳保护的dll进行脱壳分析。
脱壳详细过程
寻找程序的OEP
先将目标DLL拖入OD,来到壳的入口处。
然后利用堆栈平衡原理在pushad后,对栈顶下硬件访问断点。
之后我们直接运行程序,当程序popad后会被断下,观察得出OEP的RVA为0x1240。
找到壳的重定位代码
我们在来到程序真正的入口点后可以看到一些会被重定位的代码,我们选择最近的一个会进行重定位的代码记住其RVA。
本例子中我们选的是RVA为0x1253的代码。
然后我们重新加载dll,我们先对刚刚记住的那个RVA下内存写入断点,程序会先断在壳代码解压区块处我们需要在壳代码将所有的区段解压缩后对刚刚记住的那个RVA再下内存访问断点,然后程序会断在壳的重定位代码处。
跳过重定位代码并dump程序
我们只需要将修正重定位数据的代码nop去就可以让重定位代码无法发挥作用。
nop去重定位代码后我们继续运行程序,程序会停在我们寻找OEP时设置的断点处。然后我们就可以用LordPE来dump文件了,将dump的文件命名为ASP.dll
重建输入表
在重建输入表前我们需要知道原程序IAT表的位置,我们可以在OD中Alt + M查看内存然后我们在主模块可以看到各个区块,一般IAT表都是在.rdata区块处。我们在此处右击然后选择在cpu数据窗口查看,然后将cpu数据窗口的显示形式调为地址。我们可以看到在区块一开始就是IAT表。此IAT表的RVA为0x7000。
在查找IAT表示还要注意,不要将原程序的IAT表与壳的IAT表搞混。在区块.aspack处也存在一个IAT,这个IAT是壳代码的。
获取IAT的RVA后我们可以打开ImportRE工具重建输入表,我们在OEP处填写1240,在IAT 的RVA处填写7000,大小尽量填大点。然后点击获取输入表。
获取输入表后我们发现有好多无效的这是因为我们IAT的大小填的过大,我们只需点击显示无效函数,然后右击剪切/删除指针数据即可去除无效数据。
接着我们点击修复转存文件,并选择我们刚刚转存的ASP.dll即可生成名为ASP_.dll的文件。
修复重定位数据
如果把刚刚我们修复了输入表的dll加载到OD中我们可以看到需要重定位的数据还是按照基地址为0x400000的数据,而此时的基地址为0x220000其数据并没有被修正,这是因为windows加载器在加载的时候并没有找到重定位表,所以我们需要修复重定位表。
我们重新加载加壳的dll,来到我们刚刚找到的壳的重定位代码处,分析程序可得0x22d247地址处edi+ebx即为对应需要重定位的数据的地址。我们需要在此处打补丁获取所有需要重定位的数据的RVA地址。我们在0x22d598处写补丁程序,此处跳转到0x22d598处。
然后在0x22d598处打补丁程序,将获得的重定位数据地址存在0x229000处,0x22d600为其指针。
运行程序程序停在OEP跳转处,我们在数据窗口处可以看到重定位数据的RVA地址。(每一个dword是一个地址)
将这些二进制数据复制后用WinHex保存为bin文件。然后用拖入重定位重建工具ReloREC,然后选在重定位表存在RVA:9000处。点击Fix Dump选择我们重建了输入表的名为ASP_.dll的文件,其会生成一个名为ASP__.dll的文件。
这时在用OD加载此文件就会发现需要重定位数据处的数据已被修正。
优化PE文件
①将在壳空间中的资源数据都放到一个资源区段中,用工具DT_ResFix.exe选择对应的dll文件,然后直接重构资源。
②将壳代码的区段删除,利用pe编辑工具。
③查看pe文件头的一些数据是否有错误。(一般我们在前面重构输入表和重定位表的时候,相关工具都已经修改过了)
④在重建输入表是可以将输入表放在一个已存在的区块处,这里我们是新建了一个区块。
总结
脱dll壳的思路大致就是这样,当然各个步骤的方法不唯一,像寻找oep就有很多方法。需要根据对应的壳,灵活使用各种方法。
脱壳入门----脱ASPack壳保护的DLL的更多相关文章
- ASPack壳脱壳实验
实验目的 1.学会使用相关软件工具,手动脱ASPack壳. 2.不要用PEiD查入口,单步跟踪,提高手动找入口能力. 实验内容 手动对文件"ASPack 2.12 - Alexey Solo ...
- 简单脱壳教程笔记(2)---手脱UPX壳(1)
本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...
- <逆向学习第二天>如何手动脱UPX、Aspack壳
UPS.AsPack压缩壳介绍: UPX .AsPack是一款先进的可执行程序文件压缩器.压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间.网络上传下载的时间和其它分布以及存储费用. ...
- 手脱Aspack变形壳1
1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...
- 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳
[个人笔记]ximo早期发的脱壳教程--手脱UPX壳 壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳. 手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...
- 手脱ASPack v2.12变形壳2
1.PEID载入 ASPack v2.12 2.载入OD,跟之前帖子的入口特征相同,都是一个pushad,但是请不要怀疑这是同一个壳,绝对不是,pushad下一行ESP定律下硬件断点,然后shift+ ...
- [视频]K8软件破解脱壳入门教程
[视频]K8软件破解脱壳入门教程 链接:https://pan.baidu.com/s/1aV9485MmtRedU6pzyr--Vw 提取码:vbak C:\Users\K8team\Desktop ...
- 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)
系统 : Windows xp 程序 : TDC‘s keygenme 程序下载地址 :http://pan.baidu.com/s/1gdWyt6z 要求 : 脱壳 & 注册机编写 使用工具 ...
- 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律
脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律 一丶什么是ESP定律 首先我们要明白什么是壳.壳的作用就是加密PE的. 而ESP定律就是壳在加密之前,肯定会保存所有寄存器环境,而出来的时候, ...
随机推荐
- wget 爬取网站网页
相应的安装命名 yum -y install wget yum -y install setup yum -y install perl wget -r -p -np -k -E http:// ...
- java实现一个点餐系统
转载于blog.csdn.net/weixin_44219955 项目大体框架 菜品类(菜品id,菜品名,菜品类型,上架时间,单价,月销售,总数量) 管理员类(管理员id,账号,密码) 客户类(客户i ...
- 文本相似性计算--MinHash和LSH算法
给定N个集合,从中找到相似的集合对,如何实现呢?直观的方法是比较任意两个集合.那么可以十分精确的找到每一对相似的集合,但是时间复杂度是O(n2).此外,假如,N个集合中只有少数几对集合相似,绝大多数集 ...
- Java之继承和抽象类
继承 继承的实现 继承通过extends实现 格式:class 子类 extends 父类 { } 举例:class Dog extends Animal { } 继承带来的好处 继承可以让类与类 ...
- 【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
问题描述 App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot. 这个是因为什么? 并且通过 ...
- 全网最详细的Linux命令系列-nl命令
nl命令在linux系统中用来计算文件中行号.nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等 ...
- Apache Hudi 0.8.0版本重磅发布
1. 重点特性 1.1 Flink集成 自从Hudi 0.7.0版本支持Flink写入后,Hudi社区又进一步完善了Flink和Hudi的集成.包括重新设计性能更好.扩展性更好.基于Flink状态索引 ...
- php的类
类成员中:属性.类常量和方法都可以无限定义,但是定义的原则是相关性.除了以上三个类成员,不能在类结构{}中直接写其他任何代码 PHP类结构中有三种成员:属性.方法和类常量 类结构中只能有三种成员,不限 ...
- Chrome扩展开发基础教程(附HelloWorld)
1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...
- SpringBoot-如何设计优秀的后端接口?
1 概述 本篇文章以Spring Boot为基础,从以下三个方向讲述了如何设计一个优秀的后端接口体系: 参数校验:涉及Hibernate Validator的各种注解,快速失败模式,分组,组序列以及自 ...