图解Ollydbg简单逆向操作案例
1 Ollydbg調(diào)試helloworld程序
調(diào)試用VC++編寫(xiě)的helloworld程序,在反匯編代碼中查找main函數(shù),MessageBox函數(shù);
?
#include "windows.h" #include "tchar.h"int _tmain(int argc, TCHAR * argv[]) {MessageBox(NULL,"Hello World!","bcbobo21cn",MB_OK);return 0; }
在調(diào)試工具條上右擊,選擇 組建;
?
在彈出的 組建 對(duì)話(huà)框中,選擇 Win32 Release;
把HelloWorld編譯為release版本。
啟動(dòng)Ollydbg漢化版;啟動(dòng)失敗;
改用英文原版;打開(kāi)前面的helloworld程序;
停留在00401020處;
調(diào)試器停止的地點(diǎn)是EP代碼,EP即入口點(diǎn);再往下找找;
再往下,看到了調(diào)用GetVersion函數(shù),GetCommandLineA函數(shù);獲取命令行參數(shù)之后,應(yīng)該就到main函數(shù)了;
看到上面CALL 00401000;
查看00401000;
看到了VC程序中給出的參數(shù);00401000處先PUSH了4個(gè)參數(shù)入棧,然后調(diào)用了USER32中的MessageBoxA;
?
2 捕獲Windows計(jì)算器顯示輸入數(shù)字的動(dòng)作
相關(guān)資料顯示,Windows計(jì)算器顯示用戶(hù)輸入是使用了SetWindowText函數(shù);用PE信息查看工具打開(kāi)看下;計(jì)算器的基地址是01000000;
該工具會(huì)給出詳細(xì)PE信息;
在工具條上按 I 鍵,才能看到PE導(dǎo)入表;
看到了User32中的SetWindowText;VA是進(jìn)程虛擬內(nèi)存的絕對(duì)地址,RVA是從某個(gè)基準(zhǔn)位置開(kāi)始的相對(duì)地址;
下面開(kāi)始捕獲計(jì)算器顯示輸入數(shù)字的動(dòng)作;
打開(kāi)calc.exe,停留在003D2D6C;
右擊,選擇如下菜單;
在所有SetWindowText處設(shè)置斷點(diǎn);
執(zhí)行計(jì)算器,看下面代碼,TranslateMessage、DispatchMessage、GetMessage;此處是計(jì)算器窗口的消息循環(huán)部分;
在計(jì)算器中輸入數(shù)字,程序中斷在了00BC3678處的SetWindowText;
?
看右下角的棧窗口,發(fā)現(xiàn)了輸入的數(shù)字;8957;輸入了4次數(shù)字;在此中斷了4次;
3 捕獲記事本保存文件的動(dòng)作和保存的文本
打開(kāi)Windows自帶記事本,
不能打開(kāi);Ollydbg不支持64位程序;本機(jī)為64位;
看下本機(jī)的notepad.exe,它確實(shí)是64位的;
網(wǎng)上重新下一個(gè)notepad.exe;打開(kāi)看看,是32位的;下面調(diào)試此程序;
根據(jù)資料;notepad.exe保存文件是調(diào)用了WriteFile,位于Kernel32中;
執(zhí)行記事本,排序以后,在所有WriteFile處設(shè)置斷點(diǎn);
程序停留處是0100739D;
運(yùn)行,記事本窗口出現(xiàn);輸入“AAAA”;然后保存;點(diǎn)擊 保存 按鈕后,程序中斷在01004C2A處的WriteFile;
?
看右下角的棧窗口,發(fā)現(xiàn)了輸入的文本“AAAA”;
總結(jié)
以上是生活随笔為你收集整理的图解Ollydbg简单逆向操作案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: web开发资源链接
- 下一篇: SqlServer性能监控和优化总结