• 注册
  • 易源码 易源码 关注:55 内容:2152

    R3保护自己的代码段不被修改 直接废掉WriteMemory

  • 查看作者
  • 打赏作者
  • 当前位置: 七七博客 > 易源码 > 正文
    • 5
    • 易源码
    • R3保护自己的代码段不被修改 直接废掉WriteMemory

      思路来源:代码页防止更改,核心就是用NtMapViewOfSection给代码页添加SEC_NO_CHANGE属性

      修改步骤

      • 利用NtCreateSection创建一块和欲保护的地址大小相同的Section,然后将数据拷贝到改Section中,最后用NtMapViewOfSection重新映射回去(此时便可添加SEC_NO_CHANGE属性)

      • 添加映射出的内存页被添加SEC_NO_CHANGE属性后,R3下NtProtectVirtualMemory就不能修改这个内存区域的内存属性了,只读的代码段不能被修改为可写。

      • 接着R3下的写入改内存页的命令基本就废了。

      注意事项

      • 由于NtMapViewOfSection要求映射内容64KB对齐,这里可能让少部分只读属性的内存页变成可读可写。

      • 不能尝试去保护kernel32.dll(它的内存映射情况非常奇怪),程序不能去保护ntdll.dll(因为NtMapViewOfSection在ntdll中,除非重写NtMapViewOfSection,不过这也不难,我就不实现了)

      • 保护exe代码区段需要一个Dll来完成(显然,运行中代码区段不能解除自己的映射,这会导致程序直接崩溃),且需要编译出来才有效

      隐藏内容需要回复可以看见

      回复

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复
      Lv.11

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复
      Lv.6

      楼主辛苦了,谢谢楼主,楼主好人一生平安!

      回复

      卧槽!无奈本人没文化,一句卧槽行天下!

      回复

      请登录之后再进行评论

      登录
    • 任务系统
    • 帖子间隔 侧栏位置: