使用LordPE和Import REC脱壳
本博客用到的资源链接放在博客末尾。
LordPE是一款能够抓取内存映像的用来脱壳的软件,它能够把一个进程的内存数据给Dump下来,然后保存为文件。
光了解一个软件的用处用起来如果出问题还是会比较头疼,所以这里简单说一下LordPE软件的原理。
该软件其实也是调用了系统的API。它首先调用CreateToolhelp32Snapshot函数来获取一个系统中的进程的快照。然后再用Module32Next函数来循环获取每个进程的信息,进程的信息会被填到一个MODULEENTRY32结构里面,信息包括了该进程的映像基址,进程的映像大小,进程的句柄,进程的完整路径。当然还有一些其他的信息,不过这些我们不用管。
得到了进程的句柄,以及映像基址和大小之后,软件就可以对它进行操作了。软件会根据这个数据读取出进程的内存数据,然后将数据保存到磁盘文件。
那么它为什么能脱壳呢?其实用它进行脱壳的过程,一般是我们先用其他软件将加壳程序调试到OEP处停止,这个时候程序在内存中已经被壳给解压缩或者解密了,这个时候的进程的内存数据就是没加壳时候的数据。然后我们将这些数据Dump下来保存为文件。得到的就是没加壳的原程序文件了。其实就是先让壳对程序自行解压或解密,然后我们将解压或解密后的程序数据Dump下来保存为文件。
这个是程序的界面,打开程序时要注意用管理员权限打开,不然可能用OD调试的进程在这里可能看不到。点击选项,然后调整设置成下面这样:
里面有个选项:从磁盘粘贴文件头。意思是Dump下来的数据里面的PE文件头是直接从磁盘原始文件中复制的。
当我们要Dump一个进程的内存数据的时候,右键目标进程,然后选择完整转存就可以了。
但是,既然有这种Dump技术,那就肯定还有反Dump技术,因为LordPE软件是通过MODULEENTRY32结构里面的数据来获取进程的信息的。所以,一些程序的壳会修改里面的modBaseSize和modBaseAddr字段,往里面填入错误的值。而因为如果修改modBaseAddr的值,会让系统出现问题,所以一般修改的都是modBaseSize字段。这样我们Dump下来的就是不完整的数据。
出现这种问题其实解决方法很简单,可以让软件直接到PE文件头里面的SizeOfImage字段读取映像的真正大小。做法就是右键目标几进程,然后选择修正镜像大小。然后再Dump就可以了。
加壳程序还可能用一种技术来防止用户Dump进程数据,就是在程序中使用VirtualProtect函数来设置PE文件头为不可读,这样我们用软件Dump进程的时候就会出现访问错误。在软件界面右键目标进程,然后点击区域转存,就出现了下图:
这里只是举个例子,这个程序还没有进行脱壳调式。可以看到有些区域显示的是NOACCESS。如果加壳程序做了我们上面所说的处理的话,PE头也会出现这种情况。
这个时候我们可以打开OD,按下“Alt+M”或者点击蓝色小框框里面的M打开内存映像,然后在PE文件头那里右键,选择设置访问->所有访问。
下面就试一下用LordPE进行脱壳,用到的加壳程序是书本《加密与解密》里面的例子:RebPE。
首先我们用OD打开目标程序:
很明显是被加壳了。然后我们单步执行一下之后,在ESP寄存器中的内存地址上设置内存访问断点,然后运行程序,跟踪到OEP的地方:
这个时候进程在内存中已经脱壳完成了,现在我们就要用LordPE来Dump数据了。用管理员权限打开软件,然后右键目标进程,先选择修正镜像大小:
软件成功修正了镜像的大小。所以说这个程序也修改了MODULEENTRY32结构里面的值。
然后我们再选择完整转存,保存到磁盘文件。
最后我们点击运行一下:
居然出现了一个错误。这就很崩溃了。
但是办法总比困难多,一番查询就会知道,加壳程序会对程序的IAT做手脚,破坏原程序的输入表是加密外壳必须具备的功能。所以上面这个程序虽然我们把它的外壳去掉了,但是它的IAT已经被破坏了,所以无法调用系统API。
一些外壳会改变原程序IAT里面的内容,加壳的时候,由于壳会自建一个输入表,并且让原来的PE文件的数据目录里面输入表指针指向自建的输入表。这样PE文件装载器会对自建的输入表进行填写。而原来的输入表被外壳变形后储存。程序运行的时候外壳将变形后的输入表进行扫描,然后重新填写所有函数的地址。
要注意:因为IAT填写完之后,输入表的其他部分就不重要了,程序依靠IAT里面的函数地址就能正常运行,并且壳只是填了IAT里面的内容,对于输入表其他部分,可以说是已经破坏了,也就是说,加壳程序运行的时候,原程序的输入表已经不在了,内存里面就只有一个IAT。
所以像我们上面那样Dump数据后,文件里面的没有输入表的,自然程序运行不了。所以我们要重建输入表。
还有一些外壳,填写到IAT里面的并不是真正的API地址。它填的可能是外壳的HOOK API地址,这样程序每次调用API就会跳转到外壳中运行,这样外壳又可以获得控制权。
这个时候我们就要用到Import REC(全称:Import REConstructor) 这个软件了。
这个软件可以帮助我们重建程序的输入表,并且用起来很简单。
运行这个软件前我们要确保几个事情:
- 目标文件已经被像我们上面那样给Dump下来了。
- 目标文件正在运行
- 我们事先得知道目标程序的真正OEP或者IAT的偏移量和大小。
所以如果完成了上面的Dump的步骤之后,我们再将原来的没有Dump的程序用OD打开,然后跟踪到OEP处:
得到真正的OEP(箭头所指)。
然后我们打开软件,在下拉栏里面找到目标进程:
然后在OEP框框那里填入正确的OEP的RVA,然后再点击IAT自动搜索,让软件自动搜索IAT的偏移量和大小:
如果OEP发挥作用,那么软件会弹出一个窗口:
如果说我们没有正确的OEP,或者说软件没有找到IAT的偏移量,那么我们需要手动填入IAT的RVA和SIZE:
完成上面步骤之后,我们点击获取导入表:
日志框:
这样就是API都读取成功了。
如果有读取不成功的,就会在下面这个框中显示 有效:否。
这里我们的API都能够识别,如果有不能识别的,右键这个框的空白处,然后选择跟踪级别1,然后点击“显示无效的”,如果还是有无效的,那么再右键空白处,选择跟踪级别2。
最后就到了修复程序的时候了,在下面这个地方的复选框中选中添加新节区:
这样软件会把新的输入表放在这个新的节区里面,这样会不可避免导致程序变大,我们也可以将输入表建在程序空白处,这样我们就得自己填写RVA了。
最后点击修正转储,选择我们之前Dump下来的文件进行转储,软件会生成一个新的文件,OEP也会被自动修正,这个文件就是最后修正了输入表的文件,点击运行:
完全没有问题。至此就脱壳完成了。
加壳程序: https://download.csdn.net/download/weixin_43575859/12337598
LordPE和Import REC在吾爱破解的爱盘里面都能找到。
使用LordPE和Import REC脱壳相关推荐
- FSG2.0脱壳记录
想要加壳文件的可以评论留言.. 1.现用PEId查一下壳,发现是FSG压缩壳 2.载入od,是fsg的入口特征 3.od往下到 jmp dword ptr:[ebx+0xc],下断点 4.F9 运行, ...
- Re-脱壳技术 脱壳实战(3): 脱壳及修复IAT
题目: 链接: https://pan.baidu.com/s/1wQIwaCu99mYHX8gyqMfMMQ 提取码: qwcm 脱壳最好在windows XP环境中 使用工具: OD lordPE ...
- 视频笔记-吾爱破解ximo脱壳视频1~10
总结归纳一下脱壳的几种方法: 1.单步跟踪法: 即F8一直运行下去,直到找到OEP 向下的跳转可以进行,向上的跳转不能进行 2.ESP定律法: 利用堆栈平衡原理,找到OEP 适用于:大部分的壳.例如: ...
- 脱壳实战_手动脱Zprotect
通常在软件的破解过程中,会遇到代码经过混淆器混淆的程序,此类混淆器可以称之为壳,壳又可分为压缩壳(常见的有UPX.北斗.ASDPack.Npack.PECompact等)和保护壳(如强壳Safengi ...
- X86逆向14:常见的脱壳手法
本章节内容将介绍软件的脱壳技术.什么是加壳?加壳就是用来压缩或者保护软件不被非法修改破解的一种工具,而脱壳就是将已经加壳的程序从壳中剥离出来,既然能给程序进行加壳,那也就会有相应的脱壳方法,本节课我们 ...
- 一个病毒的脱壳及修复
这是一个最近比较流行的使用.net加壳的病毒脱去.net壳后的一个中间体.脱壳和修复 过程不是很复杂,但还是需要一些小技巧. 未脱壳的代码如下图所示: 401535前面都是壳代码,从call eax进 ...
- 反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......
反调试技巧总结-原理和实现 -------------------------------------------------------------------------------------- ...
- 看雪技术论坛加密与解密工具新年大礼包2007光盘
看雪技术论坛加密与解密工具新年大礼包2007光盘 2009年10月30日 ├─Debuggers ;调试器 │ ├─OllyDbg │ │ ├─plugin ;各类OllyDbg插件 │ │ ├─Ol ...
- wubi-shell-crack
原文地址: http://bbs.pediy.com/showthread.php?t=155381 1. 分析环境 硬件:CPU: Pentium(R) Dual-Core CPU E5300@2 ...
- php反调试,反调试原理
一. 前言 前段学习反调试和vc,写了antidebug-tester,经常会收到message希望交流或索要实现代码,我都没有回复.其实代码已经在编程版提供了1个版本,另其多是vc内嵌asm写的,对 ...
最新文章
- 近看图灵碗 (8. 我就是上帝) (上)
- 不敢相信?System.currentTimeMillis()存在性能问题
- display属性_前端基础:Grid 布局教程,重新复习grid布局的容器和项目属性
- 字节跳动攻城狮: 我整理了很久的Python面试指南,请查收!
- Spring学习笔记十二---泛型依赖注入
- 【Matplotlib】详解图像各个部分
- leetcode - 1221. 分割平衡字符串
- 第四(装饰器、迭代器、生成器)
- Android Studio的build.gradle里面的各种版本信息
- html5站点是什么意思,html5是什么意思(html5是什么技术)
- java万年历项目百度云_Java开发万年历
- 数据分析36计(27):分析师与用户研究员,玩转定量研究和定性研究,落地研究结论...
- 15款替代微软产品的开源软件
- 基于layui的省市镇三级联动js
- 人口红利提前消失?今年经济会如何?权威回应来了
- 做跨境电商的Anker的也回来“内卷”了?
- 2.1 被隐藏了的过程
- vim常用插件安装及使用
- appkey 即 paySignkey
- WIN10 LTSC 安装EDGE和微软应用商店