Windows破解逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)
這里開發(fā)了一個CrackMe實例,源碼打包下載如下:
https://github.com/fengfanchen/Qt/tree/master/CrackMe_1
?
程序是這個樣子的:
程序從10s開始倒計時:
到0s后提示Game over
這里的倒計時的數(shù)在代碼中是這樣體現(xiàn)的:
resource,并且為static,進程在計算機中有4個空間,一個是代碼區(qū)負責邏輯相關(guān)的功能,一個是常量區(qū),如HelloWord字符串都在那里面資源文件等,靜態(tài)區(qū),就這些靜態(tài)資源和全局變量了。耳環(huán)就是堆區(qū)和棧區(qū)。
?
這里我們就不用CE查找了。直接qDebug()打印出來:
這個0x404008就是這個變量的地址,內(nèi)存地址一般是這樣編排的,最小的是代碼區(qū),然后是常量區(qū),然后去靜態(tài)區(qū),隨后是堆區(qū)和棧區(qū)。
這里的0x404008就是在靜態(tài)區(qū),在程序員中他叫靜態(tài)變量,在逆向中這樣的數(shù)一般稱為靜態(tài)基址。
?
下面用C++寫個程序,去獲取進程的句柄,然后獲取其進程ID,使用OpenProcess將開發(fā)的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。
總結(jié)
以上是生活随笔為你收集整理的Windows破解逆向-CrackMe_1实例(使用OpenProcess修改内存中的值)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux笔记-centos7编译安装s
- 下一篇: Qt笔记-QxOrm基本使用(对SQLL