欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

实现调用加壳的外壳中的子程序的一点见解。。 (1千字)

实现调用加壳的外壳中的子程序的一点见解。。 (1千字)

加壳往往是实现对原PE的节数据加密、压缩,若能加壳的同时,让加壳后的程序调用壳中的某些子程序,那加壳强度大大增加。这样处理后,即使脱掉了壳,程序执行也肯定不正常,因为脱壳的同时也将这些子程序脱掉了!
    怎样实现呢?作为探讨性的介绍,还是搞一个最基本的来说(假设现在您已经会写PE-exe、PE-dll等PE加壳程序):
    我的实现是这样的:作为一个PE文件,多多少少程序中会有mov eax,1或mov eax,0的语句,就是从这里开刀,因为mov eax,xxxxxxxx这样的指令长度正好与Call xxxxxxxx指令的长度一样,处理起来相对简单。在加壳程序加壳时,查找这些语句统统换成:
call shellSub
//
shellSub实现如下:
shellSub()
{
  mov eax,1 或 mov eax,0
}
    当然,这里有个问题是怎样计算这个Call xxxxxxxx的xxxxxxxx,其实想一想也很简单,加壳时候我们已经计算出了外壳程序的入口RVA,只要以这个RVA为基准,就可以得到:(shellSub的RVA)-(mov eax,1的RVA)的差值,这个差值再减去5(Call的指令长度)就是xxxxxxxx。
    这里仅仅抛砖引玉的介绍了最基本的方法,其实通过变化,可以对原程序的很多特定语句实现改成调用外壳中不同的sub,大大增加了外壳的保密强度。
    这样处理后,可想而知,脱壳后的运行情况:Windows错误,某个地址不能为读或写。。呵呵,要的就是这个效果!!!
    错误之处,恳请各位高手指正!
                                  Spring.W
                                  2002/10/21

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功