能力值:
( LV2,RANK:10 )
|
-
-
2 楼
出错的地方就这里:
return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
不知道怎么办?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
查下这个FAILED_TO_OBTAIN_FUNCTION_ADDRESSES在哪个头文件定义的,然后加进去
|
能力值:
( LV8,RANK:150 )
|
-
-
4 楼
复制人家的代码吧?? 这里估计是人家宏定义的一个常量,自己看着点代码
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
怎么能查到FAILED_TO_OBTAIN_FUNCTION_ADDRESSES在哪个头文件?
谢谢兄弟
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
对,就是复制人家的代码
但是,看不出什么宏定义的常量
怎么办?
谢谢兄弟
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
自己看着点代码
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
我说兄弟们啊,怎么看啊,
人家代码就一段,就是下面这些
红色的那句,
麻烦高手给个办法吧
3q
//////////////////////////////////////////////////////////////////////
// 名称: Nakd_KiAttachProcess
// 功能: My_RecoveryHook_KiAttachProcess的中继函数
// 参数:
// 返回:
//////////////////////////////////////////////////////////////////////
static NAKED VOID Nakd_KiAttachProcess()
{
__asm
{
mov edi,edi
push ebp
mov ebp,esp
push ebx
push esi
mov eax,KiAttachProcessAddress //注意这个是全局变量 BYTE*
add eax,7
jmp eax
}
}
//////////////////////////////////////////////////////////////////////
// 名称: RecoveryHook_KiAttachProcess
// 功能: 解除游戏保护对_KiAttachProcess函数的HOOK(DNF)
// 参数:
// 返回: 状态
//////////////////////////////////////////////////////////////////////
NTSTATUS My_RecoveryHook_KiAttachProcess()
{
BYTE *KeAttachProcessAddress = NULL; //KeAttachProcess函数地址
BYTE *p;
BYTE MovEaxAddress[5] = {0xB8,0,0,0,0}; //
BYTE JmpEax[2] = {0xff,0xe0};
KIRQL Irql;
//特征码
BYTE Signature1 = 0x56, //p-1
Signature2 = 0x57, //p-2
Signature3 = 0x5F, //p-3
Signature4 = 0x5E, //p+5
Signature5 = 0xE8; //p第一个字节
//获得KeAttachProcess地址,然后通过特征码找到
//KiAttachProcess的地址
KeAttachProcessAddress = (BYTE*)MyGetFunAddress(L"KeAttachProcess");
if (KeAttachProcessAddress == NULL)
{
KdPrint(("KeAttachProcess地址获取失败\n"));
return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
}
//将p指向KeAttachProcess函数开始处
p = KeAttachProcessAddress;
while (1)
{
if ((*(p-1) == Signature1) &&
(*(p-2) == Signature2) &&
(*(p+5) == Signature3) &&
(*(p+6) == Signature4) &&
(*p == Signature5))
{
//定位成功后取地址
KiAttachProcessAddress = *(PULONG)(p+1)+(ULONG)(p+5);
break;
}
//推动指针
p++;
}
//计算中继函数地址
*(ULONG *)(MovEaxAddress+1)=(ULONG)Nakd_KiAttachProcess;
WPOFF(); //清除CR0
//提升IRQL中断级
Irql=KeRaiseIrqlToDpcLevel();
//写入
RtlCopyMemory(KiAttachProcessAddress,MovEaxAddress,5);
RtlCopyMemory(KiAttachProcessAddress+5,JmpEax,2);
//恢复Irql
KeLowerIrql(Irql);
WPON(); //恢复CR0
return STATUS_SUCCESS;
}
|
能力值:
( LV12,RANK:270 )
|
-
-
9 楼
在NTSTATUS的中貌似没有预定义FAILED_TO_OBTAIN_FUNCTION_ADDRESSES,应该是自己定义的,自己define一下就好了,或者根据自己的需要进行修改……
附 NTSTATUS values:http://msdn.microsoft.com/en-us/library/cc704588(PROT.10).aspx
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
自己定义一个NTSTATUS类型的宏吧,只要其类型为NTSTATUS用来表示出错返回就可以了。不一定要完全与看到的copy代码一致啊。想你也不是想要它的错误结果吧。
|
能力值:
( LV3,RANK:20 )
|
-
-
11 楼
楼主我感觉你很危险
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
'FAILED_TO_OBTAIN_FUNCTION_ADDRESSES' 是别人代码中自己定义的一个LONG型常量,你可以参照STATUS_SUCESS方式定义,例#define FAILED_TO_OBTAIN_FUNCTION_ADDRESSES ((NTSTATUS)0xC000000FL)
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
既然是别人定义的,当然就查不到了,照ls说的自己定义吧
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
谢谢ls各位兄弟,尤其是yujianker 兄弟
我明白了
再次感谢!~~~
|
能力值:
( LV9,RANK:200 )
|
-
-
15 楼
if (KeAttachProcessAddress == NULL)
{
KdPrint(("KeAttachProcess地址获取失败\n"));
return FAILED_TO_OBTAIN_FUNCTION_ADDRESSES;
}
看代码 不必纠结 返回值FAILED_TO_OBTAIN_FUNCTION_ADDRESSES,你直接返回0 也可以,
,只要你自己知道返回值代表什么意思就行了。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
谢谢倒霉蛋兄弟
|
能力值:
( LV8,RANK:150 )
|
-
-
17 楼
毛,少误导人,你在人家的代码里找,这个找的方法还用教吗??随便在一个文本编辑器中找不行吗? Ctrl+F,或者 编辑---查找 菜单什么的,哎呀...最好找到人家的定义,当然理解了代码的意思可以根据自己意愿随意返回个值了....
|
能力值:
( LV8,RANK:150 )
|
-
-
18 楼
不过,衷心劝lz加强一下语言基本功
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
你这一个帖子这么多回复 这里人够热心的
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
看雪的兄弟们很热心
谢谢大家
|
|
|