northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1539回复:5

HOOK SERVICE TABLE ERROR!

楼主#
更多 发布于:2003-11-03 15:17
//下面是undocument windows nt中的一段代码
#define SYSTEMSERVICE(_function)  KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)_function+1)]
OldNtCreateFile=(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile));
//上面这句没错
_asm cli
//HOOK FUNCTION
(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))=NewNtCreateFile;
//这句就错了
,错误为\" \'=\' : left operand must be l-value\"
于是改为SYSTEMSERVICE(ZwCreateFile)=(unsigned int)NewNtCreateFile
还是错,错误为error LNK2001: unresolved external symbol \"__declspec(dllimport
) struct ServiceDescriptorEntry  KeServiceDescriptorTable\" (__imp_?KeServiceDesc
riptorTable@@3UServiceDescriptorEntry@@A)
不知道各位高手有无解决办法?
freewindows
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2003-11-03 15:32
NTSTATUS HookServices()
{
        OldNtCreateFile=(NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile));
        _asm cli
        (NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))=NewNtCreateFile;
        _asm sti
        return STATUS_SUCCESS;
}

void UnHookServices()
{
        _asm cli
        (NTCREATEFILE)(SYSTEMSERVICE(ZwCreateFile))=OldNtCreateFile;
        _asm sti
        return;
}
UNDODNT的代码没有什么问题,可以正常编译的,检查你自己的编译设置,别把库连接到NTDLL。DLL里去了。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-11-03 15:39
我是hook的ZwQueryDirectoryFile
typedef NTSTATUS (*TRUEZWQUERYDIRECTORYFILE)(
IN HANDLE hFile,
IN HANDLE hEvent OPTIONAL,
IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL,
IN PVOID IoApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK pIoStatusBlock,
OUT PVOID FileInformationBuffer,
IN ULONG FileInformationBufferLength,
IN PFILE_INFORMATION_CLASS FileInfoClass,
IN BOOLEAN bReturnOnlyOneEntry,
IN PUNICODE_STRING PashMask OPTIONAL,
IN BOOLEAN bRestartQuery);

(TRUEZWQUERYDIRECTORYFILE)((SYSTEMSERVICE(ZwQueryDirectoryFile))=HookZwQueryDirectoryFile;
这一句就 error C2106: \'=\' : left operand must be l-value
什么错误?
freewindows
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-11-03 16:48
把这个加在头文件里

#pragma pack(1)
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase; //Used only in checked build
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
#pragma pack()

__declspec(dllimport)  ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
northpointstar
驱动牛犊
驱动牛犊
  • 注册日期2003-01-07
  • 最后登录2007-01-05
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-11-03 21:25
我加了那一句还是不行拉,
谁能告诉我error C2106: \'=\' : left operand must be l-value
到底是什么错误吗?
freewindows
zgc7622
驱动小牛
驱动小牛
  • 注册日期2003-02-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分136分
  • 威望15点
  • 贡献值0点
  • 好评度13点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-11 17:01
我也遇到这个问题了,并且说我的SYSTEMSERVICE没有定义!!!
游客

返回顶部