13 脱壳技术

合集下载

(完整版)常见几种脱壳方法

(完整版)常见几种脱壳方法

----------------<小A分>----------------一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳(强壳)两种"UPX" "ASPCAK" "TELOCK" "PELITE" "NSPACK(北斗)" ... "ARMADILLO" "ASPROTECT" "ACPROTECT" "EPE(王)" "SVKP" ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。

当然加密壳的保护能力要强得多!-----------<小A分割线>-------------二、工具的认识OllyDBG ring3 shell层级别的动态编译工具、PEid、ImportREC、LordPE、softIce ring0级别调试工具-------------<小A分割>-------------------三、常见手动脱壳方法预备知识1.PUSHAD (入栈/压栈)代表程序的入口点,2.POPAD (弹栈/出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。

------------<小A分割线>--------------------方法一:单步跟踪法1.用OD载入,点“不分析代码!”2.单步向下跟踪F8,实现向下的跳。

也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,不然程序很容易跑飞,这样很快就能到程序的OEP6.在跟踪的时候,如果运行到某个CALL程序就运行的,就在这个CALL中F7进入7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN 的一般很快就会到程序的OEP。

软件破解脱壳法

软件破解脱壳法

软件破解脱壳法什么是脱壳技术?在一些电脑软件里有一段专门负责保护软件不被非法修改或反编译的程序。

它们一般都是先于程序运行拿到控制权,然后完成它们保护软件的任务。

就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。

由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。

就像电脑病毒和自然界的病毒一样,其实都是命名上的方法罢了。

从功能上抽象,软件的壳和自然界中的壳相差无几。

无非是保护、隐蔽壳内的东西。

而从技术的角度出发,壳是一段执行于原始程序前的代码。

原始程序的代码在加壳的过程中可能被压缩、加密……。

当加壳后的文件执行时,壳这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。

软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。

关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。

(一)壳的概念:作者编好软件后,编译成exe可执行文件。

1.有一些版权信息需要保护起来,不想让别人随便改动如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。

2.需要把程序搞的小一点,从而方便使用。

于是需要用到一些软件,它们能将exe可执行文件压缩。

3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。

实现上述功能,这些软件称为加壳软件。

(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK;PETITE NEOLITE(三)侦测壳和软件所用编写语言的软件,因为脱壳之前要查他的壳的类型。

1.侦测壳的软件 fileinfo.exe 简称 fi.exe (侦测壳的能力极强)。

2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒)推荐。

language2000中文版(专门检测加壳类型)。

软件加壳脱壳技术教程

软件加壳脱壳技术教程

一切从“壳”开始首先大家应该先明白“壳”的概念。

在自然界中,大家对壳这东西应该都不会陌生了,植物用它来保护种子,动物用它来保护身体等等。

同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。

它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。

就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。

由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。

就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。

最早提出“壳”这个概念的,据我所知,应该是当年推出脱壳软件RCOPY 3 的作者熊焰先生。

在几年前的DOS 时代,“壳”一般都是指磁盘加密软件的段加密程序,可能是那时侯的加密软件还刚起步不久吧,所以大多数的加密软件(加壳软件)所生成的“成品”在“壳”和需要加密的程序之间总有一条比较明显的“分界线”。

有经验的人可以在跟踪软件的运行以后找出这条分界线来,至于这样有什么用这个问题,就不用我多说了。

但毕竟在当时,甚至现在这样的人也不是很多,所以当RCOPY3 这个可以很容易就找出“分界线”,并可以方便的去掉“壳”的软件推出以后,立即就受到了很多人的注意。

老实说,这个我当年在《电脑》杂志看到广告,在广州电脑城看到标着999元的软件,在当时来说,的确是有很多全新的构思,单内存生成EXE 可执行文件这项,就应该是世界首创了。

但它的思路在程序的表现上我认为还有很多可以改进的地方(虽然后来出现了可以加强其功力的RO97),这个想法也在后来和作者的面谈中得到了证实。

在这以后,同类型的软件想雨后春笋一般冒出来,记得住名字的就有:UNKEY、MSCOPY、UNALL .... 等等,但很多的软件都把磁盘解密当成了主攻方向,忽略了其它方面,当然这也为以后的“密界克星”“解密机器”等软件打下了基础,这另外的分支就不多祥谈了,相信机龄大一点的朋友都应该看过当时的广告了。

脱壳名词解释

脱壳名词解释

脱壳名词解释一、什么是脱壳?脱壳,又称解壳,指的是去除软件或程序的保护机制,使其可以被逆向分析、修改或运行的过程。

脱壳是逆向工程领域中的一个重要技术,常用于软件破解、恶意代码分析等领域。

二、脱壳的原因和意义1. 加密与保护机制软件开发者为了保护自己的知识产权和软件安全,通常会对程序进行加密和保护。

这些保护机制可以包括如下措施: - 程序代码的加密,使其难以被阅读和修改;- 阻止程序在非授权环境下运行的授权机制; - 检测到程序被篡改后自动停止运行的完整性检查等。

2. 逆向工程然而,逆向工程者通过脱壳可以破解这些软件保护机制,恢复原始的程序代码,甚至修改其功能。

脱壳技术的应用广泛,包括以下几个方面的内容:•软件破解:通过脱壳可以去除软件的加密和授权机制,使得盗版发布和使用成为可能。

这对于某些无法购买正版软件或者有特定需求的用户来说可能是一种选择。

•恶意代码分析:恶意软件通常会采用各种保护机制来避免被分析和检测,并隐藏其真正的目的和行为。

通过脱壳恢复出原始的恶意代码,可以帮助安全研究人员分析其行为和制定相应的防护措施。

•安全评估:软件开发者或者安全顾问可能会使用脱壳技术来评估一个软件的安全性,以发现其中的潜在漏洞或者授权机制的薄弱点,为后续的加固工作提供依据。

三、脱壳技术的分类1. 静态脱壳静态脱壳是指在不执行被保护程序的情况下,通过静态分析技术将程序的保护解除。

常见的静态脱壳技术有如下几种:•反汇编与分析:逆向工程者使用反汇编工具将程序的机器码转换为汇编代码,然后通过分析汇编代码来恢复源代码。

这一过程可以帮助理解程序的结构和算法,从而有助于脱壳。

•调试与跟踪:逆向工程者通过调试器来运行程序,并对其进行跟踪和观察。

通过检查程序的内存、寄存器和栈等状态变化,可以帮助分析和理解程序的执行过程。

•代码修复与修改:通过修改保护机制相关的代码,或者修复被加密或者损坏的代码,来达到解除保护的目的。

2. 动态脱壳与静态脱壳不同,动态脱壳是在程序运行过程中实时脱去保护机制。

脱壳技术的研究与创新

脱壳技术的研究与创新

脱壳技术的研究与创新脱壳技术是指一种将被保护的软件解除保护的技术。

由于人们在进行软件开发或使用时,常常会涉及到软件保护措施的应用,以保证软件的安全性和版权权益。

因此,脱壳技术的研究与创新成为了一个非常重要的课题。

首先,我们来看一下脱壳技术的发展历程。

早期的脱壳技术主要是一些简单的加密算法,例如异或加密、移位加密等等。

后来,由于防护技术的加强,脱壳技术也迎来了一个飞跃的时期。

人们开始利用各种漏洞和技术手段来破解软件的保护措施,比如反调试、反虚拟机、HOOK调用等等。

这些技术手段对于脱壳技术的发展起到了巨大的促进作用。

如今,脱壳技术已经进入到了一个新的阶段。

随着移动互联网时代的到来,移动应用已经成为了人们生活中不可或缺的一部分。

因此,在移动应用的保护方面,脱壳技术也变得尤为重要。

为此,人们开始研究一些新的脱壳技术,例如基于虚拟化技术的脱壳、基于静态分析的脱壳、基于动态调试的脱壳等等。

在脱壳技术的研究与创新中,我们还需要关注的是其应用场景。

脱壳技术在软件开发、软件研究、安全测试等方面都有着广泛的应用。

例如,在软件研究方面,研究人员可以通过脱壳技术来深入了解软件的运行机制、协议、算法等等,为软件的优化和改进提供帮助;在安全测试方面,脱壳技术则可以用来评估软件的安全性和有效性,为安全检测和风险评估提供依据。

除此之外,脱壳技术的研究和创新还需要从其他方面进行探索。

例如,在脱壳技术的教育方面,我们应该加强对脱壳技术的教育,培养更多的专业人才;在脱壳技术的产业化方面,我们需要推动脱壳技术的产业化进程,促进脱壳技术的商业应用,在此基础上建立完善的产业链。

总的来说,脱壳技术的研究与创新是一个非常重要的课题,其意义不仅仅在于技术本身的发展,还在于其对软件开发、软件研究、安全测试等方面的推动和促进作用。

因此,我们应该加强对脱壳技术的研究与创新,不断提升其实用性和创新性,为我们的软件开发和安全保障提供更好的保障。

农产品初加工工作中的粮食加工技术介绍

农产品初加工工作中的粮食加工技术介绍

农产品初加工工作中的粮食加工技术介绍农产品的初加工是指在农产品收获后,经过一系列加工工序,将农产品加工为半成品或成品,以便储存、销售或加工成其他食品产品。

粮食作为重要的农产品之一,在初加工过程中,粮食加工技术起着重要的作用。

本文将介绍几种常见的粮食加工技术。

一、烘干技术粮食收获后的湿度较高,需要进行烘干处理,以降低湿度,防止粮食霉变和质量下降。

常见的烘干技术包括日晒烘干、气流烘干和批量烘干。

1. 日晒烘干:将粮食摊放在阳光下进行烘干。

这种方法适用于阳光充足、气温高且空气湿度低的地区,操作简单,成本低廉。

2. 气流烘干:利用空气流通加快粮食的蒸发速度,使湿度快速降低。

气流烘干设备通常由风机和热风炉组成,可以根据需要调整温度和湿度。

3. 批量烘干:将粮食装入烘干室,通过加热或通风的方式进行烘干。

批量烘干设备适用于大批量的粮食加工,能够确保粮食干燥均匀。

二、碾磨技术粮食初加工中的一项重要工序是碾磨,将粮食的外壳和胚芽去除,得到精白米或面粉。

碾磨技术通常分为碾磨和筛分两个步骤。

1. 碾磨:利用碾磨机将粮食破碎,去除外壳和胚芽。

破碎的程度和方法根据不同粮食种类和加工需求而定,常见的方法包括碎、碾、磨等。

2. 筛分:将经过碾磨的粮食进行筛分,根据颗粒大小将不同粒度的粮食分开。

筛分工序可以利用筛选机或震动筛进行。

三、脱壳技术一些粮食在初加工过程中需要去除外壳才能进一步加工。

常见的脱壳技术包括摇脱、碾轧和冷热处理。

1. 摇脱:将带有壳的粮食放入摇脱机,利用机械振动使得粮食与壳分离。

摇脱机适用于小批量的粮食脱壳。

2. 碾轧:将粮食通过碾磨机进行破碎,使其与壳分离。

碾轧可以利用不同粒度的辊子进行,适用于大批量的粮食脱壳。

3. 冷热处理:将带有壳的粮食进行冷热处理,使其外壳松弛,方便去除。

冷热处理的具体方法和参数需要根据粮食种类和外壳性质进行调整。

四、气调贮藏技术粮食初加工后,需要储存一段时间,以保持其质量和营养成分。

脱壳方法总结

脱壳方法总结

脱壳方法总结1. 引言在软件开发和逆向分析领域,脱壳(Unpacking)是指将一个已经被加密或保护的可执行文件还原到其原始状态的过程。

通过脱壳,分析人员可以获取被加密或保护的文件的源代码、算法、关键函数等信息,从而进行后续的逆向工程分析。

本文将总结几种常见的脱壳方法,并介绍它们的原理和使用场景。

2. 静态脱壳方法静态脱壳方法是指在不运行程序的情况下,通过对加密或保护的文件进行静态分析,还原出原始的可执行文件。

2.1. 字节码分析字节码分析是通过对加密或保护的文件进行二进制分析,识别出不同的加密算法或保护机制,从而还原出原始文件。

常见的字节码分析工具有IDA Pro、Radare2等。

2.1.1. IDA ProIDA Pro是一款功能强大的反汇编工具,可以用于对二进制文件进行逆向分析。

通过加载被加密或保护的文件,IDA Pro可以在图形界面下显示程序的反汇编代码。

通过对代码进行分析,可以识别出不同的加密算法或保护机制,从而编写相应的解密脚本。

2.1.2. Radare2Radare2是另一款强大的反汇编工具,它以命令行形式提供了一系列功能,可以对二进制文件进行静态分析。

通过使用Radare2的命令,可以查看程序的反汇编代码,识别出加密或保护机制,并编写相应的解密脚本。

2.2. 调试器调试器是一种用于运行和调试程序的工具,通过对加密或保护的文件进行动态分析,可以观察程序的行为,从而还原出原始文件。

常见的调试器有OllyDbg、GDB等。

2.2.1. OllyDbgOllyDbg是一款运行在Windows平台上的调试器,它可以用于对可执行文件进行动态分析。

通过加载被加密或保护的文件,OllyDbg可以以汇编代码的形式显示程序的执行过程。

通过逐步执行程序,并观察寄存器、堆栈等信息的变化,可以找到解密过程中使用的关键函数和算法。

2.2.2. GDBGDB是一款开源的调试器,可以运行在多种平台上,如Linux、macOS等。

普通壳的脱壳方法和脱壳技巧

普通壳的脱壳方法和脱壳技巧

普通壳的脱壳方法和脱壳技巧脱壳是指将一个已经打包的可执行文件(通常是二进制文件)恢复为原始的、可以读取和修改的形式。

这在软件逆向工程、安全审计和病毒分析等领域都是非常常见的操作。

下面我将为你介绍普通壳的脱壳方法和脱壳技巧。

一、普通壳的脱壳方法1.静态脱壳静态脱壳是指对目标文件进行分析,找到壳的解密和载入代码,然后将其解密出来,恢复原始的可执行文件。

- 调试器脱壳:使用调试器(如OllyDbg、IDA Pro等)来单步执行目标程序,找到壳的解密代码,并通过调试器的内存分析功能来寻找待解密的数据。

一旦找到解密的算法和密钥,就可以将目标文件完全解密出来。

- 静态分析脱壳:通过静态分析工具(如IDA Pro、Hopper等)来逆向目标文件,找到壳的解密算法和密钥,然后将其解密出来。

2.动态脱壳动态脱壳是指在目标程序运行时,通过对程序的运行过程进行监控和分析,找到壳的解密和载入代码,并将其解密出来,恢复原始的可执行文件。

-API钩取脱壳:通过使用一个DLL注入到目标程序的地址空间中,然后使用API钩子来监控API函数的调用,找到壳解密代码的入口点。

一旦找到壳解密代码的起始地址,就可以通过调试器执行目标程序,并在合适的时机将解密出来的代码或数据导出。

- 内存转储脱壳:通过在目标程序的执行过程中,使用内存转储工具(如winhex、ollydump等)将目标程序的内存转储出来,然后使用静态脱壳的方法对内存转储文件进行分析。

二、普通壳的脱壳技巧1.加载器分析在进行脱壳之前,首先要分析目标文件中的加载器。

加载器是壳程序的一部分,用于解压和载入真正的可执行文件。

通过分析加载器,可以确定载入代码和解密算法的位置,并推导出解密算法的密钥。

2.寻找壳代码的入口点在进行脱壳时,需要找到壳代码的入口点,即壳程序开始执行的位置。

可以通过调试器或者静态分析工具来寻找入口点,并标记下来以备后续使用。

3.内存和断点设置通过内存和断点设置,在目标程序运行过程中定位到关键的内存位置。

脱壳的各种方法

脱壳的各种方法
脱壳的各种方法
常见脱壳知识:
1.pushad (压栈) 代表程序的入口点,
2.popad (出栈) 代表程序的出口点,与pushad想对应,一般找到这个oep就在附近拉!
4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!
5.如果刚载入程序,在附近就有一个call的,我们就f7跟进去,这样很快就能到程序的oep
6.在跟踪的时候,如果运行到某个call程序就运行的,就在这个ca比如 jmp xxxxxx 或者 je xxxxxx 或者有rete的一般很快就会到程序的oep。
方法四:一步到达oep(前辈们总结的经验)
1.开始按ctrl+f,输入:popad(只适合少数壳,包括aspack壳),然后按下f2,f9运行到此处
2.来到大跳转处,点下f8,脱壳之!
方法五:最后一次异常法(脱一些强壳)
1:用od打开软件!
2:点击选项——调试选项——异常,把里面的√全部去掉!ctrl+f2重载下程序
3:一开是程序就是一个跳转,在这里我们按shift+f9,直到程序运行,记下从开始按f9到程序运行的次数!
4:ctrl+f2重载程序,按shift+f9(次数为程序运行的次数-1次
5:在od的右下角我们看见有一个se 句柄,这时我们按ctrl+g,输入se 句柄前的地址!
6:按f2下断点!然后按shift+f9来到断点处!
3.oep:程序的入口点,软件加壳就是隐藏了oep(或者用了假的oep),只要我们找到程序真正的oep,就可以立刻脱壳。
方法一:单步跟踪
1.用od载入,不分析代码!
2.单步向下跟踪f8,是向下跳的让它实现

恶意代码分析中的代码动态分析技术(九)

恶意代码分析中的代码动态分析技术(九)

恶意代码分析中的代码动态分析技术在当今的数字时代,恶意代码的威胁越来越严重。

恶意代码可以是病毒、蠕虫、木马等形式,它们的目标是在用户的计算机系统中偷取敏感信息、破坏系统功能或控制用户计算机。

为了应对这种威胁,安全专家和研究人员不断努力研发出各种分析技术来深入研究和理解恶意代码的行为和特征。

其中一种重要的技术是代码动态分析。

代码动态分析是一种通过监控并分析恶意代码在运行时的行为来获取有关其功能和特征的信息的方法。

相对于代码静态分析,代码动态分析更能真实反映出恶意代码的行为,因为它可以捕获代码在运行时的交互和操作。

下面将介绍几种常见的代码动态分析技术。

1. 代码脱壳技术恶意代码作者为了防止其代码被研究人员分析,通常会采用各种壳/加密技术来保护其代码。

代码脱壳技术是恶意代码分析中常用的一种动态分析技术。

它的原理是在恶意代码执行过程中,通过监控内存访问或系统调用等方式,获取到被保护的代码执行流程和解密算法的关键信息,从而还原出原始的恶意代码。

2. 行为监控与记录行为监控与记录是指通过监控恶意代码在运行时的行为来获取其功能和操作特征的技术。

它的实现方式是通过在操作系统层面或虚拟机层面插入监控模块,实时记录恶意代码执行时的系统调用、文件操作、网络通信等行为。

通过对这些行为的分析,研究人员可以了解到代码的具体逻辑、对系统的影响以及恶意活动的目的。

3. 反调试技术为了防止恶意代码被逆向工程分析,恶意代码作者通常会加入对调试器的检测和反调试功能。

反调试技术是一种通过欺骗或干扰调试器的行为,以防止恶意代码在调试环境下被解析的技术。

这种技术的实现方式包括:检测调试器进程、修改调试器标志位、使用反调试指令等。

通过研究和应用反调试技术,研究人员可以绕过恶意代码中的反调试保护,并更深入地分析其行为。

代码动态分析技术在恶意代码分析中起着至关重要的作用。

通过对恶意代码的动态行为进行分析,研究人员可以更好地理解其功能、特征和目的,从而采取相应的防御措施。

脱壳教程_精品文档

脱壳教程_精品文档

脱壳教程标题:脱壳教程引言:脱壳是指将软件或应用程序的包装层(也称为保护壳或加密层)移除,以便对其进行更深入的分析、修改或逆向工程。

脱壳过程可以帮助软件开发人员或安全研究人员理解程序的内部运行机制,发现其中的漏洞或者进行优化改进。

本文将介绍脱壳过程的基本原理和几种常见的脱壳工具以及其使用方法。

一、脱壳的基本原理脱壳的基本原理是通过破解或绕过软件的保护机制来移除保护壳。

保护机制通常包括各种检测和防御技术,如代码混淆、加壳、逆向工程等。

常见的保护壳有UPX、ASProtect、Enigma等。

脱壳的过程涉及对程序进行调试、分析和修改。

二、脱壳工具介绍及使用方法1. OllyDbgOllyDbg是一款著名的逆向工程和调试工具,也是脱壳过程中经常使用的工具之一。

它具有强大的调试和反汇编功能,可以帮助分析程序的执行流程、内存变化等。

使用OllyDbg进行脱壳时,首先需要加载待脱壳的程序,然后设置断点,跟踪程序执行,找到关键的保护机制的位置,最终移除保护壳。

2. IDA ProIDA Pro是一款功能强大的反汇编和逆向工程工具。

它可以将程序转换为易读的汇编代码,并提供强大的导航和分析功能。

脱壳时可以使用IDA Pro来分析和修改程序的内存和代码。

它可以帮助找到程序的入口点、解密过程等,从而移除保护壳。

3. x64dbgx64dbg是一款开源的调试器工具,适用于32位和64位的Windows系统。

它具有用户友好的界面和丰富的调试功能,并支持脱壳过程中的动态调试和反调试技术。

使用x64dbg进行脱壳时,可以跟踪程序的执行流程、查看内存变化,找到关键代码并进行修改。

三、脱壳过程示例以某款加壳的软件为例,介绍基本的脱壳过程。

1. 加载待脱壳的程序到脱壳工具中,并设置断点。

2. 运行程序,在断点处停下来,观察程序的状态和执行流程。

3. 跟踪程序的执行,查找关键的保护机制位置,例如解密函数、保护壳的入口等。

4. 分析并修改程序的内存和代码,移除保护壳。

脱壳基础知识入门

脱壳基础知识入门

脱壳基础知识入门现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。

越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。

除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。

壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。

另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。

主页提供的教学确实有点过时了,己到非更新不可了。

相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。

第一课PE格式要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。

Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。

推荐文档:ah007翻译的“PE文件格式”1.9版qduwg翻译的PE文件格式Iczelion's的PE文件格式PE结构各字段偏移参考学习PE格式的方法是自己先准备一个十六进制工具,如HexWorkshop,WinHex,用这些工具打开一个EXE文件对照着学。

强烈推荐你用Stud_PE v.2.2.0.5这款工具辅助学习PE格式。

PE格式学习的重点是在输入表(Import Table)这块。

Stud_PE工具界面:PE结构图:第二课SEH技术结构化异常处理(Structured Exception Handling,SEH)是Windows操作系统处理程序错误或异常的技术。

SEH是Windows操作系统的一种系统机制,与特定的程序设计语言无关。

《金蝉脱壳》课件

《金蝉脱壳》课件

金蝉脱壳的意义
金蝉脱壳在信息安全、逆向 工程和软件开发等领域具有 重要的实际意义和应用价值。
金蝉脱壳技术
金蝉脱壳技术的原理
金蝉脱壳技术利用程序运行过 程中的漏洞或特殊注入方式, 修改程序行为,绕过关键检测 点。
金蝉脱壳技术的具体实现 过程
金蝉脱壳技术通过对程序二进 制代码的逆向分析和修改,实 现程序执行路径的变化。
金蝉脱壳技术的优缺点
金蝉脱壳技术可以有效保护软 件知识产权,但也可能被黑客 利用进行恶意攻击。
金蝉脱壳在实战中的应用
ቤተ መጻሕፍቲ ባይዱ
安全领域中的金蝉脱壳应用
金蝉脱壳技术可用于绕过安全软件的检测,保护 系统免受恶意软件的攻击。
软件开发领域中的金蝉脱壳应用
金蝉脱壳技术可以用于保护软件的安全性,防止 被逆向破解或盗版。
逆向工程领域中的金蝉脱壳应用
金蝉脱壳技术对于逆向分析和破解软件具有重要 作用,可以绕过防护机制进行逆向工程。
资源推荐
1 金蝉脱壳相关的学习资源
推荐阅读相关书籍和博客,参加线下培训或在线课程,深入学习金蝉脱壳技术。
2 金蝉脱壳相关的工具资源
介绍一些常用的金蝉脱壳工具,例如脱壳器和反调试工具。
3 金蝉脱壳相关的开源项目推荐
推荐一些优秀的开源项目,可以帮助开发者更好地理解和应用金蝉脱壳技术。
结论
金蝉脱壳的未来发展趋势
随着技术的不断进步,金蝉脱壳技术将会更加成熟 和广泛应用。
对金蝉脱壳的展望和思考
金蝉脱壳技术的不断演进将会带来更多可能性和挑 战,我们需要持续关注和研究。
《金蝉脱壳》PPT课件
欢迎来到《金蝉脱壳》PPT课件。本课件将介绍金蝉脱壳的概念、技术、应 用以及未来发展趋势,让您全面了解这一重要领域。

壳的工作原理及手动脱壳的方法

壳的工作原理及手动脱壳的方法

壳的工作原理及手动脱壳的方法)1)Entry Point(入口点)PE格式的可执行文件的执行时的入口点,即是PE格式中的Entry Point。

用PEditor或者LordPE之类的PE查看工具看看NotePad.exe,你就会看到Entry Point的值。

也就是说NotePad.exe在执行时的第一行代码的地址应该就是这个值。

(当然应该加上基地址)2)Section(节区)PE格式文件是按节区进行规划组织的,不同的节区一般保存的数据的作用也不相同。

通常使用缺省方式编译的程序文件,有CODE/DATA/TLS/.text/.data/.tls/.rsrc/.rdata/.edata/.reloc等不同的名称,有的用于保存程序代码,如CODE和.text节区,有的用于保存程序中的变量的,如DATA/.data节区,有的保存重定位信息,如.reloc,有的用于保存资源数据,如.rsrc。

等等等等,当然这是缺省情况下编译器产生的结构。

而节区名称和节区中的数据其实没有必然的联系,节区中保存的数据也没有什么硬性的限制。

所以你可以在编译时用开关参数改变这些情况。

3)ImageBase(基地址)不仅程序文件按节区规划,而且程序文件在运行时Windows系统也是按节区加载的。

那么每一块的节区的顺序如何?起始的地址是什么呢?这就由基地址决定。

在程序的文件头部保存了每个节区的描述信息,比如有前面提到的节区名称,还有节区的大小,以及节区的相对虚拟地址(RVA)。

如果我们把节区的相对虚拟地址(RVA)加上基地址(ImageBase)就可以知道节区在内存中的虚拟地址(VA)了。

Windows系统就是按照这个要求来加载各个节区的。

这样Windows系统依次把各个节区放到了它相应的虚拟地址空间。

所以如果我们把相对虚拟地址(RVA)看成是坐标的偏移量的话,那么ImageBase就是原点了。

有了这个原点,一切都简单了。

好了有了简要的介绍,我们来看看壳的加载过程吧。

VMP脱壳技术

VMP脱壳技术

WinlicenseWinlicenseBy VirusWizard今天第一次接触Themida/Winlicense,基本上都是脚本,算不上什么技术,但作为实验,记录一下。

总体流程:使用Nooby的脚本跑到FakeOEP,然后修复StolenCode。

首先使用Winlicense然后调整脚本中的Base记事本的WinLicen的Base。

我这里的Base是01015000,所以对应的代码修改成:mov tmdbase, 01015000接下来用StrongOD,选项全部勾上,开始跑脚本。

跑完脚本之后,来到这里:01007568 68 BA750001 push 010075BA0100756D 64:A1 00000000 mov eax, dword ptr fs:[0]01007573 50 push eax01007574 8B4424 10 mov eax, dword ptr [esp+10]01007578 896C24 10 mov dword ptr [esp+10], ebp0100757C 8D6C24 10 lea ebp, dword ptr [esp+10]01007580 2BE0 sub esp, eax01007582 53 push ebx01007583 56 push esi01007584 57 push edi01007585 8B45 F8 mov eax, dword ptr [ebp-8]01007588 8965 E8 mov dword ptr [ebp-18], esp0100758B 50 push eax0100758C 8B45 FC mov eax, dword ptr [ebp-4]0100758F C745 FC FFFFFFF>mov dword ptr [ebp-4], -101007596 8945 F8 mov dword ptr [ebp-8], eax01007599 8D45 F0 lea eax, dword ptr [ebp-10]0100759C 64:A3 00000000 mov dword ptr fs:[0], eax010075A2 C3 retn观察堆栈,发现这个:0006FF8C 011ABF9B NOTEPAD_.011ABF9B0006FF90 01001898 NOTEPAD_.010018980006FF94 0000007070有些眼熟,用OD打开原记事本,看到头两行:0100739D > $ 6A 70 push 70 ; (initial cpu selection) 0100739F . 68 push 01001898然后F4到011ABF9B,这个时候会进入VM,我暂时还没那技术去分析。

鲜菱角脱壳机理及脱壳关键技术

鲜菱角脱壳机理及脱壳关键技术

鲜菱角脱壳机理及脱壳关键技术汇报人:2023-12-19•鲜菱角脱壳机理研究•鲜菱角脱壳关键技术研究•鲜菱角脱壳设备设计与优化目录•鲜菱角脱壳工艺流程与操作规范制定•鲜菱角脱壳质量检测与控制方法研究01鲜菱角脱壳机理研究0102鲜菱角脱壳的目的是为了便于后续的加工和食用,同时保持菱角的品质和口感。

鲜菱角脱壳是菱角收获过程中重要的环节之一,其过程包括果皮、果肉和种子的分离。

1 2 3鲜菱角脱壳主要依赖于果皮和果肉之间的机械性质差异。

在脱壳过程中,通过施加外力,使果皮和果肉之间的连接部分受到破坏,从而实现分离。

鲜菱角脱壳过程中,种子的分离是独立于果皮和果肉的,需要采用特定的技术进行处理。

03针对不同的鲜菱角品种和成熟度,其脱壳过程中的力学特性也会有所不同,需要进行具体分析和研究。

01鲜菱角脱壳过程中的力学特性主要包括应力分布、应变和断裂行为等。

02通过研究鲜菱角脱壳过程中的力学特性,可以了解果皮和果肉之间的连接方式和分离机制。

鲜菱角脱壳过程中力学特性研究02鲜菱角脱壳关键技术研究适用于少量鲜菱角的脱壳,但效率低下,劳动强度大。

手工剥壳机械剥壳化学剥壳通过机械装置对鲜菱角进行脱壳,效率较高,但容易对鲜菱角造成损伤。

通过化学试剂对鲜菱角进行处理,使其果壳与果肉分离,但可能对环境造成污染。

030201鲜菱角脱壳技术分类与特点目前,鲜菱角脱壳技术主要采用机械剥壳和手工剥壳,其中机械剥壳应用较为广泛。

随着科技的不断进步,鲜菱角脱壳技术将朝着高效、环保、智能化的方向发展。

鲜菱角脱壳技术应用现状及发展趋势发展趋势应用现状针对现有鲜菱角脱壳技术的不足,可以从以下几个方面进行改进:提高机械剥壳的精度和效率,减少对鲜菱角的损伤;研发环保、高效的化学剥壳技术;探索自动化、智能化的脱壳技术。

改进方向结合现代科技手段,如计算机视觉、人工智能等,研发新型鲜菱角脱壳技术,提高脱壳效率和自动化程度。

同时,可以探索将鲜菱角脱壳技术与食品加工、保鲜等环节相结合,实现全产业链的优化和升级。

脱壳知识——精选推荐

脱壳知识——精选推荐

脱壳知识什么是壳因为许多软件为了保护⾃⼰的软件不被和修改,通常会加壳,代码加密,增加破解的难度,从⽽达到保护软件的⽬的。

⾸先⼤家应该先明⽩“壳”的概念。

在⾃然界中,我想⼤家对壳这东西应该都不会陌⽣了,植物⽤它来保护种⼦,动物⽤它来保护⾝体等等。

同样,在⼀些计算机软件⾥也有⼀段专门负责保护软件不被⾮法修改或反编译的程序。

它们⼀般都是先于程序运⾏,拿到控制权,然后完成它们保护软件的任务。

举个例⼦,核桃⼤家都知道吧,想要吃到⾥⾯的⾁,就必须得先打开核桃外⾯那⼀层坚硬的壳,同样,外⾯想要看到⼀个程序的内部逻辑代码,就要脱掉外⾯的⼀层壳。

程序作者在编好软件后,编译成exe可执⾏⽂件。

有⼀些版权信息需要保护起来,不想让别⼈随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采⽤加壳来进⾏保护。

需要把程序搞的⼩⼀点,缩⼩程序的体积,减少内存容量,从⽽⽅便使⽤。

于是,需要⽤到⼀些软件,它们能将exe可执⾏⽂件压缩,在⿊客界给⽊马等软件加壳以躲避杀毒软件。

实现上述功能,这些称为加壳。

⾃然有加壳就会有脱壳。

为什么要脱壳脱壳是为了能够学习⼀个软件的程序设计逻辑,达到我们想要的⽬的。

如果不脱壳,我们就不能够了解软件的逻辑,也就⽆法得到源代码,也就⽆法破解⼀个软件,也就不会有这篇⽂章了。

我们拿到⼀个软件想要了解它的编程逻辑,那么我们就需要对它进⾏反汇编,当然有壳,也必须先脱壳(有些软件也可以不脱壳破解)。

如果我们需要对⼀个病毒或者⽊马进⾏分析,也是需要脱壳的,如果病毒⽊马不加壳,早被杀毒软件杀掉了。

⼀些常见的壳1、aspack壳2.caspr2、upx壳3、PEcompact壳等等...我们要脱壳,就需要⽤到⼀些汇编的指令,这是必须的,如果不懂汇编指令的话,那么就⽆法进⾏软件的脱壳了。

下⾯我就来介绍破解需要的⼀些主要的汇编指令⼀、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输⼊输出端⼝之间传送数据.1. 通⽤数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压⼊堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压⼊堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压⼊堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器⾥字节的顺序XCHG 交换字或字节.( ⾄少有⼀个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG ⽐较并交换操作数.( 第⼆个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第⼀个操作数⾥ )XLAT 字节查表转换.── BX 指向⼀张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输⼊输出端⼝传送指令.IN I/O端⼝输⼊. ( 语法: IN 累加器, {端⼝号│DX} )OUT I/O端⼝输出. ( 语法: OUT {端⼝号│DX},累加器 )输⼊输出端⼝由⽴即⽅式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. ⽬的地址传送指令.LEA 装⼊有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送⽬标指针,把指针内容装⼊DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送⽬标指针,把指针内容装⼊ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送⽬标指针,把指针内容装⼊FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送⽬标指针,把指针内容装⼊GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送⽬标指针,把指针内容装⼊SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装⼊AH.SAHF 标志寄存器传送,把AH内容装⼊标志寄存器.PUSHF 标志⼊栈.POPF 标志出栈.PUSHD 32位标志⼊栈.POPD 32位标志出栈.⼆、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的⼗进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP ⽐较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的⼗进制调整.MUL ⽆符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV ⽆符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上⼋种移位指令,其移位次数可达255次.移位⼀次时, 可直接⽤操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令─────────────────────────────────────── DS:SI 源串段寄存器 :源串变址.ES:DI ⽬标串段寄存器:⽬标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表⽰重复操作中SI和DI应⾃动增量; 1表⽰应⾃动减量. Z标志⽤来控制扫描或⽐较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串⽐较.( CMPSB ⽐较字符. CMPSW ⽐较字. )SCAS 串扫描.把AL或AX的内容与⽬标串作⽐较,⽐较结果反映在标志位.LODS 装⼊串.把源串中的元素(字或字节)逐⼀装⼊AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或⽐较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或⽐较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令─────────────────────────────────────── 1>⽆条件转移指令 (长转移)JMP ⽆条件转移指令CALL 过程调⽤RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不⼩于或不等于时转移.JAE/JNB ⼤于或等于转移.JB/JNAE ⼩于转移.JBE/JNA ⼩于或等于转移.以上四条,测试⽆符号整数运算的结果(标志C和Z).JG/JNLE ⼤于转移.JGE/JNL ⼤于或等于转移.JL/JNGE ⼩于转移.JLE/JNG ⼩于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC ⽆进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯⽚引线TEST为⾼电平时使CPU进⼊等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置⽅向标志位.CLD 清⽅向标志位.STI 置中断允许位.CLI 清中断允许位.其实上⾯我们⽤到的也就主要有⼀些赋值指令和⼀些跳转指令⽽已,⼤部分我们⽬前是⽤不到的。

病毒加壳和脱壳技术详解

病毒加壳和脱壳技术详解
我们知道 当一个普 通 的 E XE程 序 生 成 好 后 , 轻 松 的就 可 以 利 用 诸 如 资 源 工 很
( ) P oet a ak 次 之 , 外 的 2 AS rtc+ s c : p 国 软 件 多 用 它 加 壳 ,脱 壳 时 需 要 用 到 s T c I E uM P 0F I E+ c D ,需 要 一 定 的 专 业 知识 , 最新版现在暂 时没有办法。 但 () x 3 Up :可 以 用 UP 本 身 来 脱 X 壳 , 要 注 意 版 本 是 否 一 致 , 一 参 但 用 D 数。 ( )_ dl 可 以 用 S T C 4 A ma i : r l OF I E+ IE C DUMP脱 壳 , 比较 烦 。 () p :国 内 比 较 好 的 加 密软 5 Db e 件 , 版 本 暂 时 不 能 脱 , 可 以破 解 。 新 但 ( ) o i : 以 用 自己 来 脱 壳 。 6 Ne Lt 可 e
( PrV11一 . 有 效 ) Ra (只 对 AS . V12 , d
时 , 一这 段 代 码 先 于 原 始 程 序 运 行 , 壳 他 把 压 缩 、加 密 后 的 代 码 还 原 成 原 始
程 序 代 码 ,然 后 再 把 执 行 权 交 还 给 原 始 代 码 。 软 件 的 壳 分 为 加 密 壳 、 缩 压
安 全 咖 啡 屋
n 翻 嘲 嘲 踊 硼 嘲 啦 翘 礤 鼹 计 鼻 L 向 蓍 睁 训 蒜f 生 『 酒

瘸霉赫蠢 稳麟藏技 详 解
1什 么 是 壳 : 数学运算 , 可执行程 序文件或动态链 将 文件 分析 工具 ( 测 壳 的 类 型 ) 侦 :
计 算 机 软 件 里 有 一 段 专 门 负 责 保 护 软 件 不 被 非 法 修 改 或 反 编 译 的 程 序 。 们 一 般 都 是 先 于 程 序 运 行 。 到 它 拿 控 制 权 ,然 后 完 成 它 们 保 护 软 件 的 任

(完整版)常见几种脱壳方法(可编辑修改word版)

(完整版)常见几种脱壳方法(可编辑修改word版)

----------------<小 A 分>----------------一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳(强壳)两种"UPX" "ASPCAK" "TELOCK" "PELITE" "NSPACK(北斗)" ... "ARMADILLO" "ASPROTECT" "ACPROTECT" "EPE(王)" "SVKP" ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。

当然加密壳的保护能力要强得多!-----------<小 A 分割线>-------------二、工具的认识OllyDBG ring3 shell 层级别的动态编译工具、PEid、ImportREC、LordPE、softIce ring0 级别调试工具-------------<小 A 分割>-------------------三、常见手动脱壳方法预备知识1.P USHAD (入栈/压栈)代表程序的入口点,2.P OPAD (弹栈/出栈)代表程序的出口点,与 PUSHAD 想对应,一般找到这个OEP 就在附近3.O EP:程序的入口点,软件加壳就是隐藏了 OEP(或者用了假的 OEP/FOEP),只要我们找到程序真正的 OEP,就可以立刻脱壳。

------------<小 A 分割线>--------------------方法一:单步跟踪法1.用OD 载入,点“不分析代码!”2.单步向下跟踪 F8,实现向下的跳。

也就是说向上的跳不让其实现!(通过F4)3.遇到程序往回跳的(包括循环),我们在下一句代码处按 F4(或者右健单击代码,选择断点——>运行到所选)4.绿色线条表示跳转没实现,不用理会,红色线条表示跳转已经实现!5.如果刚载入程序,在附近就有一个 CALL 的,我们就 F7 跟进去,不然程序很容易跑飞,这样很快就能到程序的 OEP6.在跟踪的时候,如果运行到某个 CALL 程序就运行的,就在这个 CALL 中F7 进入7.一般有很大的跳转(大跨段),比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN 的一般很快就会到程序的 OEP。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

任何事物都有两面性,有加壳,就必有脱壳。

加壳与脱壳有着紧密的联系,一些脱壳技术是针对加壳而产生的,脱壳的进步,又迫使加壳软件不断创新发展。

现在越来越多的软件都加壳保护,脱壳有时是分析一个软件不可缺少的步骤。

……略……13.5 DLL 文件脱壳DLL 是Dynamic Link Library (动态链接库)的缩写形式,是一个共享函数库的可执行文件。

DLL 文件的脱壳与EXE 文件步骤差不多,DLL 文件多了个基址重定位表等要考虑。

13.5.1 寻找OEP当DLL 被初次映射到进程的地址空间中时,系统将调用DllMain 函数,当卸载DLL 时也会再次调用DllMain 函数。

也就是说,DLL 文件相比EXE 文件运行有一些特殊性,EXE 的入口点只在开始时执行一次,而DLL 的入口点在整个执行过程中至少要执行两次。

一次是在开始时,用来对DLL 做一些初始化。

至少还有一次是在退出时,用来清理DLL 再退出。

外壳编写时也必须考虑这个因素,初次载入时,做些初始化工作,如IAT 初始化等。

退出时再次进入入口点时,外壳将跳过相关的初始化代码,这时程序代码流程会短些。

所以找OEP 也有两条路可以走,一是载入时找,二是在退出时找,退出时流程短些,相对来说更容易找到OEP 。

用第16章编写的加壳工具对实例EdrLib.dll 进行加壳处理。

用LordPE 查看其PE 信息,获得EntryPoint 为D000h ,ImageBase 为400000h ,区块的信息如图13.41所示。

图13.41 查看区块信息DLL 本身不能直接执行,但可以调用LoadLibrary 将DLL 的文件映像映射到调用进程的地址空间中,退出时调用FreeLibrary 卸载DLL 。

为了调试DLL ,OllyDbg 提供了一个类似原理的辅助程序loaddll.exe ,这个程序被压缩存放在资源段里,如果OllyDbg 所在文件夹内没有loaddll.exe ,则会释放这个文件。

用OllyDbg 打开DLL ,将会询问启动loaddll.exe ,如图13.42所示。

然后链接库被加载并停在程序的入口(ModuleEntryPoint ),现在就可以正常调试DLL 程序了。

第13章 脱壳技术⏹ ⏹ ⏹ 325图13.42 提示是否启动loaddll.exeOllyDbg 加载EdrLib.dll 将停在外壳代码第一行。

细心的读者会发现,此时EdrLib.dll 并没有被映射到默认的400000h 内存地址中,而是选择了另一个地址。

按“Alt+M ”键打开内存映像窗口,将会发现EdrLib.dll 被映射到地址E20000h ,如图13.43所示。

图13.43 查看DLL 被映射的地址注意:由于DLL 被映射的地址是由系统动态分配的,因此在读者系统中显示的地址可能与本书不同,操作时以当前系统基址为准。

下面将忽略所有基地址注释,读者操作时以实际的映像地址来操作。

外壳的入口代码如下:00E2D000 pushad00E2D001 call 00E2D0C8……00E2D0C9 sub ebp, 600E2D0CF mov eax, dword ptr [ebp+C0] ;[ebp+C0]是一个计数器变量,此时为000E2D0D5 or eax, eax ;如果是0,表示首次加载,将执行初始化代码00E2D0D7 je short 00E2D0E000E2D0D9 push ebp ;dll 文件退出时走这里00E2D0DA jmp dword ptr [ebp+C4]00E2D0E0 inc dword ptr [ebp+C0] ;[ebp+C0]计数器变量加1此时可以按正常的思路跟踪代码寻找OEP ,由于DLL 退出时也会来到入口一次,本例演示一下DLL 退出时寻找OEP 的过程。

先在外壳的入口00E2D000处按F2键设置一个断点,按F9键数次让DLL 跑起来,DLL 装载成功后,loaddll.exe 将出现如图13.44所示的界面。

然后将如图13.44所示的窗口关闭,DLL 将被卸载,将再次中断在外壳的入口点处。

00E2D000 pushad ;退出时,会再次来到这里00E2D001 call 00E2D0C8……00E2D0C9 sub ebp, 600E2D0CF mov eax, dword ptr [ebp+C0] ;[ebp+C0]的值此时是100E2D0D5 or eax, eax00E2D0D7 je short 00E2D0E000E2D0D9 push ebp00E2D0DA jmp dword ptr [ebp+C4]图13.44 加载DLL 成功后的界面加密与解密(第三版) 326 ⏹ ⏹ ⏹ 00E2D0E0 inc dword ptr [ebp+C0] ;dll 文件退出时将走这条线路来到外壳代码的第二段,这段是解压还原、初始化原程序,为避免重复初始化,第二次进入入口点后将会跳过这些初始化代码。

003E0000 call 003E0005003E0005 pop edx003E0006 sub edx, 5003E0009 pop ebp003E000A mov eax, dword ptr [edx+359] ;计数器变量003E0010 or eax, eax003E0012 je short 003E001A003E0014 popad003E0015 jmp 0E21240 ;dll 退出时从这里进入OEP跳过外壳初始化代码后,将直接到OEP 处。

003E0283 push 0E21240003E0288 retn ;返回到OEP ,即1240h (RVA 值)此时,OEP 的RV A 值 = E21240 h -映像地址=E21240 h -E20000h = 1240h 。

技巧:一般加壳软件用同一套外壳代码处理EXE 和DLL ,因此在处理EXE 文件时,外壳里也有判断是不是多次加载的代码,找到这些跳转,强行改变,这样程序虽不能运行,但能很快定位到OEP 相关的代码。

OllyDbg 加载某些外壳的DLL 文件,不能正常地暂停在外壳的入口点,会直接运行起来。

碰到这种情况,可以将外壳的入口点改成死循环,机器码是EBFEh 。

一个示例如下:00401000 EB FE jmp short 00401000OllyDbg 加载修改后的DLL ,由于入口死循环,OllyDbg 的CPU 窗口显示白屏,按F12键让OllyDbg 暂停即可看到代码,再将入口代码恢复成原指令,又可单步调试了。

详细操作见光盘映像文件中动画演示。

13.5.2 Dump 映像文件停在OEP 后,运行LordPE ,在进程窗口中选择loaddll.exe 进程,在下方窗口中的EdrLib.dll 模块上单击右键,执行“dump full ”菜单命令,将文件抓取并保存到文件里,如图13.45所示。

图13.45 抓取DLL 内存映像1.重定位后抓取映像对于DLL 文件来说,Windows 系统没有办法保证每一次运行时提供相同的基地址。

如果DLL 基址所第13章脱壳技术⏹⏹⏹327在内存空间被占用或该区域不够大,系统会寻找另一个地址空间的区域来映射DLL,此时外壳将对DLL 执行某些重定位操作。

从图13.43得知,此时DLL被映射到内存的地址是E20000h,与EdrLib.dll默认的基址400000h不同,被重定位项所指向的地方是已经重定位了的代码数据。

如果没有被重定位,一条访问内存的语句应是这样的:00401253 833D 68AD4000 00 cmp dword ptr [40AD68], 0重定位后,直接访问内存的地址被修正了,语句变成如下:00E21253 833D 68ADE200 00 cmp dword ptr [E2AD68], 0为了保证重定位后脱壳后的程序能正常运行,必须修正基址为当前环境的值,本例就是E20000h(见图13.46)。

如果被重定位的基址小于默认基址,不可用此法。

2.重定位前抓取映像上一节修改脱壳文件的基址虽也能解决问题,但问题解决得不是很完美,如果脱壳文件的代码和加壳前一样就完美了。

为了得到与加壳前一样的文件,可以在DLL载入时跟进外壳,找到重定位的代码,跳过它,让DLL不被重定位。

加密与解密(第三版)328 ⏹ ⏹ ⏹图13.46 修正ImageBase 003E01F6 mov esi, dword ptr [ebp+299] ;取原重定位表的RVA003E01FC or esi, esi003E01FE je short 003E0233 ;判断需不需要重定位003E0200 add esi, dword ptr [ebp+351]003E0206 mov edi, dword ptr [ebp+351]在3E01FEh 这句强行跳转,不让外壳对代码进行重定位,来到OEP 后,就可直接抓取内存映像了。

本例中,由于此时代码段数据已完全恢复,也可以在此处直接抓取内存映像。

本例外壳代码较短,单步跟踪能很快找到重定位处理代码,如果外壳比较复杂,就得花点技巧找到重定位处理代码。

首先得选取一个重定位的数据,直接对内存地址操作的指令肯定需要重定位。

来到OEP 后,分析一下相关代码,选取一句会被重定位的语句。

例如:00E21253 833D 68ADE200 00 cmp dword ptr [E2AD68], 0E21255h 这个地址处的数据E2AD68h 是被重定位了的。

因此,重新加载EdrLib.dll ,等代码段解压完毕,在数据窗口对E21253h 设内存写断点,即可中断在重定位表处理的代码上。

还可用下两次内存访问断点来寻找重定位处理代码。

本实例会依次对.text 、rdata 、.data 、.rsrc 区块进行解压处理,所以,可以先在.rdata 等区块下内存访问断点,中断后,此时代码段已解压,接着再对代码段(.text 块)下内存访问断点,当外壳对代码点进行重定位操作时,即可中断。

13.5.3 重建DLL 的输入表ImportREC 能很好地支持DLL 的输入表的重建,首先,在Options 里将“Use PE Header From Disk ”默认的选项去除选中。

这是因为ImportREC 需要获得基址计算RV A 值,DLL 加载的地址不是默认基址时,从磁盘取默认基址计算会导致结果错误。

在ImportREC 下拉列表框中选择DLL 装载器的进程,此处为loaddll.exe进程。

单击“Pick DLL ”按钮,在DLL 进程列表中选择EdrLib.dll 进程(见图13.47)。

相关文档
最新文档