转自: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%。

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

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

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,实现加密程序内外结合。

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版有功能限制,没什么强度,不建议采用。

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

3). EXECryptor加密壳

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

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

4). Themida加密壳

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

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

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”,会出现一个新的项目,如下图。

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

注意事项:
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

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

  1. 蘑菇云【行空板Python入门教程】第四课:模拟星空

    模拟星空 古往今来,人们对于星空有着独特的喜爱.遥看那漫天的星斗,像黑夜里眨动的眼睛,又像一颗颗光闪闪.亮晶晶的夜明珠,更像在无边海洋上闪动着的点点银光,无不令人神往. 在这节课上,我们将自己动手,绘 ...

  2. 斯坦福大学-自然语言处理入门 笔记 第十四课 CGSs和PCFGs

    一.概率上下文无关文法((Probabilistic) Context-Free Grammars) 1.上下文无关文法(Context-Free Grammars) 我们也可以称之为词组结构语法(P ...

  3. 3D游戏建模入门初级教学:制作纹理逼真的法线贴图

    下图是一只恐龙的低模布线,细心的朋友估计会看到恐龙头部的布线密度是要远远高于身体和四肢的,这种布线的好处就是可以在你需要着重刻画的部位经过细分后生成的模型面数会远远高于那些次要部分,会使你的细节刻画更 ...

  4. 新版标准日本语初级_第四课

    单词   1. あります和います:表示事物的存在时,最常用的谓语是あります和います. あります用于花.草.桌子等不具有意志的事物. います用于具有意志的人.动物或昆虫.   使用あります和います的句型 ...

  5. 壳与加壳脱壳基础知识

    在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑.自然界中植物用它来保护种子,动物用它来保护身体等等.同样,在一些计算机软件里也有一段专门负责保护软件不被非法修改或反编译的程 ...

  6. 加密壳的一般脱壳步骤与实例演示

    今天主要是深入的了解汇编语言,要想反编译没这个可是不行的啊.当然,这也不是一天两天可以成功的,继续努力. 一.如何分辨加密壳: 壳分为加密壳和压缩壳,压缩壳目的是减少软件的体积便于在网上传播, 而加密 ...

  7. 新手第四课-PaddlePaddle快速入门

    新手第四课-PaddlePaddle快速入门 文章目录 新手第四课-PaddlePaddle快速入门 PaddlePaddle基础命令 计算常量的加法:1+1 计算变量的加法:1+1 使用Paddle ...

  8. 视频教程-【无废话课程】Maya软件初级教学UV拆分基础入门【字幕版】-Maya

    [无废话课程]Maya软件初级教学UV拆分基础入门[字幕版] 3D数字互动领域的技术研发.以用户为核心,以市场为导向,提升用户体验,提高数字内容品质,着力打造数字内容国际一流品牌.目前拥有多个自主知识 ...

  9. 第四课 脱壳必备知识要点及方法

    第四课  脱壳必备知识要点及方法 今天所要讲的是这高级篇中最为关键,最为重要的一课,希望大家能认真学习,反复推敲,举一反三学习脱壳的各种方法,当然有的时候可能需要几种方法一起使用,今后我们也会一点一点 ...

最新文章

  1. CUDA 7 流并发性优化
  2. 为什么神经网络会把乌龟识别成步枪?现在的 AI 值得信任吗?
  3. 3d查看器无法加载三维模型_珠峰登顶成功,送套三维模型给你
  4. 强制生成32位arm程序_3. 从0开始学ARM-ARM模式、寄存器、流水线
  5. 必应输入法(桌面版)软件分析和用户需求调查
  6. 燕十八MySQL优化学习笔记
  7. 解释python中的join()和split()函数_python 中join()函数strip() 函数和 split() 函数的详解及实例...
  8. 极光推送JPush使用Java SDK开发
  9. Java微服务面试题
  10. 关于华为宣讲的一些感悟
  11. knockoutjs介绍
  12. Unity 镜子反射特效
  13. Arduino教程: 斯通恩 STWI101WT-01 人机交互显示屏和Arduino
  14. sfp寄存器_SFP+-光模块测试指导
  15. 细数阿里 25 个开源的前端项目
  16. matlab2015使用dsolve错误,matlab - 当变量乘以常数时,dsolve中的错误(R2011a) - 堆栈内存溢出...
  17. mysql 建复合索引_mysql 建立复合索引
  18. java8判断当前时间是否大于某个时间
  19. 《Python程序设计入门与实践》219道课后习题答案
  20. [python] paramiko实现SSH和SFTP

热门文章

  1. [已成功破解] 阿里 taobao 滑条验证码 x5sec解密 slidedata参数
  2. 手势识别:使用标准2D摄像机建立一个强大的的手势识别系统
  3. 因果推断 | 双重差分法笔记补充
  4. 逻辑学试题库及答案-辛苦整理-最全版本
  5. MyEclipse 7.5 下载(纳米盘原始下载路径)
  6. gis如何加入emf图片_投票 | Ansys仿真的艺术图片大赛入围作品巡展
  7. NS3-LENA源码阅读报告(1)
  8. 煤都也要迈向互联网 抚顺将打造东北亚一流的电商产业基地
  9. 微型计算机技术及应用考题,2017年计算机应用试题及答案
  10. KEPServerEX 6实现opcua与西门子plc通讯