脱壳入门初级教学(第四课 常见压缩壳与加密壳)

转自:http://bestmk.cn/thread-491.htm

加壳软件按照其加壳目的和作用,可分为两类:一是压缩(Packers),二是保护(Protectors)。压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。另一类是保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASProtect、Armadillo、EXECryptor等。随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。

    目前流行的一些壳可以参考这里:http://www.pediy.com/tools/packers.htm 

1.常用压缩壳介绍   

1). ASPacK   
主页:http://www.aspack.com/ 
   ASPack是款Win32可执行文件压缩软件,可压缩Windows 32位可执行文件(.exe)以及库文件(.dll、.ocx),文件压缩比率高达40%~70%。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第1张图片 

2). UPX
主页:http://upx.sourceforge.net/ 
   UPX是一个以命令行方式操作的可执行文件经典免费压缩程序,压缩算法自己实现,速度极快。(开源)

3). PECompact
主页:http://www.bitsum.com/
   PECompact同样也是一款能压缩可执行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同类软件,PECompact提供了多种压缩项目的选择,用户可以根据需要确定哪些内部资源需要压缩处理。同时,该软件还提供了加解密的插件接口功能。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第2张图片 

2.加密保护壳介绍   

  为了保护自己的软件不轻易被他人“借鉴”,有必要对软件进行一些加密保护,而这方面目前己有成熟的专业加密软件可选择。但不要太依赖壳的保护,大多数壳是可以被攻破的,还是在自身保护上下些功夫。加密软件比较多,但在强度与兼容性上做的好的并不多,这里向大家介绍几款常见的。

 现在壳的发展一个趋势就是虚拟机保护,利用虚拟机保护后,能大大提高强度,因此建议尽可能使用此类技术保护软件。如Themida ,WinLicense,EXECryptor等壳带有虚拟机保护功能,因此得用好其SDK。

1). ASProtect
主页:http://www.aspack.com/ 
   ASProtect是一款非常强大的Windows 32位保护工具,这4、5年来,其一直在更新进步。其开发者是俄国人Alexey Solodovnikov。它拥有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施。它使用Blowfish、Twofish、TEA等强劲的加密算法,还用RSA1024作为注册密钥生成器。它还通过API钩子(API hooks,包括Import hooks(GPA hook)和Export hooks)与加壳的程序进行通信。甚至用到了多态变形引擎(Polymorphic Engine)。反Apihook代码(Anti-Apihook Code)和BPE32的多态变形引擎(BPE32的Polymorphic Engine)。并且ASProtect为软件开发人员提供SDK,实现加密程序内外结合。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第3张图片 

   ASProtect SKE系列己采用了部分虚拟机技术,主要是在Protect Original EntryPoint与SDK上。保护过程中建议大量里使用SDK, SDK使用请参考其帮助文档,在使用时注意SDK不要嵌套,并且同一组标签用在同一个子程序段里。ASProtect使用相当的简单,打开被保护的EXE/DLL文件后,选上保护的选项。再单击菜单Modes,单击Add Mode按钮,将Is this Mode Avtive选上,最后,单击Protection标签,对软件进行保护即可。ASProtect加壳过程中也可外挂用户自己写的DLL文件,方法是在上图中的External Options选项加上目标DLL即可。这样,用户可以在DLL加入自己的反跟踪代码,以提高软件的反跟踪能力。

强度评介:由于ASProtect名气太大,研究它的人很多,因此很容易被脱壳,不推荐使用。 

2). Armadillo加密壳

   Armadillo也称穿山甲,是一款应用面较广的壳。可以运用各种手段来保护你的软件,同时也可以为软件加上种种限制,包括时间、次数,启动画面等等!很多商用软件采用其加壳。Armadillo对外发行时有Public,Custom两个版本。Public是公开演示的版本,Custom是注册用户拿到的版本。只有Custom才有完整的功能,Public版有功能限制,没什么强度,不建议采用。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第4张图片 

强度评介:Armadillo中比较强大的保护选项是Nanomites保护(即CC保护),用的好能提高强度,其他选项没什么强度。 

3). EXECryptor加密壳

    EXECryptor也是一款猛壳,可能由于兼容性等原因,采用其保护的商业软件不是太多。这款壳的特点是Anti-Debug做的比较隐蔽,另外就是采用了虚拟机保护一些关键代码。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第5张图片 

强度评介:用好EXECryptor 虚拟机保护功能,将关键敏感代码用虚拟机保护起来,能提高强度。EXECryptor 壳能脱的人很多,但对付其虚拟机代码的人不多。 

4). Themida加密壳

    Themida是Oreans的一款商业壳,官方链接:www.oreans.com。Themida 1.1以前版本带驱动,稳定性有些影响。Themida最大特点就是其虚拟机保护技术,因此在程序中擅用SDK,将关键的代码让Themida用虚拟机保护起来。Themida最大的缺点就是生成的软件有些大。WinLicense这款壳和Themida是同一公司的一个系列产品,WinLicense主要多了一个协议,可以设定使用时间,运行次数等功能,两者核心保护是一样的。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第6张图片 

强度评介:用好其虚拟机保护功能,将关键敏感代码用虚拟机保护起来,能提高强度。 

5). VMProtect

  VMProtect是一款纯虚拟机保护软件,官方链接:www.VMProtect.ru。它是当前最强的虚拟机保护软件,经VMProtect处理过的代码,至今还没有人公开宣称能还原。

  但也有缺点,就是会影响程序速度,因此在一些对速度要求很高的场合就不适合用了。VMProtect 1.22.3之前是免费版,可以支持EXE,DLL等文件。更高版本需要购买,其支持驱动的保护。现在流行的做法,先用VMProtect将你的核心代码处理一下,再选用一款兼容性好的壳保护。

(1).关键代码自己定位
 VMProtect并没有提供使用说明,必须告诉VMProtect你要加密的代码具体地址,这对使用者有一定的要求,至少要懂一些跟踪技术,可以用调试器,如OllyDbg跟踪到程序需要保护的地址,然后添加地址到VMProtect。
在这以一个记事本程序为例来演示一下使用方法。

 运行VMProtect后,打开NOTEPAD.EXE文件。单击Dump标签,输入要加密的起始地址,光标来到要加密代码起始地址后,点击菜单“project/new procedure”,会出现一个新的项目,如下图。

脱壳入门初级教学(第四课 常见压缩壳与加密壳)_第7张图片 

需要处理其他地址时,请依次操作。

注意事项:
1.用VMProtect处理,请多测试,如果不稳定,请调整被保护代码的范围。
2.VMProtect对双线程支持不是太好,请同一次仅处理一个线程内的代码。
 

(2).用SDK标记代码

 VMProtect v1.2以上支持SDK了,可以编程时插入一个标记,然后在加密时,VMProtect会认出这些标记,并在有标记的地方进行保护。在程序源码中,用这对标签将一些核心代码包含,编译成EXE文件。然后用VMProtect打开EXE,单击“Project”菜单下的“New procedure”或者单击工具栏中的“New procedure”按钮,在弹出的添加地址窗口中会自动将SDK定义代码的地址填上。然后在VMProtect的“Options”窗口中设置相应的选项,最后单击工具栏中的“Compilation (F9)”按钮,便可对目标软件进行保护。经VMProtect处理过的软件,可以继续用Asprotect, Themida等加壳软件进一步保护。

 VMProtect是当前最强的虚拟机保护软件,经过VMProtect处理的软件基本是没法分析原程序思路的,关键是用好,一定要将程序关键代码进行处理。另外,经虚拟机处理代码效率会降低,因此一些对效率要求比较高的代码就不要用VMProtect进行处理。

Delphi 中的标记模式

1
2
3
4
5
6
7
asm                             
   db $EB,$10, 'VMProtect begin' ,0        //标记开始处.
end;
//想保护的程序代码
asm
   db $EB,$0E, 'VMProtect end' ,0          //标记结束处.
end;

VC的VMProtect的宏 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#define  VMBEGIN 
  __asm     //标记开始处.
     {  
       _emit 0xEB
       _emit 0x10  
       _emit 0x56  
       _emit 0x4D  
       _emit 0x50 
       _emit 0x72 
       _emit 0x6F 
       _emit 0x74 
       _emit 0x65 
       _emit 0x63 
       _emit 0x74 
       _emit 0x20 
       _emit 0x62 
       _emit 0x65 
       _emit 0x67 
       _emit 0x69 
       _emit 0x6E 
       _emit 0x00
     }
     //想保护的程序代码
  
  #define  VMEND
     __asm   //标记结束处.
     {  
       _emit 0xEB
       _emit 0x0E  
       _emit 0x56   
       _emit 0x4D   
       _emit 0x50 
       _emit 0x72 
       _emit 0x6F 
       _emit 0x74 
       _emit 0x65 
       _emit 0x63 
       _emit 0x74 
       _emit 0x20 
       _emit 0x65 
       _emit 0x6E 
       _emit 0x64 
       _emit 0x00
     }

VMProtect使用相关文档:
VMProtect配合PESpin的SDK加密的另一方法   作者:acafeel
VMProtect SDK+ASProtect SDK混合编程[代码演示] 作者:Anskya 
VMProtect 与 ASProtect 在VC中的SDK编程 作者:glucose

3.小结   

更多与壳有关的描述参考:
   纵横间谁能相抗―论壳与加壳技术  作者:forgot

常见加密壳官方站点 

ASProtect           http://www.aspack.com/ 
ACProtect           http://www.ultraprotect.com/ 
Armadillo           http://www.siliconrealms.com 
EXECryptor          http://www.strongbit.com/ 
Obsidium            http://www.obsidium.de/ 
PESpin              http://pespin.w.interia.pl/ 
VMProtect           http://www.polytech.ural.ru/ 
Xtreme-Protector    http://www.oreans.com/xprotector/ 
Themida/WinLicense  http://www.oreans.com 

本站的工具栏目:    http://www.pediy.com/tools/packers.htm


你可能感兴趣的:(VC++,加固与脱壳)