13673270909
全国统一服务热线
地址:河北省沧州市南皮县乌马营镇开发区
座机:0317-8619778
传真:0317-8619778
手机:13673270909
QQ:522678238
网址: www.runyanggongsi.com
填写您的疑问和需求
产品展示

主页 > 新闻中心 > 公司新闻 >

有关驱动器外壳的处理方法

 



原始IAT的处理
 
    由于原驱动程序被加上了我们的驱动器外壳,所以原驱动程序的IAT表的填写工作
 要由我们的驱动器外壳程序来完成。应用层壳一般通过两个API来完成这个工作,或者自己实现这两个API的功能。而驱动壳是要 随驱动程序一起被加载到内核当中去的,但内核里没有这两个函数,我们
 自己对这两个函数做内核的实现。当然也可以用函 数,不过它只能得到两个模块的函数,对于其它模块则 无能为力了,影响壳的通用性。壳的函数可以通过遍t链表来实现,关于遍历这个链表的方法可以参照Futo的代码,通过DRIVEROBJECT的DriverSec tion成员来完成,而驱动对象可以从堆栈当中找到。
 
  壳的函数的实现就很简单了,内核模块本身也是PE文件,直接遍历一下PE的导出表就ok了。 还有一点需要注意的就是UNICODE的转换, 在给程序加壳的时候一般都要添加新节,用于存放壳的代码,应用层程序 的节表的最后一项和第一个节之间一般是有一个很大的空间可以用来添加新的 节表项的,但一般情况下驱动程序节表的最后一项后面紧接着就是第一个节解决的方法有两种,第一种
 将所有的节向后移动,而第二种方法则是将PE头整体向前移动覆盖掉部分无用的dos头,留出足够的空间存放新的节表项。
 
   重定位表的处理
 
    由于驱动程序是要被加载到内核空间中,所以外壳必须实现原来由系统完成的原驱动程序的重定位工作。原驱动程序的重定位表的处理方法跟应用层 DLL 文件的处理方法完全一样,代码如下: 需要注意的一点:驱动程序被加壳后必须要有重定位表,否则驱动加载会失败,解决的方法需要自己构造一个假的重定位表来替换原始的重定位表。
     
   另外,由于驱动壳的特殊性,shell的编写和驱动程序的编写没什么区别, 稍有错误就会蓝屏。
 
    

合作企业