Windows破解&逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)
Posted IT1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows破解&逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)相关的知识,希望对你有一定的参考价值。
这里开发了一个CrackMe实例,源码打包下载如下:
https://github.com/fengfanchen/Qt/tree/master/CrackMe_1
程序是这个样子的:
程序从10s开始倒计时:
到0s后提示Game over
这里的倒计时的数在代码中是这样体现的:
resource,并且为static,进程在计算机中有4个空间,一个是代码区负责逻辑相关的功能,一个是常量区,如HelloWord字符串都在那里面资源文件等,静态区,就这些静态资源和全局变量了。耳环就是堆区和栈区。
这里我们就不用CE查找了。直接qDebug()打印出来:
这个0x404008就是这个变量的地址,内存地址一般是这样编排的,最小的是代码区,然后是常量区,然后去静态区,随后是堆区和栈区。
这里的0x404008就是在静态区,在程序员中他叫静态变量,在逆向中这样的数一般称为静态基址。
下面用C++写个程序,去获取进程的句柄,然后获取其进程ID,使用OpenProcess将开发的C++程序注入进去。修改0x404008地址的值,代码如下:
#include <iostream>
#include <Windows.h>
using namespace std;
int main(int argc, char *argv[]) {
HWND h = FindWindow(NULL, L"crackMe_1");
if (!h) {
cout << "The hwnd is null" << endl;
return -1;
}
DWORD processId = 0;
GetWindowThreadProcessId(h, &processId);
if (processId == 0) {
cout << "The processId is 0" << endl;
return -1;
}
HANDLE hProcess = 0;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processId);
if (hProcess == 0) {
cout << "The hProcess is 0" << endl;
return -1;
}
DWORD resourceAddr = 0x404008;
DWORD newValue = 99999;
BOOL ret = WriteProcessMemory(hProcess, (LPVOID)resourceAddr, &newValue, 4, 0);
cout << "Thre ret is " << ret << endl;
getchar();
return 0;
}
程序运行截图如下:
这里就将值修改99999。
以上是关于Windows破解&逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)的主要内容,如果未能解决你的问题,请参考以下文章