日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OllyDbg笔记-修改Messagebox的标题

發布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OllyDbg笔记-修改Messagebox的标题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

基本概念

實例


?

基本概念

調試逆向分為動態分析和靜態分析;

動態分析:使用調試工具加載程序并且運行,隨著程序運行調試者可以隨時中斷目標指令流程。

靜態分析:很多不方便的場合運行軟件。

OD(OllyDbg):動態調試工具;

IDA Pro:靜態調試工具

OD相關的快捷鍵:

F2

下斷點,也就是指定斷點的地址

F3

加載一個可執行程序,進行調試分析

F4

程序執行到光標處

F5

縮小、還原當前窗口

F7

單步步入

F8

單步步過

F9

直接運行程序,遇到斷點處,程序暫停

Ctrl+F2

重新運行程序到起始處,一般用于重新調試程序

Ctrl+F9

執行到函數返回處,用于跳出函數實現

Alt+F9

執行到用戶代碼處,用于快速跳出系統函數

Ctrl+G

輸入十六進制地址,快速定位到該地址處

?

實例

這里不研究遠程線程注入,在此直接把基址固定,

設置如下:

使用VS2012編寫如下代碼:

#include <windows.h> #include <iostream> #include <string> using namespace std;int WINAPI WinMain (HINSTANCE hinstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow) {while(1){MessageBoxA(NULL, "World", "Hello", 0);}return 0; }

這里先使用OD修改標題:

從這里可以看到,在匯編里面,一個函數的參數入棧,剛好是相反的。

原始運行截圖如下:

這里直接進入0041CC7C地址就可以了。這里

修改為:

讓他跑起來:

這個就是OD的基本做法,下面來寫個程序去改!

這里有個知識點,就是有些進程頁是只讀的,不能修改,可以使用VirtualProtectEx這個函數改變其屬性如下,把一個只讀的改成可讀可寫的,但注意最后要改回來

DWORD dwPrev;if(!VirtualProtectEx(hProcess, (LPVOID)(offset - 0x1), 10, PAGE_EXECUTE_READWRITE, &dwPrev)){cout << "VirtualProtectEx failed " << GetLastError() << " " << dwPrev << endl;getchar();return 0;}.... .... .... ....if(!VirtualProtectEx(hProcess, (LPVOID)(offset), DWORD(sizeof(title)), dwPrev, &dwPrev)){cout << "VirtualProtectEx failed 2" << GetLastError() << " " << dwPrev << endl;getchar();return 0;}

這樣其標題就是空白的了

完整代碼如下:

#include <iostream> #include <windows.h> #include <string> #include <Psapi.h> using namespace std;int main(int argc, int *argv[]){HWND hwnd = FindWindowA(nullptr, "Hello");if(!hwnd){getchar();return 0;}DWORD pid = 0;GetWindowThreadProcessId(hwnd, &pid); //獲取進程標識if (pid == 0){cout << "GetWindowThreadProcessId failed" << endl;getchar();return 0;}HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, pid);if(hProcess == NULL){cout << "OpenProcess failed" << endl;getchar();return 0;}DWORD offset = 0x0041CC7C;BYTE value[5] = {0};DWORD dwSize;DWORD title = 0x0;//if(ReadProcessMemory(hProcess, (LPVOID)offset, &value, sizeof(value) / sizeof(value[0]), &dwSize) == 0){// cout << "modify failed" << endl;// cout << value << endl;//}//else{// cout << "read : " << value << endl;//}DWORD dwPrev;if(!VirtualProtectEx(hProcess, (LPVOID)(offset - 0x1), 10, PAGE_EXECUTE_READWRITE, &dwPrev)){cout << "VirtualProtectEx failed " << GetLastError() << " " << dwPrev << endl;getchar();return 0;}if(WriteProcessMemory(hProcess, (LPVOID)offset, &title, DWORD(sizeof(title)), nullptr) == 0){cout << "failed" << endl;cout << GetLastError() << endl;getchar();return 0;}else{cout << "Finished" << endl;cout << value << endl;}if(!VirtualProtectEx(hProcess, (LPVOID)(offset), DWORD(sizeof(title)), dwPrev, &dwPrev)){cout << "VirtualProtectEx failed 2" << GetLastError() << " " << dwPrev << endl;getchar();return 0;}CloseHandle(hProcess);getchar();return 0; }

項目打包下載地址:

https://github.com/fengfanchen/CAndCPP/tree/master/HackMessageBox

總結

以上是生活随笔為你收集整理的OllyDbg笔记-修改Messagebox的标题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。