前言

结合脱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的更多相关文章

  1. ASPack壳脱壳实验

    实验目的 1.学会使用相关软件工具,手动脱ASPack壳. 2.不要用PEiD查入口,单步跟踪,提高手动找入口能力. 实验内容 手动对文件"ASPack 2.12 - Alexey Solo ...

  2. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  3. <逆向学习第二天>如何手动脱UPX、Aspack壳

    UPS.AsPack压缩壳介绍: UPX .AsPack是一款先进的可执行程序文件压缩器.压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间.网络上传下载的时间和其它分布以及存储费用. ...

  4. 手脱Aspack变形壳1

    1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...

  5. 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳

    [个人笔记]ximo早期发的脱壳教程--手脱UPX壳   壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳.   手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...

  6. 手脱ASPack v2.12变形壳2

    1.PEID载入 ASPack v2.12 2.载入OD,跟之前帖子的入口特征相同,都是一个pushad,但是请不要怀疑这是同一个壳,绝对不是,pushad下一行ESP定律下硬件断点,然后shift+ ...

  7. [视频]K8软件破解脱壳入门教程

    [视频]K8软件破解脱壳入门教程 链接:https://pan.baidu.com/s/1aV9485MmtRedU6pzyr--Vw 提取码:vbak C:\Users\K8team\Desktop ...

  8. 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)

    系统 : Windows xp 程序 : TDC‘s keygenme 程序下载地址 :http://pan.baidu.com/s/1gdWyt6z 要求 : 脱壳 & 注册机编写 使用工具 ...

  9. 脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律

    脱壳第一讲,手工脱壳ASPack2.12的壳.ESP定律 一丶什么是ESP定律 首先我们要明白什么是壳.壳的作用就是加密PE的. 而ESP定律就是壳在加密之前,肯定会保存所有寄存器环境,而出来的时候, ...

随机推荐

  1. PTA 递增的整数序列链表的插入

    6-4 递增的整数序列链表的插入 (15 分)   本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性. 函数接口定义: List Insert( List ...

  2. KVM虚拟化配置

    KVM虚拟化 虚拟化概念 KVM虚拟化概念详讲 虚拟化配置 首先开启虚拟化的支持 并且增加一个50g的硬盘 free查看内存 grep -Ei 'vmx|svm' /proc/cpuinfo查看虚拟机 ...

  3. 浅谈意图识别各种实现&数学原理

    \[ J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} {\left({ \frac{x}{2} }\ ...

  4. HTML总结篇

    一.HTML基本结构标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  5. 「HTML+CSS」--自定义加载动画【009】

    前言 Hello!小伙伴! 首先非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 哈哈 自我介绍一下 昵称:海轰 标签:程序猿一只|C++选手|学生 简介:因C语言结识编程,随后转入计算机 ...

  6. js 一数组分割成若干个数组,并装换成字符串赋个li标签

    success: function (datas) { //请求成功后处理函数. var htmltext = ''; var data = datas.result; console.log(dat ...

  7. 梳理一下最近准备蓝桥杯时学习DP问题的想法

    学习时间不长,记录的只是学习过程的思路和想法,不能保证正确,代码可以在acwing上AC. 01背包问题: 1.首先是简单的01背包问题 2.先确定状态,f[i][j]表示有第i件物品,时间为j的最大 ...

  8. 【1.0 Regular Expressions 正则表达式】

    [概念] RegEx 正则表达式是一种特殊的字符序列,可帮助您使用专门的模板语法,来匹配对应的匹配方法或字符串组 它们可用于搜索,编辑或操纵文本和数据 正则表达式通常用于验证输入和检索信息 比如我们要 ...

  9. 数据库MySQL六

    介绍什么是JDBC JAVA SE也有 提高综合篇 JDBC(Java Database Connectivity) :java和数据库的连接技术,sun公司推出的一套java应用程序访问数据库的技术 ...

  10. 编程相关术语(Python)

    1. 程序的组成 程序 (program):(1)由一系列定义计算机如何执行计算的指令组成.(本质) (2)程序(算法)由对象.表达式和语句组成.(元素) 1.1程序的指令类型 输入 (input): ...