|
[求助]内存校验问题
这个专业术语抛的太高了,仰望还是看不到边,来点通俗点的吧 我在传说中听到过有一种,就是被Hook的代码,执行的时候是hook的那份,而读取的时候是原来那份.应该和分页有关,就不知道具体原理,有参考资料么? 牛牛们,再给点提示 哈 |
|
|
|
[求助]ZwQueryVirtualMemory枚举进程模块,有什么反制措施
恩,谢谢指点 参考别人的代码,自己改了下,可以隐藏,分享如下: 系统是XP SP3 PUNICODE_STRING GetPath(ULONG mmVad) //获取模块全路径 { PUNICODE_STRING pPath; ULONG ca;//_CONTROL_AREA ULONG fp;//_FILE_OBJECT ca = *(ULONG *)(mmVad + 0x018);//+0x018 ControlArea : Ptr32 _CONTROL_AREA if( !MmIsAddressValid( (ULONG *)ca ) ) { //dprintf("[EnumModules] ControlArea is not available : 0x%X",ca); return NULL; } fp = *(ULONG *)(ca + 0x024); //+0x024 FilePointer : Ptr32 _FILE_OBJECT if( !MmIsAddressValid( (ULONG *)fp ) ) { //dprintf("[EnumModules] FileObject is not available : 0x%X",fp); return NULL; } pPath = (PUNICODE_STRING)(fp + 0x030); //+0x030 FileName : _UNICODE_STRING //dprintf("[EnumModules] The file name is %S",pPath->Buffer); //dprintf("[EnumModules] The MMVAD is 0x%X",mmVad); //dprintf("\n"); //nCount++;//计数 return pPath; } VOID PreOrderTraverse(ULONG mmVad, WCHAR * pszModName) { PUNICODE_STRING pPath; if ( MmIsAddressValid( (ULONG *)mmVad ) ) { pPath = GetPath(mmVad);//读取地址 if (pPath != NULL && pPath->Length > 0 && wcsstr(pPath->Buffer, pszModName) != NULL) { DbgPrint("find module name %s, delete it", pszModName); RtlZeroMemory(pPath->Buffer,pPath->Length); pPath->Length = 0; pPath->MaximumLength = 0; } else { PreOrderTraverse( *(ULONG *)(mmVad + 0x00c) , pszModName); // +0x00c LeftChild : Ptr32 _MMVAD PreOrderTraverse( *(ULONG *)(mmVad + 0x010) , pszModName); //+0x010 RightChild : Ptr32 _MMVAD } } } //遍历指定PID进程的VAD树,搜索指定的模块名 NTSTATUS HideProcessModuleByName(int nPid, WCHAR * pszModName) { ULONG VAD; PEPROCESS TargetProcess; //////////////////////////////////////// PsLookupProcessByProcessId( (HANDLE)nPid, &TargetProcess); if(!TargetProcess) { KdPrint(("[EnumModules] Error on Get EProcess By Pid.")); return STATUS_UNSUCCESSFUL; } VAD = *(ULONG *)((ULONG)TargetProcess + 0x11c); //+0x11c VadRoot : Ptr32 Void DbgPrint("[EnumModules] EPROCESS : 0x%X , VAD : 0x%X",TargetProcess,VAD); PreOrderTraverse(VAD, pszModName); //遍历二叉树。。。 //DbgPrint("[EnumModules] Modules count : %d",nCount); return STATUS_SUCCESS; } |
|
[求助]错误:LNK2005:_DLLMain@12已经在dllmain.obj中定义
别人的dll是win32 dll,而你在这个dll里面加入了MFC dll的代码,简单的重定义入口点至win32dll的dllmain函数,凭我的经验(不足,呵呵),好像是不行的,首先编译会有很多问题,还有他们两个的运行库不同,实际运行也会有问题. 为什么不把你的mfc dll直接一个工程,然后别人的dll直接import你的dll呢? |
|
|
|
[求助]LoadLibrary失败
顺便补充下我的解决方法,不是帖子里面的方法,更简单,但前提是所有自己的dll要在一个目录下: LoadLibraryEx("C:\\MyDll.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH); |
|
|
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
能力排名:
No.{{ rank_num }}
等 级:
LV{{ rank_lv-100 }}
活跃值:
在线值:
浏览人数:{{ visits }}
最近活跃:{{ last_active_time }}
注册时间:{{ user_info.create_date_jsonfmt }}
勋章
兑换勋章
证书
证书查询 >
能力值