脱壳基础知识入门及FAQ
(完整版)常见几种脱壳方法

----------------<小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。
脱壳方法总结

脱壳方法总结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等。
怎样使用脱壳软件

怎样使用脱壳软件使用脱壳软件是指将一个已经加壳和加密的程序进行去壳操作,以便分析其内部机制和功能。
脱壳操作可以帮助安全研究人员和逆向工程师了解加壳程序的运行方式,分析其潜在的恶意行为和风险,并可能发现潜在的漏洞和安全问题。
下面将介绍一般的脱壳过程和常用的脱壳软件。
一、脱壳软件使用的一般过程:2. 选择适合的脱壳软件:根据目标程序的特征和加壳方式选择合适的脱壳工具。
常见的脱壳软件有OllyDbg、x64dbg、IDA Pro等。
3.加载加壳程序到脱壳软件中:将获取到的加壳程序文件加载到所选的脱壳软件中,通常通过点击软件的“打开”或“载入”按钮来实现。
4.设置断点:在脱壳软件中设置断点,断点可以是程序入口点、解密函数等位置,以便在程序执行过程中暂停执行,并进行相应的分析。
5.运行加壳程序:运行被加载的加壳程序,让其开始执行。
通常,加壳程序在运行时会进行解密、反调试等处理,因此需要在适当的时机暂停执行。
6.分析解密过程:当加壳程序暂停时,可以通过逆向工程和调试工具分析解密过程。
可以查看内存中解密后的内容以及解密算法的具体实现,并将其保存下来。
7.脱壳并验证:经过分析和调试,获取到解密后的内容后,可以将其保存并进行验证。
验证过程可以是检查解密后的内容和原程序的差异、运行解密后的程序以验证其功能等。
8.分析被脱壳程序:对脱壳的程序进行进一步分析,可能需要使用其他反汇编工具、动态分析工具和调试工具等进行代码阅读、数据流分析、函数调用跟踪等操作。
9.编写报告和总结:根据脱壳过程和分析结果,编写报告和总结,记录分析过程中发现的问题、风险和建议。
二、常用的脱壳软件:1. OllyDbg:这是一款非常流行的反汇编和调试工具,适用于Windows系统,可用于脱壳加壳的程序、病毒、逆向等操作。
2. x64dbg:这是一款免费的32位和64位反汇编和调试工具,提供了易于使用的界面和强大的功能,适用于Windows系统。
3. IDA Pro:这是一款高级的静态反汇编工具,可用于对加密代码进行分析和逆向工程,支持多种CPU架构和文件格式。
壳,加壳,脱壳,介绍壳的一些基本常识

壳,加壳,脱壳,介绍壳的一些基本常识免杀入门 2009-08-06 16:58 阅读7 评论0 字号:大大中中小小在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。
就像计算机病毒和自然界的病毒一样,其实都是命名上的方法罢了。
从功能上抽象,软件的壳和自然界中的壳相差无几。
无非是保护、隐蔽壳内的东西。
而从技术的角度出发,壳是一段执行于原始程序前的代码。
原始程序的代码在加壳的过程中可能被压缩、加密……。
当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
关于“壳”以及相关软件的发展历史请参阅吴先生的《一切从“壳”开始》。
(一)壳的概念作者编好软件后,编译成exe可执行文件。
1.有一些版权信息需要保护起来,不想让别人随便改动,如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2.需要把程序搞的小一点,从而方便使用。
于是,需要用到一些软件,它们能将exe可执行文件压缩,3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。
实现上述功能,这些软件称为加壳软件。
(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK ;PETITE NEOLITE (三)侦测壳和软件所用编写语言的软件因为脱壳之前要查他的壳的类型。
1.侦测壳的软件fileinfo.exe 简称fi.exe(侦测壳的能力极强)。
2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒),推荐language2000中文版(专门检测加壳类型)。
普通壳的脱壳方法和脱壳技巧

普通壳的脱壳方法和脱壳技巧脱壳是指将一个已经打包的可执行文件(通常是二进制文件)恢复为原始的、可以读取和修改的形式。
这在软件逆向工程、安全审计和病毒分析等领域都是非常常见的操作。
下面我将为你介绍普通壳的脱壳方法和脱壳技巧。
一、普通壳的脱壳方法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,是向下跳的让它实现
Armadillo脱壳知识和方法大全

般情况下,这个跳转比较大的话,就改为jmp,而跳转比较小的话,就改nop)。[注:下此断点的目的是找到Magic Jump,修改Magic Jump目的
是避开的IAT的加密。]
2、找OEP
下断点bp GetCurrentThreadId/bp CreateThread,shift+f9运行,中断后,取消断点,Alt+F9返回,单步执行,看到一个call edi之类的。F7
进入,即到oep。OD不要关!打开import--选择进程--OEP输入va--自动搜索IAT--获取输入表--显示无效函数--CUT!
(二) 双线程的标准壳
总体步骤:1、要双变单;2、处理IAT,修改Magic Jump;3、寻找OEP;4、修复
1、双变单,方法有三。
方法一:PATCH代码法
004010109D popfd
0040101161 popad
00401012- E9 8F9FA777jmp KERNEL32.OpenMutexA
点右键选择重建eip,f9运行,断下后,取消断点, ctrl+g到00401000,恢复修改。
方法二:下断点BP OpenMutexA,SHIFT+F9运行,断下后,ALT+F9返回,返回后,将返回代码下面的第一个跳转改为相反跳转,再次SHIFT+F9
,断下后,ALT+F9返回,再次将返回代码下面的第一个跳转改为相反跳转。然后再一次SHIFT+F9,取消断点,至此,同样,双进程转单进程完毕!
此法相对简单,另外适用于00401000空数据不能修改的程序。
(2)修改Magic Jump 。
下断BP GetModuleHandleA+5,运行,一般是在堆栈窗口出现ASCII "kernel32.dll"和ASCII "VirtualFree后,再运行一次,就是返回时机,中
upx脱壳指令 -回复

upx脱壳指令-回复UPX(Ultimate Packer for eXecutables)是一款非常流行的软件压缩工具,它可以将可执行文件压缩成更小的大小,以便更方便地传输和存储。
然而,有些情况下我们需要解压UPX压缩的可执行文件,这就需要使用UPX脱壳指令。
本文将一步一步回答如何使用UPX脱壳指令解压UPX压缩的可执行文件。
步骤一:获取UPX脱壳工具首先,我们需要获得一款可以进行UPX脱壳的工具。
在互联网上有很多可供选择的工具,例如UPX Toolkit、UPX Shell等。
在本文中,我们以UPX Toolkit为例进行说明。
你可以前往官方网站下载并安装UPX Toolkit (步骤二:打开UPX脱壳工具安装完成后,打开UPX Toolkit。
界面上通常会显示一些基本信息,包括UPX版本、作者等。
这些信息不仅能够帮助我们确认是否正确安装了UPX Toolkit,还能够提供我们与UPX脱壳指令相关的信息。
接下来,我们需要找到一个UPX压缩的可执行文件,然后将其拖拽到UPX Toolkit窗口中。
步骤三:执行UPX脱壳指令一旦将UPX压缩的可执行文件拖拽到UPX Toolkit窗口中,我们就可以开始执行UPX脱壳指令了。
点击“解密”或“脱壳”按钮,UPX Toolkit会自动识别压缩文件,并根据需要进行解压处理。
通常情况下,UPX Toolkit 会生成一个新的可执行文件,该文件是解压后的版本。
步骤四:检验解压结果完成解压后,我们需要检验解压结果,确保可执行文件能够正常运行。
双击解压后的可执行文件,观察是否能够正常打开并运行。
有时候,UPX压缩可能涉及一些文件依赖关系,导致解压后的文件无法正常工作。
如果出现这种情况,我们可以尝试手动解决文件依赖关系,以确保解压后的可执行文件能够顺利运行。
步骤五:保存解压结果如果解压结果符合预期,我们需要保存解压后的文件。
可以选择将其命名为原始文件名加上一个后缀,以示区别。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
脱壳基础知识入门及FAQ标题:脱壳基础知识入门及FAQ作者:kanxue时间: 2006-01-14 17:20链接: /showthread.php?t=20366声明:本篇文章个人用户可以免费的收藏、参考,但是谢绝任何商业网站及传统媒体(如出版物)摘编转载!现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。
越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。
除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。
壳发展到今天,强度越来越高了,将许多人挡在门外,使得大家望壳兴叹。
另外,论坛现在两极分化比较严重,高手讨论的脱壳技术新手看不懂,很多人想学脱壳,但看到壳这么难,只好放弃了,造成新手与高手间一个断档,为了鼓励更多新人加入脱壳的行列,很有必要将壳有关知识总结一下。
主页提供的教学确实有点过时了,己到非更新不可了。
为此,整理这篇脱壳入门指导的文章,方便脱壳新手们学习。
相对于密码学算法,脱壳并不难,只要肯花时间,短期内还是比较容易取得成绩的。
但是,不建议那些加解密刚入门,调试一个普通软件都费劲的朋友来脱壳。
至少要等你有一定的调试技能再来学脱壳。
也就是说必须掌握这篇文章所讲的东西:新手入门必读(FAQ)在本篇文章没完成前,不欢迎转载!我会利用业余时间不断更新中,为保持文章连续性,因此锁帖,如学习过程中有问题请开新帖大家一起交流。
这篇入门教学将长期置顶,以代替原来脱壳版块的FAQ,收集一些常见的脱壳问题。
希望更多的朋友一起参与进来,如果想参与进来请告诉我撰写的主题,我会开通你跟此帖的权限。
注:本人水平有限,因此这篇文章只是负责将新手领进门,更深入技术的请参考论坛中的精华文章。
代码:第一课PE格式.................2楼第二课SEH技术................3楼第三课认识壳.................4楼第四课常见压缩壳与加密壳......5楼第五课文件类型分析............6楼第六课寻找OEP................7楼第七课Dump内存映像............9楼第八课重建输入表.............10楼第九课手动确定IAT的地址与大小.11楼第十课DLL文件脱壳........12楼第十一课优化与自校验去除........12楼第一课PE格式要想学脱壳,第一步就得掌握PE格式,PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。
Microsoft Visual C++提供的WINNT.H里有PE数据结构的完整定义。
推荐文档:ah007翻译的“PE文件格式”1.9版qduwg翻译的PE文件格式Iczelion's 的PE文件格式微软官方提供的PE文档(英文)(Revision 8.1- March 27, 2008)微软官方提供的PE文档(Revision 8.1)(zhzhtst翻译成中文)探索PE文件内幕—— Win32可移植可执行文件格式之旅(zhzhtst翻译)深入剖析Win32可移植可执行文件格式(zhzhtst翻译)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操作系统的一种系统机制,与特定的程序设计语言无关。
外壳程序里大量地使用了SEH,如果不了解SEH,将会使你跟踪十分困难。
SEH in ASM 研究(一)by humeSEH in ASM 研究(二)by humeStructured Exception Handling加密与解密二版菜鸟学习笔记(2) - SEH 结构化异常处理by ytcswb由于Ollydbg对SEH处理异常灵活,因此脱壳用Ollydbg会大大提高效率。
附CONTEXT结构环境:代码:typedef struct _CONTEXT {/*000*/ DWORD ContextFlags;/*004*/ DWORD Dr0;/*008*/ DWORD Dr1;/*00C*/ DWORD Dr2;/*010*/ DWORD Dr3;/*014*/ DWORD Dr6;/*018*/ DWORD Dr7;/*01C*/ FLOATING_SA VE_AREA FloatSave;/*08C*/ DWORD SegGs;/*090*/ DWORD SegFs;/*094*/ DWORD SegEs;/*098*/ DWORD SegDs;/*09C*/ DWORD Edi;/*0A0*/ DWORD Esi;/*0A4*/ DWORD Ebx;/*0A8*/ DWORD Edx;/*0AC*/ DWORD Ecx;/*0B0*/ DWORD Eax;/*0B4*/ DWORD Ebp;/*0B8*/ DWORD Eip;/*0BC*/ DWORD SegCs;/*0C0*/ DWORD EFlags;/*0C4*/ DWORD Esp;/*0C8*/ DWORD SegSs;/*0CC*/ BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];/*2CC*/ } CONTEXT;第三课认识壳1.什么是壳?在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,就把这样的程序称为“壳”了。
推荐文档:一切从“壳”开始描述壳的示意图:2. 壳的加载过程这里谈的加壳工具不是WinZIP、WinRAR等数据压缩工具,而是谈压缩可执行文件EXE 或DLL的工具。
加壳过的EXE文件是可执行文件,它可以同正常的EXE文件一样执行。
用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。
壳和病毒在某些方面比较类似,都需要比原程序代码更早的获得控制权。
壳修改了原程序的执行文件的组织结构,从而能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行。
这里简单说说一般壳的装载过程。
(参考了Ljtt以前写过的一篇文章)1)获取壳自己所需要使用的API地址如果用PE编辑工具查看加壳后的文件,会发现未加壳的文件和加壳后的文件的输入表不一样,加壳后的输入表一般所引入的DLL和API函数很少,甚至只有Kernel32.dll以及GetProcAddress这个API函数。
壳实际上还需要其他的API函数来完成它的工作,为了隐藏这些API,它一般只在壳的代码中用显式链接方式动态加载这些API函数:3个脱壳相关的重要函数介绍2)解密原程序的各个区块(Section)的数据壳出于保护原程序代码和数据的目的,一般都会加密原程序文件的各个区块。
在程序执行时外壳将会对这些区块数据解密,以让程序能正常运行。
壳一般按区块加密的,那么在解密时也按区块解密,并且把解密的区块数据按照区块的定义放在合适的内存位置。
如果加壳时用到了压缩技术,那么在解密之前还有一道工序,当然是解压缩。
这也是一些壳的特色之一,比如说原来的程序文件未加壳时1~2M大小,加壳后反而只有几百K。
3)重定位文件执行时将被映像到指定内存地址中,这个初始内存地址称为基地址(ImageBase)。
当然这只是程序文件中声明的,程序运行时能够保证系统一定满足其要求吗?对于EXE的程序文件来说,Windows系统会尽量满足。
例如某EXE文件的基地址为0x400000,而运行时Windows系统提供给程序的基地址也同样是0x400000。
在这种情况下就不需要进行地址“重定位”了。
由于不需要对EXE文件进行“重定位”,所以加壳软件把原程序文件中用于保存重定位信息的区块干脆也删除了,这样使得加壳后的文件更加小巧。
有些工具提供“Wipe Reloc”的功能,其实就是这个作用。
不过对于DLL的动态链接库文件来说,Windows系统没有办法保证每一次DLL运行时提供相同的基地址。
这样“重定位”就很重要了,此时壳中也需要提供进行“重定位”的代码,否则原程序中的代码是无法正常运行起来的。
从这点来说,加壳的DLL比加壳的EXE 更难修正。
4)HOOK-API程序文件中的输入表的作用是让Windows系统在程序运行时提供API的实际地址给程序使用。
在程序的第一行代码执行之前,Windows系统就完成了这个工作。
壳一般都修改了原程序文件的输入表,然后自己模仿Windows系统的工作来填充输入表中相关的数据。
在填充过程中,外壳就可填充HOOK-API的代码的地址,这样就可间接地获得程序的控制权。
5)跳转到程序原入口点(OEP)从这个时候起壳就把控制权交还给原程序了,一般的壳在这里会有明显的一个“分界线”。
但现在的猛壳己没这界限了,壳里有肉,肉里有壳。
3. 压缩引擎各类加壳软件,其压缩算法一般不是自己实现的,大多是调用其他的压缩引擎。
目前压缩引擎种类比较多,不同的压缩引擎有不同特点,如一些对图像压缩效果好,一些对数据压缩效果好。
而加壳软件选择压缩引擎有一个特点,在保证压缩比的条件下,压缩速度慢些关系不是太大,但解压速度一定要快,这样加了壳的EXE文件运行起来速度才不会受太大的影响。
例如下面几个压缩引擎就能满足这要求:1. aPLib压缩引擎/,这个库对于低于64K的文件压缩效果较好,速度较快。
2. JCALG1压缩引擎,相对于aPlib,JCALG1对于大文件效果好些。
3. LZMA压缩引擎/zh-cn/sdk.html,LZMA 是7-Zip 程序中7z 格式的默认压缩算法,压缩率很高。
第四课常见压缩壳与加密壳加壳软件按照其加壳目的和作用,可分为两类:一是压缩(Packers),二是保护(Protectors)。
压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。