关于VirtualAllocEx 和 ZwUnmapViewOfSection的参数问题

「已注销」 2017-04-26 07:05:59



如图 第二个参数 搞了半天搞不明白 突然在想 如果 获取进程的首地址 然后 + imagebase的偏移是不是更好

	//ZwUnmapViewOfSection(,);

HMODULE hNtDll = GetModuleHandle(TEXT("ntdll.dll"));

if (!hNtDll)
{
print("get dll handle is file\n");
return -1;
}

ZWUNMAPVIEWOFSECTION ZwUnmapViewOfSection = (ZWUNMAPVIEWOFSECTION)GetProcAddress(
hNtDll, "ZwUnmapViewOfSection");

int ret = ZwUnmapViewOfSection(shell_pi.hProcess, (void*)(this->shell_image_base)); //此处调用
//是想卸载掉外壳程序的镜像 第二个参数应该填 image_base 对应的地方
//但是这样写的话 一直出错 个人又想不通到底该写什么

print("ret -- %x\n", ret);



DWORD proc_image_base = this->des_sec->out_optional_head()->ImageBase;
int buf_size = Tool::get_newbuf_size(this->des_sec);

print(" (void*)proc_image_base-- %x", (void*)(&proc_image_base));

while (i < 100)
{
start = VirtualAllocEx(this->shell_pi.hProcess, (void*)(&proc_image_base),
buf_size,MEM_COMMIT, PAGE_EXECUTE_READWRITE);

//第二个参数是想在指定位置 分配内存 想在进程空间中 处于image_Base 的地方申请空间
//但是写成这样一直出错 proc_image_base 就是一个pe 文件的 image_base

if (0 != start)
{
break;
}

proc_image_base += this->des_sec->out_optional_head()->SectionAlignment;
}

...全文
742 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-04-28
  • 打赏
  • 举报
回复
引用 5 楼 DelphiGuy 的回复:
可以在自定义位置分配不代表可以在已占用的地址上分配。
在此之前 我已经卸载了原进程的镜像 。
  • 打赏
  • 举报
回复
按照ms的说法,如果在用户模式(ring3)调用ZwUnmapViewOfSection,应该使用NtUnmapViewOfSection。
  • 打赏
  • 举报
回复
在 ImageBase开始分配肯定不行啊,要在没占用的地址分配才行,这个参数传为NULL就可以了,由windows确定。
赵4老师 2017-04-27
  • 打赏
  • 举报
回复
百度搜相关关键字。
  • 打赏
  • 举报
回复
可以在自定义位置分配不代表可以在已占用的地址上分配。
「已注销」 2017-04-27
  • 打赏
  • 举报
回复
引用 2 楼 DelphiGuy 的回复:
在 ImageBase开始分配肯定不行啊,要在没占用的地址分配才行,这个参数传为NULL就可以了,由windows确定。
这个可以在自定义位置分配的 如果传null 整个程序就费了
「已注销」 2017-04-27
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
百度搜相关关键字。
搜索了十几次了 要不然我费这么多时间发帖

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧