| 实现调用加壳的外壳中的子程序的一点见解 |
|
| 作者:未知 文章来源:网络收集 点击数: 更新时间:2006-3-29 15:58:00
|
| 加壳往往是实现对原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错误,某个地址不能为读或写。。呵呵,要的就是这个效果!!! 错误之处,恳请各位高手指正!
|
|
[ 收藏此页到: 天天|和讯|博采|ViVi|狐摘|我摘|天极 ] 文章录入:kinda 责任编辑:kinda |
|
上一篇文章: 我的PE程序加密核心代码(MASM6.0) 下一篇文章: 注册机编写器说明文件 |
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |