软件加壳脱壳技术教程
- 格式:doc
- 大小:303.50 KB
- 文档页数:38
加壳与脱壳的应用与实现一、加壳 (2)1.什么是壳 (2)2.加壳原因 (2)3.壳的加载过程 (3)4.压缩引擎 (5)5.常见的加壳工具 (6)a.常用压缩壳介绍 (6)b.加密保护壳介绍 (7)二、脱壳 (10)1.侦壳 (10)2.脱壳 (13)a.查找程序的真正入口点(OEP) (13)b.抓取内存映像文件 (15)c.输入表重建 (15)附:视频“加壳与脱壳(软件)”和“手动脱壳” (17)加壳与脱壳一、加壳1.什么是壳在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
图1.12.加壳原因就把这样的程序称为“壳”了。
作者编好软件后,编译成exe可执行文件。
1)有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2)需要把程序搞的小一点,从而方便使用。
于是,需要用到一些软件,它们能将exe可执行文件压缩。
3)在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
3.壳的加载过程1)获取壳自己所需要使用的API地址如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API 函数。
壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数2)解密原程序的各个区块(Section)的数据壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。
在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。
壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。
软件加壳技术及实现软件加壳是一种常见的软件保护技术,通过将原始的可执行文件进行加密和封装,增加软件的安全性和难度,提高软件的抵抗逆向工程、防止破解的能力。
下面将介绍软件加壳技术的原理及实现方法。
1.软件加壳原理软件加壳的基本原理是将原始可执行文件进行加密处理,生成一个加密后的壳程序,再将原始可执行文件嵌入到壳程序中,并根据可执行文件的特征信息进行相应的处理和解密,最终执行原始程序。
具体的加壳流程如下:(1)加密原始可执行文件:使用对称加密算法(如AES、DES等)对原始可执行文件进行加密处理,使其不可读。
(2)生成壳程序:编写一个壳程序,包括解密原始可执行文件、加载和执行原始程序等功能。
壳程序本身一般是已经加密的,以防止被分析破解。
(3)将原始可执行文件嵌入到壳程序中:将加密后的原始可执行文件隐藏在壳程序中,一般是作为一个资源或数据块存在。
(4)运行壳程序:用户双击运行壳程序,壳程序首先进行解密处理,获取原始可执行文件,然后进行加载和执行。
2.软件加壳实现方法(1)静态加壳:在编译链接阶段对可执行文件进行加壳处理。
静态加壳可以通过修改可执行文件的文件头信息和重定位表等方式实现。
(2)动态加壳:在运行时对可执行文件进行加壳处理。
动态加壳使用的是运行时加载原始程序的方式,可以提高软件的安全性,但也会增加运行的开销。
3.加壳脱壳工具目前市面上有很多成熟的加壳脱壳工具可供使用,如UPX、ASPack、FSG等。
这些工具可以方便地对可执行文件进行加壳和脱壳操作,但也容易被黑客用来破解软件。
总结:软件加壳技术是一种常用的软件保护手段,通过加密和封装原始可执行文件,增加软件的安全性和防破解能力。
加壳脱壳工具能够方便地实现对可执行文件的加壳和脱壳操作,但需要注意合理的加密算法和技术选型,以提高软件的安全性。
怎样使用脱壳软件使用脱壳软件是指将一个已经加壳和加密的程序进行去壳操作,以便分析其内部机制和功能。
脱壳操作可以帮助安全研究人员和逆向工程师了解加壳程序的运行方式,分析其潜在的恶意行为和风险,并可能发现潜在的漏洞和安全问题。
下面将介绍一般的脱壳过程和常用的脱壳软件。
一、脱壳软件使用的一般过程:2. 选择适合的脱壳软件:根据目标程序的特征和加壳方式选择合适的脱壳工具。
常见的脱壳软件有OllyDbg、x64dbg、IDA Pro等。
3.加载加壳程序到脱壳软件中:将获取到的加壳程序文件加载到所选的脱壳软件中,通常通过点击软件的“打开”或“载入”按钮来实现。
4.设置断点:在脱壳软件中设置断点,断点可以是程序入口点、解密函数等位置,以便在程序执行过程中暂停执行,并进行相应的分析。
5.运行加壳程序:运行被加载的加壳程序,让其开始执行。
通常,加壳程序在运行时会进行解密、反调试等处理,因此需要在适当的时机暂停执行。
6.分析解密过程:当加壳程序暂停时,可以通过逆向工程和调试工具分析解密过程。
可以查看内存中解密后的内容以及解密算法的具体实现,并将其保存下来。
7.脱壳并验证:经过分析和调试,获取到解密后的内容后,可以将其保存并进行验证。
验证过程可以是检查解密后的内容和原程序的差异、运行解密后的程序以验证其功能等。
8.分析被脱壳程序:对脱壳的程序进行进一步分析,可能需要使用其他反汇编工具、动态分析工具和调试工具等进行代码阅读、数据流分析、函数调用跟踪等操作。
9.编写报告和总结:根据脱壳过程和分析结果,编写报告和总结,记录分析过程中发现的问题、风险和建议。
二、常用的脱壳软件:1. OllyDbg:这是一款非常流行的反汇编和调试工具,适用于Windows系统,可用于脱壳加壳的程序、病毒、逆向等操作。
2. x64dbg:这是一款免费的32位和64位反汇编和调试工具,提供了易于使用的界面和强大的功能,适用于Windows系统。
3. IDA Pro:这是一款高级的静态反汇编工具,可用于对加密代码进行分析和逆向工程,支持多种CPU架构和文件格式。
介绍下加壳识别壳破壳的方法加壳是计算机软件中的一种保护措施,用于保护软件免受逆向工程和盗版侵害。
加壳通过在原始程序上添加一层原生或自定义的壳,在运行时加固被保护的代码,隐藏关键功能和算法,对软件进行加密和压缩等操作,使其更加难以被逆向工程分析和破解。
因此,加壳成为了软件开发者和软件厂商保护自己知识产权和商业模式的重要手段。
然而,随着逆向工程技术的发展,破解加壳技术也变得越来越成熟。
破壳是指绕过加壳保护,还原被保护的软件的原始二进制代码。
下面将介绍几种常见的加壳识别壳破壳的方法。
一、静态分析法静态分析法是在不运行加壳程序的情况下对其进行逆向分析的方法。
通过分析加壳程序的头部信息、导入导出表、节表信息、加壳部分的代码特征等,可以判断出是否存在加壳和使用的壳类型。
然后,借助逆向工程工具(如IDA Pro、OllyDbg等),对加壳程序进行反汇编和调试,还原出被壳保护的原始软件代码。
二、动态调试法动态调试法是通过运行加壳程序,在运行时动态调试其行为,获取关键信息,帮助识别壳的类型和破解壳。
通过使用调试工具,如OllyDbg和x64dbg等,可以在软件运行过程中观察和修改寄存器、内存、堆栈等信息,找到关键的跳转指令,尝试绕过壳的保护和加密操作。
三、壳特征识别法壳特征识别法是通过分析加壳程序的一些特征,如一些特殊字符串、特定函数的调用方式、调用API的顺序等,来识别壳的类型。
根据壳的特征,可以编写脚本或使用专门的壳特征识别工具,从二进制代码中特定的特征,找到壳并进行破解。
四、动态调用链分析法动态调用链分析法是通过分析加壳程序的动态调用链,了解程序的运行过程和保护措施。
通过传递参数、查找调用、分析返回值等方式,逐步跟踪加壳程序的执行流程,找到关键的调用和逻辑判断,破解保护措施,还原原始代码。
虽然破壳技术不断发展,加壳技术也不断进化,但是通过以上方法可以部分或完全破解绝大多数的软件加壳。
要保护软件不被破解,开发者需要采取更加综合和复杂的保护措施,如代码混淆、虚拟机保护、反调试等,提高软件的保护级别,增加破壳难度。
几种用OD脱壳方法OD是反编译软件的一种,可以将可执行文件转换为可读的源代码。
脱壳是指从已经加密或保护的软件中提取出原始的未加密或未保护的代码。
下面是几种常见的OD脱壳方法:1.静态分析法:静态分析是指对二进制文件进行分析,了解其结构、函数调用和控制流程等信息。
通过对逆向工程的分析,可以分析出加密算法和解密函数的位置。
使用静态分析法脱壳的主要步骤如下:-打开OD软件,将加密的可执行文件加载到OD中。
- 使用各种OD工具,如IDA Pro,OllyDbg等,显示可执行文件的汇编代码。
-通过分析代码和调试程序,找到加密算法和解密函数的位置。
-根据找到的位置,修改程序的执行流程,跳过解密函数,使得程序直接执行解密后的代码。
2.动态调试法:动态调试是指在运行时对程序进行调试和分析。
使用动态调试法脱壳的主要步骤如下:-打开OD软件,将加密的可执行文件加载到OD中。
- 使用动态调试工具,如OllyDbg或GDB等,在程序执行期间跟踪和记录函数调用和内存访问。
-通过分析函数调用和内存访问,找到加密算法和解密函数的位置。
-在找到的位置上下断点,执行程序并使用OD工具查看解密后的代码。
3.内存镜像法:内存镜像法是指通过将程序加载到内存中,并对内存进行镜像和分析来脱壳。
使用内存镜像法脱壳的主要步骤如下:-运行加密的可执行文件。
- 使用内存镜像工具,如DumpBin或WinDBG等,将程序的内存镜像保存到磁盘上。
-使用OD软件加载内存镜像文件。
-通过分析内存镜像文件,找到加密算法和解密函数的位置。
-修改程序的执行流程,跳过解密函数,使得程序直接执行解密后的代码。
这些方法都可以用于将加密的可执行文件转换为可读的源代码,从而进行进一步的分析和修改。
脱壳过程需要进行深入的逆向工程和对程序的理解,因此需要具备一定的技术和知识。
此外,需要注意的是,脱壳过程可能涉及到破解和侵犯版权的行为,应遵守法律规定,并仅限于安全研究和个人学习的目的使用。
upx脱壳方法-回复UPX(Ultimate Packer for eXecutables)是一种广泛使用的可执行文件压缩器和脱壳器。
它采用了先进的压缩算法,能够有效地减小可执行文件的体积,同时保持文件的可执行性。
然而,有时我们需要对UPX压缩过的可执行文件进行脱壳操作,以便进行进一步的分析或修改。
本文将一步一步介绍UPX脱壳的方法。
第一步:准备工作在开始UPX脱壳之前,我们需要先准备一些工具。
首先,我们需要下载并安装IDA Pro。
IDA Pro是一款非常强大的逆向工程软件,可以帮助我们分析和修改可执行文件。
其次,我们还需要下载并安装UPX工具集,以便进行脱壳操作。
最后,我们需要找到一个已经被UPX压缩过的可执行文件,作为我们的实验对象。
第二步:分析可执行文件打开IDA Pro,并导入我们选定的UPX压缩文件。
通过IDA Pro的静态分析功能,我们可以获取有关该文件的一些基本信息,例如文件的入口点地址和函数列表等。
这将有助于我们在后续操作中准确定位需要脱壳的代码。
第三步:寻找脱壳代码在IDA Pro中,我们需要找到UPX的脱壳代码。
UPX脱壳的主要原理是在运行时将压缩过的可执行文件还原为原始的可执行文件。
因此,UPX脱壳代码的位置通常在程序的入口点之后。
我们可以通过在IDA Pro中分析可执行文件的反汇编代码,寻找与UPX脱壳相关的代码段或函数。
这些代码段或函数通常包含有关文件解压缩和内存映射的指令。
第四步:研究脱壳代码找到UPX脱壳代码后,我们需要仔细研究这段代码的逻辑和功能。
通常,UPX脱壳代码会包含一系列指令,用于解压缩数据并将其映射到内存中。
通过对脱壳代码的分析,我们可以了解到UPX是如何解压缩和还原可执行文件的。
第五步:修改脱壳代码在研究了脱壳代码后,我们可以尝试对其进行修改,以实现我们的需求。
可能的修改包括改变解压缩的方式、修改解压缩后的文件内容等。
通过在IDA Pro中编辑脱壳代码,我们可以实现对UPX脱壳过程的定制。
如何将EXE安装文件脱壳和破解
首先,我要强调,破解软件和脱壳软件违反了软件版权法,这是非法
行为。
那么,如何脱壳和破解EXE安装文件呢?
1.脱壳软件
脱壳是指将被打包、加密或保护的EXE文件还原为原始的可执行文件。
脱壳软件通常需要一些专业的技术知识,并且不同软件的脱壳方法也会有
所不同。
下面是一些常见的脱壳方法:
-调试器:将脱壳软件用调试器打开,断点在加载代码之前的位置上,使得在加载期间可以捕捉到呈现在内存中的文件。
- 静态分析:通过静态分析工具,如IDA Pro,分析文件的指令、数
据和控制流,找出加密和保护技术,并获取原始的可执行文件。
2.破解软件
破解软件是指破解免注册版或试用期软件的功能限制,以获得免费使
用所需功能的方法。
以下是一些常见的破解方法:
-序列号生成器:破解序列号的软件,通过生成有效的序列号来解锁
软件的功能限制。
-反向工程:通过逆向工程将软件中的保护措施绕过或关闭,以便在
未注册的情况下使用软件的全部功能。
- Patching:通过修改软件的二进制代码,删除或绕过软件的注册验证,以实现破解的目的。
无论您是否打算进行此类操作,我们鼓励您始终遵守版权法。
许多软
件公司对未经授权的破解行为采取法律行动,并对侵权者提起诉讼。
同时,使用未经授权的破解软件可能会导致您的计算机感染恶意软件或病毒。
因此,我们建议您遵守软件许可协议,并根据开发商提供的合法方式
获得软件的完整功能。
如果您希望获得一款软件的全部功能,可以考虑购
买正版软件或使用免费的替代品。
加壳免杀与脱壳反编译图文教程时间:2009-09-14 10:24来源:安全中国第一、什么是免杀?免杀,也就是反病毒(Anti Virus)与反间谍(Anti Spyware)的对立面,英文为Anti Anti- Virus(简写Vi rus AV),逐字翻译为“反-反病毒”,我们可以翻译为“反杀毒技术”。
单从汉语“免杀”的字面意思来理解,可以将其看为一种能使病毒木马免于被杀毒软件查杀的技术。
但是不得不客观地说,免杀技术的涉猎面非常广,您可以由此轻松转型为反汇编、逆向工程甚至系统漏洞的发掘等其他顶级黑客技术,由此可见免杀并不简单。
第二、什么是加壳?加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段. 其实是利用特殊的算法,对EXE、D LL文件里的资源进行压缩、加密。
类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。
它们附加在原程序上通过Windows加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。
加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译.第三、什么是脱壳?脱壳是站在加壳的对立面的,如果说加壳是变化,脱壳就是还原.第四、什么是反编译?高级语言源程序经过编译变成可执行文件,反编译就是逆过程。
但是通常不能把可执行文件变成高级语言源代码,只能转换成汇编程序。
计算机软件反向工程(Reversepengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,作为自己开发软件时的参考,或者直接用于自己的软件产品中。
浅谈壳的加载步骤及手动脱壳。
现在玩脱壳的人越来越多了,不知道是好事还是坏事。
现在玩手动脱壳一般三样工具足矣:loader,ImpREC,TRW2000。
也许是这三剑客的功能太强大,因此手动脱壳也变得象流水化作业。
大致以下几个步骤就搞定了。
1)loader找OEP.(OEP就是程序原来的入口点,即Original Entry Point)2)TRW2000来Dump。
也就是把内存映象保存为文件。
3)ImpREC修补Import Table.(也就是修补程序原来的API地址)不过如果这样,那么我想手动脱壳也没有必要了,因为更先进的工具如各种脱壳机会更快捷有效。
既然是手动脱壳,当然想对壳有所了解,那么让我们看看壳是如何工作的吧。
壳和病毒从某些方面比较类似,都需要比原程序代码更早的获得控制权,这是通过在原程序的代码执行前加入自己的一段代码来实现的。
注意我说的这是执行时的情况。
对于文件中的情况,就是壳修改了原程序的执行文件的组织结构,从而达到壳的代码能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行,所以从这点上说,壳和病毒很类似。
现在的执行文件一般都是PE格式,如果你对PE格式一无所知,最好还是去看一看相关的资料。
我没有那么地道的专业知识,也怕误人子弟。
相关名词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。
一、概论壳出于程序作者想对程序资源压缩、注册保护的目的,把壳分为压缩壳和加密壳两种常见压缩壳:UPX、ASpcak、Telite、PElite、Nspack ...常见加密壳:Armadillo ASProtect ACProtect EPE SVKP ...顾名思义,压缩壳只是为了减小程序体积对资源进行压缩,加密壳是程序输入表等等进行加密保护。
当然加密壳的保护能力要强得多!二、常见脱壳方法预备知识1.PUSHAD (压栈)代表程序的入口点,2.POPAD (出栈)代表程序的出口点,与PUSHAD想对应,一般找到这个OEP就在附近3.OEP:程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP/FOEP),只要我们找到程序真正的OEP,就可以立刻脱壳。
如何分辨加密壳和压缩壳,通用特点,OD载入时有入口警告或询问是压缩程序吗?普通压缩壳OD调试时候没有异常,加密壳全部有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。
找OEP的一般思路如下:先看壳是加密壳还是压缩壳,压缩壳相对来说容易些,一般是没有异常。
外壳解压代码起始点如果是pushfdpushad跟踪时如果有发现popadpopfd对应有些壳只有pushad和popad相对应附近还有retnjmp等指令,发生跨断跳跃一般就到了OEP处。
当然也有其他的,如 je OEP等等,一般都是段之间的大跳转,OD的反汇编窗口里都是同一个段的内容,所以更好区别是否是段间跳转。
找Oep时注意两点。
1、单步往前走,不要回头。
2、观察。
注意poshad、poshfd,popad、popfd等,和外壳代码处对应,注意地址发生大的变化。
单步跟踪什么时候F8走,F7,F4步过?这里我说说关于F8(Step Over)和F7(Step in)的一般方法,粗跟的时候一般都是常用F8走,但是有些call是变形的Jmp,此时就需要F7代过,区别是否是变形Jmp的一个简单方法是比较call的目标地址和当前地址,如果两者离的很近,一般就是变形Jmp了,用F7走。