内存黑客/修改C++
Memory Hacking/Modifying in C++
所以,我正在尝试用C++编写一个程序,以修改另一个程序中的值。就我而言,Windows的计算器。代码如下:
#include <iostream>
#include <windows.h>
using namespace std;
int main(void) {
int nVal = 2000;
HWND hWnd = FindWindowA(0, "Calculator");
if(hWnd == 0){
cerr << "Could not find window." << endl;
} else {
DWORD PID;
GetWindowThreadProcessId(hWnd, &PID);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, PID);
if(!hProc) {
cerr << "Cannot open process." << endl;
} else {
int stat = WriteProcessMemory(hProc, (LPVOID)0xC6A0EB922C, &nVal, (DWORD)sizeof(nVal), NULL);
if(stat > 0){
clog << "Memory written to process." << endl;
} else {
cerr << "Memory couldn't be written to process." << endl;
}
CloseHandle(hProc);
cin.get();
}
}
return 0;
}
程序尝试覆盖一个值,该值与计算器中的"MS"按钮一起存储。问题是程序无法做到这一点。我尝试以管理员身份运行可执行文件,但没有任何变化。我在YouTube视频中找到了这段代码,这家伙正在使用XP,我使用的是Windows 8。
我使用作弊引擎找到了0xC6A0EB922C地址,并尝试修改里面的值,它运行良好!
如果有人能帮助我,请做。谢谢!
从您的硬编码地址进行判断,您的计算器将作为 64 位应用程序运行。
如果您的程序编译为 32 位,则硬编码地址(LPVOID)0xC6A0EB922C
将被截断为 32 位,因此是错误的。
要解决此问题,您应该将程序编译为 64 位或使用 32 位计算器作为测试目标。它位于C:WindowsSysWOW64calc.exe
。
WinAPI 函数可能会失败,并且它们执行的操作比人们想要的要多。始终检查返回值并在发生错误时调用GetLastError()
,以便了解失败的原因。
请记住以管理员身份运行程序或在打开其他进程时关闭 UAC。
除了typ1232所说的之外,ALSR也可能妨碍你。基本上,为了阻止攻击者覆盖程序中的硬编码内存地址,ALSR 将随机化地址空间中的绝对位置。我不是 100% 确定 calc.exe 使用 ASLR,因为它必须在编译时启用(除非您使用 EMET 等工具)
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 修改创建帐户程序
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何从子成员函数修改父公共成员变量
- 修改 VS Code 中的默认C++代码段
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 如何使用递归打印修改后的星号三角形图案
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么可以修改数组 b?
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 修改的Fibbonaci C++得到一个大的负数
- clang 插件:在编译过程中修改 AST