https://www.cnblogs.com/Max-hhg/articles/13939064.html
//windows 下修改内存属性的api 为 VirtualProtect
#include <sys/mman.h>
int mprotect(const void *addr, size_t len, int prot);
此函数把自addr开始的、长度为len的内存区的保护属性修改为prot指定的值,prot值如下:
prot标签值 描述
PROT_NONE The memory cannot be accessed at all.
PROT_READ The memory can be read.
PROT_WRITE The memory can be written to.
PROT_EXEC The memory can contain executing code.
https://blog.csdn.net/zmlcool/article/details/9378897
mmap通过映射 /dev/zero 来分配内存页。内存将被初始化为可读和可写模式。
int fd = open (“/dev/zero”, O_RDONLY);
char* memory = mmap (NULL, page_size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
close (fd);
然后,您的程序可以使用 mprotect 把它变成只读:
mprotect (memory, page_size, PROT_READ);
有一种监控内存访问的高级技巧,可以通过利用 mmap 和 mprotect 保护目标内存区间,然后当程序访问时候接收并处理 Linux 系统发送的 SIGSEGV 信号。代码 展示了这个技巧。
代码使用mprotect检测内存访问
#include <fcntl.h>
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
static int alloc_size;
static char* memory;
void segv_handler (int signal_number)
{
printf (“memory accessed!\n”);
mprotect (memory, alloc_size, PROT_READ | PROT_WRITE);
}
int main ()
{
int fd;
struct sigaction sa;
/* 初始化segv_handler为SIGSEGV的句柄。*/
memset (&sa, 0, sizeof (sa));
sa.sa_handler = &segv_handler;
sigaction (SIGSEGV, &sa, NULL);
/* 使用映射/dev/zero分配内存页。最初映射的内存为只写。*/
alloc_size = getpagesize ();
fd = open (“/dev/zero”, O_RDONLY);
memory = mmap (NULL, alloc_size, PROT_WRITE, MAP_PRIVATE, fd, 0);
close (fd);
/* 写页来获得一个私有复制。 */
memory[0] = 0;
/* 使内存为不可写。 */
mprotect (memory, alloc_size, PROT_NONE);
/* 写分配内存区域。 */
memory[0] = 1;
/* 所有工作都结束;unmap内存映射。 */
printf (“all done\n”);
munmap (memory, alloc_size);
return 0;
}
上述程序按照如下步骤执行:
程序为 SIGSEGV 建立一个信号处理句柄。
程序通过映射 /dev/zero 分配一个内存分页,然后通过写入数据的方式获得一个私有复本。
程序通过调用带 PROT_NONE 权限的 mprotect 保护了内存。
当程序在后续执行中写入内存时,Linux 向进程发送 SIGSEGV,这个信号被 segv_handler 句柄接收处理。这个句柄将解除内存保护,因而程序内存访问得以继续。
当信号句柄执行完成时,程序控制权返回 main 函数,程序将使用 munmap 来释放内存。
https://blog.csdn.net/zacklin/article/details/7478118 注入shellcode . 设置内存为可执行...












网友评论