You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行中的进程页面权限可以修改吗?有哪些可行的实现方法?

修改目标进程内存权限的可行方案

原有汇编Stub方案的替代实现

你无需手动编写汇编Stub并手动注入到目标地址空间,现有系统API已经可以直接实现同逻辑的需求:

  • Linux/Android 平台:使用ptrace系统调用附着到目标进程后,直接修改目标进程的寄存器参数,触发mprotect系统调用即可。如果是更复杂的逻辑,也可以先向目标进程内存写入动态库路径,调用dlopen加载自定义so后直接在so内部执行mprotect逻辑,全程不需要手写汇编
  • Windows 平台:调用OpenProcess获取目标进程句柄后,使用CreateRemoteThreadAPI,直接将VirtualProtect作为线程入口函数传入,系统会自动在目标进程地址空间执行该函数完成权限修改

无需注入目标进程的替代方案

如果你的场景允许当前进程持有目标进程的调试权限,可以完全绕开修改目标进程内存权限的步骤:

  • Linux 平台下直接调用process_vm_readv/process_vm_writev系统调用,当前进程只要持有CAP_SYS_PTRACE权限,就可以直接读写目标进程的任意地址内存,不需要修改目标进程的页面权限
  • 如果你操作的是当前进程自身的内存,直接调用mprotect即可,不需要任何注入逻辑,示例代码如下:
#include <sys/mman.h>
#include <stdio.h>

int main() {
    // 示例:修改0x400000起始的4KB页面为可读可写可执行权限
    int res = mprotect((void*)0x400000, 4096, PROT_READ | PROT_WRITE | PROT_EXEC);
    if (res == -1) {
        perror("mprotect执行失败");
        return 1;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Aaa Bbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:36:10