首页
社区
课程
招聘
[求助] IDA逆向代码有问题
发表于: 2018-5-6 02:50 3273

[求助] IDA逆向代码有问题

2018-5-6 02:50
3273
PMDL NTAPI IoCreateWriteMdlForAddress(PVOID InAddress, PVOID *OutAddress, size_t Size) ////创建内存可写;
{
PMDL pMdl = NULL;
if (Size>0)
{
if ((InAddress == NULL) | (Size == 0))
return NULL;
if (OutAddress == NULL)
return NULL;
if (!MmIsAddressValid(OutAddress))
return NULL;
}
else
{
return NULL;
}
pMdl = MmCreateMdl(NULL, InAddress, Size);
if (pMdl == NULL)
{
return NULL;
}
MmBuildMdlForNonPagedPool(pMdl);
if (!FlagOn(pMdl->MdlFlags, MDL_MAPPED_TO_SYSTEM_VA))
SetFlag(pMdl->MdlFlags, MDL_MAPPED_TO_SYSTEM_VA);
*OutAddress = MmMapLockedPages(pMdl, KernelMode);
return pMdl;
}


void HookImportFunction(void *ImageBase, void *OldFunction, void *NewFunction, char *FunctionName)
{
PVOID *OutAddress = NULL; // [rsp+30h] [rbp-48h]
void *pContext; // [rsp+40h] [rbp-38h]
STRING DestinationString; // [rsp+48h] [rbp-30h]
       void *v9;

memset(&DestinationString, 0, 0x20ui64);
RtlInitAnsiString(&DestinationString, FunctionName);
pContext = OldFunction;
if (DetourEnumerateImportsEx(ImageBase, &pContext, NULL, DETOUR_IMPORT_FUNC_CALLBACKEX))
{
PMDL MemoryDescriptorList = IoCreateWriteMdlForAddress( v9  , &OutAddress, 8);  //关键在这行
if (MemoryDescriptorList)
{
OutAddress = NewFunction;
MmUnmapLockedPages(OutAddress, MemoryDescriptorList);
IoFreeMdl(MemoryDescriptorList);
}
}
}


PMDL MemoryDescriptorList = IoCreateWriteMdlForAddress(NULL, &OutAddress, 8);
这行代码有问题,会蓝屏。
如果改成 直接 IoCreateWriteMdlForAddress(NULL, &OutAddress, 8); 就不会蓝屏。这是为什么???
IoCreateWriteMdlForAddress 返回类型为 PMDL

还有个问题  IoCreateWriteMdlForAddress(v9 , &OutAddress, 8); 这里面的V9应该是必须有值的,为什么IDA逆向出来的伪代码里V9是没有赋值的???

谁能帮我解决的,请私信我下,可付费

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 38
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我觉得IDA逆向出来的代码只是方便我们理解逻辑用的,你直接拿来用不太可靠的
2018-7-18 18:28
0
雪    币: 8107
活跃值: (1955)
能力值: ( LV8,RANK:122 )
在线值:
发帖
回帖
粉丝
3
楼上说的对, 因为有些时候类结构, 子函数没有分析过等都会影响到F5的结果, 不对或看起来不合理的地方, 需要自己结合汇编来修正
2018-7-19 08:54
0
雪    币: 42
活跃值: (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
SnowFox 楼上说的对, 因为有些时候类结构, 子函数没有分析过等都会影响到F5的结果, 不对或看起来不合理的地方, 需要自己结合汇编来修正
对头,现在问题已经解决了
2018-7-20 09:25
0
游客
登录 | 注册 方可回帖
返回
//