加壳软件的实现原理篇

加壳软件的实现原理篇   
 
 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(密码型壳)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值