什么是脱壳技术?
在一些电脑软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行拿到控制权,然后完成它们保护软件的任务。就像动植物的壳一般都是在身体外面一样理所当然(但后来也出现了所谓的“壳中带籽”的壳)。由于这段程序和自然界的壳在功能上有很多相同的地方,基于命名的规则,大家就把这样的程序称为“壳”了。就像电脑病毒和自然界的病毒一样,其实都是命名上的方法罢了。从功能上抽象,软件的壳和自然界中的壳相差无几。无非是保护、隐蔽壳内的东西。而从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……。当加壳后的文件执行时,壳这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
(一)壳的概念:作者编好软件后,编译成exe可执行文件。
1.有一些版权信息需要保护起来,不想让别人随便改动如作者的姓名,即为了保护软件不被破解,通常都是采用加壳来进行保护。
2.需要把程序搞的小一点,从而方便使用。于是需要用到一些软件,它们能将exe可执行文件压缩。
3.在黑客界给木马等软件加壳脱壳以躲避杀毒软件。实现上述功能,这些软件称为加壳软件。
(二)加壳软件最常见的加壳软件ASPACK ,UPX,PEcompact 不常用的加壳软件WWPACK32;PE-PACK;PETITE NEOLITE
(三)侦测壳和软件所用编写语言的软件,因为脱壳之前要查他的壳的类型。
1.侦测壳的软件 fileinfo.exe 简称 fi.exe (侦测壳的能力极强)。
2.侦测壳和软件所用编写语言的软件language.exe(两个功能合为一体,很棒)推荐。language2000中文版(专门检测加壳类型)。
3.软件常用编写语言Delphi;VisualBasic (VB)最难破;VisualC (VC)。
(四)脱壳软件。
软件加壳是作者写完软件后,为了保护自己的代码或维护软件产权等利益所常用到的手段。目前有很多加壳工具,当然有盾,自然就有矛,只要我们收集全常用脱壳工具,那就不怕他加壳了。软件脱壳有手动脱和自动脱壳之分,下面我们先介绍自动脱壳=======================================================================
现在脱壳一般分手动和自动两种,手动就是用TRW2000、TR、SOFTICE等调试工具对付,对脱壳者有一定水平要求,涉及到很多汇编语言和软件调试方面的知识。而自动就是用专门的脱壳工具来脱,最常用某种压缩软件都有他人写的反压缩工具对应,有些压缩工具自身能解压,如UPX;有些不提供这功能,例如:ASPACK,就需要UNASPACK对付,好处是简单,缺点是版本更新了就没用了。另外脱壳就是用专门的脱壳工具来对付,最流行的是PROCDUMP v1.62,可对付目前各种压缩软件的压缩档。在这里介绍的是一些通用的方法和工具,希望对大家有帮助。我们知道文件的加密方式,就可以使用不同的工具、不同的方法进行脱壳。下面是我们常常会碰到的加壳方式及简单的脱壳措施,供大家参考:脱壳的基本原则就是单步跟踪,只能往前不能往后。脱壳的一般流程是:查壳--->寻找OEP--->Dump修复。找OEP的一般思路如下:[b][color=blue]先看壳是加密壳还是压缩壳,压缩壳相对来说容易些一般是没有异常,找到对应的popad后就能到入口。跳到入口的方式一般为:我们知道文件被一些压缩加壳软件加密,下一步我们就要分析加密软件的名称、版本。因为不同软件甚至不同版本加的壳,脱壳处理的方法都不相同。我很少写破文,最近看到一些新手常问查壳工具查不出是什麼壳?不知壳如何脱?我这裏就简单的用一个范例程式谈谈脱壳方法,算是给新手打打气。一般这种没有公开的壳不会太猛(除了hying,vcasm, jingulong等这些圈内人的壳哈)大多是自己土制的壳,有的还伪装一下致使查壳工具查不出或查出什麼Aspack,UPX的壳。碰到这种壳不用太怕认真跟踪分析一下、一般都没多大问题。一般加壳后的程式运行时大多是用各种方法AntiDebugger,其中夹杂很多花指令和垃圾指令、然后解码又是一堆AntiDebugger,可能又解码恢复IAT又是一堆AntiDebugger.....最后再跳到程式真正的OEP处。对付这种壳一般的方法是先找到OEP,再修复IAT。在壳跳到OEP的时候一般是个跨段跳转,跳转方法有很多例如:JMP XXXXXXXX, JMP [XXXXXXXX], JE [XXXXXXXX],PUSH XXXXXXXX RET, CALL XXXXXXXXX, CALL [XXXXXXXX], CALL EAX.....还有的是在SEH中直接指定EIP等等。找到这个跳转位址,然后在相应位址上设上中断点,F9运行就到达OEP处了。此时就是最好的Dump时机,修复IAT一般用ImportREC,填写好OEP的RVA先点IATAutoSearch--->再点GetImport,如果找到的API全部有效就可点Fix Dump了,如果有无效的就需要修复,先点Show Invalid,再对这些无效的API点右键,共有3个修复级别:分别是Disasm,HOOK,Trap Flag。可以一个一个试,全部API有效或只有一两个API无效时就可以点Fix Dump了,如果修复不了就只有用手工修复了。手工修复IAT的方法是:一般壳在运行的时候会恢复IAT或破坏IAT,你可以在恢复IAT后或破坏IAT之前DUMP出完好的IAT,再用16进位编辑器把完整的IAT复制到Dump出来的档中。多做做练习就不难了还是看看目的程式"轻轻松松学开车6.6",用PEiD查一下,ASPack 2.12--->Alexey Solodovnikov用OD载入,提示入口点在代码外部(以后别再问如何判断程序是否加壳了,用OD载入如果有这个提示就表示程式是加了壳的)点确定、问是否分析?点否。
=======================================================================
现在就可在005CCF08处Dump程式了,用OD的OllyDump插件(套件or外挂),Dump出程式启动ImportREC填入OEP的RVA值先点IATAutoSearch--->再点GetImport找到的API全部有效--->点Fix Dump,修复IAT指标运行程式,提示系统资料错误这是因为程式有自校验,发现自己被脱壳后拒绝运行,去除程式的自校验我就不说了.....用暴破的方法就能搞定.....。
壳软件工具下载处
全面透视Ctrl+Alt+Del中的svchost.exe机密档案
经常在一些反病毒论坛上浏览时,发现一些朋友对任务管理器中的svchost进度不甚了解,看见存在许多svchost进度就以为自己中了病毒、其实不然。svchost.exe是NT核心系统非常重要的档案,对於Win2000/XP来说不可或缺。这些svchost.exe进度提供很多系统服务,例如:rpcss服务(remote procedure call)、dmserver服务(logical disk manager)、dhcp服务(dhcp client).....等等。若要了解每个svchost进度到底提供了多少系统服务,可以在WinXP的cmd视窗中输入「tasklist /svc」指令来检视。
工作原理:
一般来说Windows系统进度分为独立进度和共享进度两种。svchost.exe档案存在於%systemroot%/system32目录下属於共享进度。随著Windows系统服务不断增多,为了节省系统资源微软把很多服务都做成共享模式,交由svchost进度来启动。但svchost进度只作为服务宿主并不能实现任何服务功能,即它只能提供条件让其他服务在这里被启动,而它自己却不能给使用者提供任何服务。这些服务是如何实现的呢?原来这些系统服务是以动态连结库(DLL)形式实现的。它们把可执行程式指向svchost,由svchost呼叫相应服务的动态连结库(DLL)来启动服务。那svchost又怎麼知道某个系统服务该呼叫哪个动态连结库(DLL)呢?这是通过系统服务在注册表中设定的参数来实现的。
具体案例:
下面以Remote Registry服务为例,来看看svchost进度是如何呼叫动态连结库(DLL)的。在WinXP中点击「開始--->執行」,輸入「services.msc」指令,会跳出服务对话框,然后开启「Remote Registry」属性对话框,可以看到Remote Registry服务的可执行档案的路径为「C:WindowsSystem32svchost -k LocalService」,这说明Remote Registry服务是依靠svchost呼叫「LocalService」参数来实现的,而参数的内容则是存放在系统注册表中的。在执行对话框中输入「regedit」后回车,开启注册表编辑器找到「HKEY_LOCAL_MACHINESystemcurrentcontrolsetservicesRemote Registry」项,再找到类型为「reg_expand_sz」的「Imagepath」項,其鍵值為「%systemroot%system32svchost -k LocalService」(这就是在服务视窗中看到的服务启动指令),另外在「parameters」次机码中有个名为「ServiceDll」的鍵,其值為「%systemroot%system32regsvc.dll」,其中「regsvc.dll」就是Remote Registry服务要使用的动态连结库(DLL)档案。这样svchost进度通过读取「Remote Registry」服务注册表讯息,就能启动该服务了。也正是因为svchost的重要性,所以病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑使用者达到感染、入侵、破坏的目的。那麼应该如何判断到底哪个是病毒进度呢?标准的svchost.exe档案应该存在於「C:Windowssystem32」目录下,如果发现该档案出现在其他目录下就要小心了。(提示:svchost.exe档案的呼叫路径可以通过「系统讯息→软体环境→正在执行任务」来检视埠。)