5.使用C语言在windows中修改内存权限
[toc]
C语言修改x86内存权限使程序可以读写全局常量的值
1.在C语言中全局变量的可读不可写
读取全局常量的值,成功执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int c_Var = 0x400000;
int main(int argc, char* argv[])
{
printf("%d\n", c_Var);
__asm
{
mov dword ptr[c_Var], 634
}
printf("%d\n", c_Var);
return 0;
}写入全局只读变量的值,程序崩溃。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const int c_Var = 0x400000;
int main(int argc, char* argv[])
{
printf("%d\n", c_Var);
__asm
{
mov dword ptr[c_Var], 634
}
printf("%d\n", c_Var);
return 0;
}
2.使用VirtualProtect()函数修改自身内存属性
1 |
|
运行成功
3.使用VirtualProtectEx()函数修改自身内存属性
1 |
|
4.使用VirtualProtect()更改程序自身函数内存地址页属性后改变函数指令
1 |
|
5.msvc编译器64位中不支持内连汇编,可以更换其他编译器例如llvm或者intel。
1 |
|
C语言在windows中跨进程修改内存属性使其可读可写可执行
1. 准备Message程序,里面有可读不可写的全局常量,保持运行
1 | //Messageb.c |
运行成功
2.跨进程编写C语言代码修改内存属性后修改全局常量
1 |
|
运行成功
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
