通过调用VirtualProtectEx来修改,通过修改main()函数的入口地址来达到修改打印内容的目的。
完整的代码如下:
int main(int argc, char* argv[]);
int mine()
...{
cout << "白日依山尽, 黄河入海流, 欲穷千里目, 更上一层楼. ";
return 0;
}
int SetHook()
...{
DWORD flag = PAGE_EXECUTE_READWRITE;
DWORD mineAddr = (DWORD)mine;
DWORD mainAddr = (DWORD)main;
mineAddr -= (mainAddr + 5);
VirtualProtectEx(GetCurrentProcess(), (BYTE*)mainAddr, 200, flag, &flag);
((BYTE*)mainAddr)[0] = 0xe9;
((BYTE*)mainAddr)[1] = (BYTE)(mineAddr);
((BYTE*)mainAddr)[2] = (BYTE)(mineAddr>>8);
((BYTE*)mainAddr)[3] = (BYTE)(mineAddr>>16);
((BYTE*)mainAddr)[4] = (BYTE)(mineAddr>>24);
VirtualProtectEx(GetCurrentProcess(), (BYTE*)mainAddr, 200, flag, &flag);
return 0;
}
int s = SetHook();
int main(int argc, char* argv[])
...{
cout << "白日依山尽, ";
return 0;
}
本文介绍了一种利用VirtualProtectEx函数修改程序中main函数入口地址的方法,从而实现更改程序输出内容的技术细节。通过调整内存保护属性并重定向main函数到新的函数地址,可以改变程序的行为。
981

被折叠的 条评论
为什么被折叠?



