5305|4

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wdk编译出错LNK2019:unresolved external symbol _DriverEntry@8 referenced in function [复制链接]

inline hook ObReferenceObjectByHandle保护进程,看雪上的例子,c语言写的,编译错误LNK2019:unresolved external symbol _DriverEntry@8 referenced in function _GsDriverEntry@8。

#include
#include



BYTE  OriginalBytes[5]={0};         
BYTE JmpAddress[5]={0xE9,0,0,0,0};
ULONG  CR0VALUE;

extern POBJECT_TYPE *PsProcessType;


NTSTATUS ObReferenceObjectByHandle(
  __in       HANDLE Handle,
  __in       ACCESS_MASK DesiredAccess,
  __in_opt   POBJECT_TYPE ObjectType,
  __in       KPROCESSOR_MODE AccessMode,
  __out      PVOID *Object,
  __out_opt  POBJECT_HANDLE_INFORMATION HandleInformation
);

NTSTATUS MidObReferenceObjectByHandle(
  __in       HANDLE Handle,
  __in       ACCESS_MASK DesiredAccess,
  __in_opt   POBJECT_TYPE ObjectType,
  __in       KPROCESSOR_MODE AccessMode,
  __out      PVOID *Object,
  __out_opt  POBJECT_HANDLE_INFORMATION HandleInformation
);

InlineHook()
{
        KIRQL Irql;
       
        DbgPrint("Original ObReferenceObjectByHandle Address is 0x%x",ObReferenceObjectByHandle);
        //保存原函数前5字节
        RtlCopyMemory(
  __in  OriginalBytes,
  __in  ObReferenceObjectByHandle,
  __in  5);
*(BYTE*)JmpAddress=(ULONG)MidObReferenceObjectByHandle-(ULONG)ObReferenceObjectByHandle+5;

//关闭内存写保护
_asm              
   
  {
    push eax
      
      mov eax, cr0
      mov CR0VALUE, eax
      and eax, 0fffeffffh  
      mov cr0, eax
      pop eax
  }
  
  Irql=KeRaiseIrqlToDpcLevel();
RtlCopyMemory(
  __in  (BYTE*)ObReferenceObjectByHandle,
  __in  JmpAddress,
  __in  5
);
   KeLowerIrql(Irql);
   
//开启内存写保护   
   __asm
   
  {      
   
    push eax
      
      mov eax, CR0VALUE
      
      mov cr0, eax
      
      pop eax
      
  }
}


_declspec (naked) NTSTATUS OriginalObReferenceObjectByHandle(
  __in       HANDLE Handle,
  __in       ACCESS_MASK DesiredAccess,
  __in_opt   POBJECT_TYPE ObjectType,
  __in       KPROCESSOR_MODE AccessMode,
  __out      PVOID *Object,
  __out_opt  POBJECT_HANDLE_INFORMATION HandleInformation
)
{
        _asm{
                mov edi,edi
                push ebp
                mov ebp,esp
                mov eax,ObReferenceObjectByHandle
                add eax,5
                jmp eax
                }
        }

NTSTATUS MidObReferenceObjectByHandle(
  __in       HANDLE Handle,
  __in       ACCESS_MASK DesiredAccess,
  __in_opt   POBJECT_TYPE ObjectType,
  __in       KPROCESSOR_MODE AccessMode,
  __out      PVOID *Object,
  __out_opt  POBJECT_HANDLE_INFORMATION HandleInformation
)
{
        NTSTATUS status;
        status=OriginalObReferenceObjectByHandle(Handle,DesiredAccess,ObjectType,AccessMode,Object,HandleInformation);
        if(status==STATUS_SUCCESS&&DesiredAccess==0x0001)
        {
                if(ObjectType==*PsProcessType)
                {
                if(_stricmp((char*)((ULONG)(*Object)+0x174),"notepad.exe")==0)
                  {
                          ObDereferenceObject(*Object);
       return STATUS_INVALID_HANDLE;
                        }
                }
         }
                return status;
}


InlineUnHook()
{
        KIRQL Irql;
  _asm
   
  {
   
    push eax
      
      mov eax, cr0
      
      mov CR0VALUE, eax
      
      and eax, 0fffeffffh  
      
      mov cr0, eax
      
      pop eax
      
  }
  Irql=KeRaiseIrqlToDpcLevel();

        RtlCopyMemory((BYTE*)ObReferenceObjectByHandle,OriginalBytes,5);
       
        KeLowerIrql(Irql);
  
    //开启写保护
  
  __asm
   
  {      
   
        push eax
      mov eax, CR0VALUE
      mov cr0, eax
      
      pop eax
      
  }

}


Unload(PDRIVER_OBJECT dricer)
{
        InlineUnHook();
        DbgPrint("Driver is Unloaded...\r\n");
}

NTSTATUS DriverEmpty(PDRIVER_OBJECT driver,PUNICODE_STRING reg_string)
{
        InlineHook();
        driver->DriverUnload=Unload;
}

最新回复

搞定了_stricmp写错了  详情 回复 发表于 2010-5-30 11:23
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
驱动程序要有一个入口函数,程序被加载时自动调用该函数,在该函数中执行程序的初始化,函数名称为DriverEntry,原形为:
NTSTATUS
  DriverEntry(
    IN PDRIVER_OBJECT  DriverObject,
    IN PUNICODE_STRING  RegistryPath
    );
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢,还有问题DriverEntry没返回;Unload(PDRIVER_OBJECT dricer)
应该是driver。编译通过了。可是加载后无法保护notepad.exe(XP SP2下)。能帮我看看吗?实在不好意思,又提了个问题
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
wdk,没搞过,呵呵,,,路过,顺便顶顶!
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
搞定了_stricmp写错了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表