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修改内存中的值)的主要内容,如果未能解决你的问题,请参考以下文章

记一次Android App逆向入门实战(逆向思路&工具使用&CrackMe)

OD常用断点之CC断点

2022年中职网络安全逆向题目整理合集

逆向工程实战--Afkayas.1

该提不简单

reverse新160个CrackMe之154-cpp_crackme1——MFC+纯算法逆向