加壳软件的实现原理篇

加壳软件的实现原理篇      
 
  Author: x0R  
  Heap  
    Heap 棕色:代表HEAP区,也就是动态分配的内存区域.
   
  Protected Program   Program 蓝色:代表被加密后的源程序代码区
   
    En/Decrypt 红色:代表”保护程序代码”,也就是所谓的壳.
   
  Encrypt/Decrypt  
   
  Protected Program  
    图1说明了一个较安全加壳后的程序,这样的壳程序有较好的保护措施, 会对IAT进行加密处理,加入了大量Anti-Debug代码防止调试程序进程分析与脱壳,加壳的时候会先对源程序的代码进行分析,然后进行关键代码替换与加密,替换的过程中会生相应的解密代码插入到程序中,加壳后的程序执行时候是分段解密执行的,而且解码的过程是在堆完成的,这样做是为了增加代码还原的难度,原程序的一些被替换的代码会在HEAP执行后然后JMP到被解码的程序处在执行。现在很多壳都用了这样的方法。         有些加壳程序没有在程序中”插入/替换”加/解密代码,只将自身包括在原程序的外面(就好比鸡蛋一样,外面是壳,里面是蛋黄).这样的保护程序并不安全,只要找到了关键的跳转OEP指令就可以轻松脱壳.
   
   
   
   
  Encrypt/Decrypt  
  Protected Program  
   
   
  Encrypt/Decrypt  
   
   
  图1(保护型壳)  
 
  Heap  
    Heap 棕色:代表HEAP区,也就是动态分配的内存区域.
   
    Decode 绿色:代表解码程序(解压)。
  Decode   
    Compressed 蓝色:代表被压缩后原程序代码区。
   
  Compressed Code  
   
   
    图2表示的是一个压缩壳压缩后的程序,程序在执行的时候首先会将解压代码自身进行解码,放入堆中,然后在对原程序进行解压。一般这种壳的保护都不是很强,很容易脱。只要找到OEP就可以直接DUMP,而且这类壳大部分对IAT没有进行处理,典型的壳有ASPACK
   
   
   
   
   
  图2(压缩型壳)  
 
  Heap  
    Heap 棕色:代表HEAP区,也就是动态分配的内存区域.
  Decode  
    Decode 绿色:代表解码程序(解压)。
   
    Protected 蓝色:代表用密码加密后的后原程序代码区。
  Protected Code  
   
   
   
    图3表示的是被密码型加壳工具加壳后的程序。此类加壳程序一般应用在共享软件的注册。加壳程序根据用户输入的密码以相应的算法对程序代码区进行加密工作,当程序执行的时候会提示用户输入口令或注册码。如果破解者强行更改密码检测指令,会导致程序不正确的执行,因为被加密的代码并没有用相应的口令进行解码。程序没有被还原。
   
   
   
   
   
  图3(密码型壳)

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34241 人正在系统学习中

来源:zacklin

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年4月11日
下一篇 2012年4月11日

相关推荐