易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【易首发】R3保护自己的代码段不被修改,直接废掉WriteMemory   [复制链接]

    2022-10-11 08:34:42
    高级教程源码
    易语言资源网
    2458 次浏览
    来源链接

前言:

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

测试:

  • 利用NtCreateSection创建一块和欲保护的地址大小相同的Section,然后将数据拷贝到改Section中,最后用NtMapViewOfSection重新映射回去(此时便可添加SEC_NO_CHANGE属性)
  • 添加映射出的内存页被添加SEC_NO_CHANGE属性后,R3下NtProtectVirtualMemory就不能修改这个内存区域的内存属性了,只读的代码段不能被修改为可写。
  • 接着R3下的写入改内存页的命令基本就废了。
  • 保护后CE修改代码段的效果:

PS:

  • 由于NtMapViewOfSection要求映射内容64KB对齐,这里可能让少部分只读属性的内存页变成可读可写。
  • 不能尝试去保护kernel32.dll(它的内存映射情况非常奇怪),程序不能去保护ntdll.dll(因为NtMapViewOfSection在ntdll中,除非重写NtMapViewOfSection,不过这也不难,我就不实现了)
  • 保护exe代码区段需要一个Dll来完成(显然,运行中代码区段不能解除自己的映射,这会导致程序直接崩溃),且需要编译出来才有效


点我下载 (已有 188 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
NoChange.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
NoChange_Dll.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:大漠多点找色自动取色器源码...     下一篇:取线程信息