网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > 网络攻防 > 黑客技术 > 系列教程 > 《加密解密技术内幕》7.2 实现调用加壳的外壳中的子程序的一点见解  

《加密解密技术内幕》7.2 实现调用加壳的外壳中的子程序的一点见解

2008-04-02  作者:bitsCN整理  来源:中国网管联盟  点评 投稿 收藏

加壳往往是实现对原PE的节数据加密、压缩,若能加壳的同时,让加壳后的程序调用壳中的某些子程序,那加壳强度大大增加。这样处理后,即使脱掉了壳,程序执行也肯定不正常,因为脱壳的同时也将这些子程序脱掉了! 

网管u家u.bitscn@com

    怎样实现呢?作为探讨性的介绍,还是搞一个最基本的来说(假设现在您已经会写PE-exe、PE-dll等PE加壳程序): 

网管联盟bitsCN_com

    我的实现是这样的:作为一个PE文件,多多少少程序中会有mov eax,1或mov eax,0的语句,就是从这里开刀,因为mov eax,xxxxxxxx这样的指令长度正好与Call xxxxxxxx指令的长度一样,处理起来相对简单。在加壳程序加壳时,查找这些语句统统换成:  网管联盟bitsCN_com

call shellSub  网管u家u.bitscn@com

// 

网管下载dl.bitscn.com

shellSub实现如下: 

网管网www_bitscn_com

shellSub()  网管u家u.bitscn@com

网管联盟bitsCN_com

  mov eax,1 或 mov eax,0  网管下载dl.bitscn.com

网管bitscn_com

    当然,这里有个问题是怎样计算这个Call xxxxxxxx的xxxxxxxx,其实想一想也很简单,加壳时候我们已经计算出了外壳程序的入口RVA,只要以这个RVA为基准,就可以得到:(shellSub的RVA)-(mov eax,1的RVA)的差值,这个差值再减去5(Call的指令长度)就是xxxxxxxx。  网管联盟bitsCN@com

    这里仅仅抛砖引玉的介绍了最基本的方法,其实通过变化,可以对原程序的很多特定语句实现改成调用外壳中不同的sub,大大增加了外壳的保密强度。 

网管论坛bbs_bitsCN_com

    这样处理后,可想而知,脱壳后的运行情况:Windows错误,某个地址不能为读或写。。呵呵,要的就是这个效果!!! 

网管联盟bitsCN_com

    错误之处,恳请各位高手指正!  网管u家u.bitsCN.com



TAGs
 上一篇:《加密解密技术内幕》7.1 让侦测工具把壳识别为VC++   下一篇:《加密解密技术内幕》7.3 加壳时处理IAT
《加密解密技术内幕》7.2 实现调用加壳的外壳中的子程序的一点见解 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
最新推荐文章:
网管论坛交流: