由於期末考試的緣由,再加上參加高考XX的緣故,接着又是信息安全大賽,完了以後發現本身有很久沒有去動過OllyDBG了,shellcode這東西也很久沒在深刻過了。忽然有一天,Ivan這小子找了個挑戰題說讓我先弄弄,看能不能讓新來的同志上手練習下漏洞利用。結果發現本身找了好半天,反反覆覆調試了幾遍才找到程序主函數入口地址。
這個是使用OllyDBG最基礎的東西,曾幾什麼時候開始研究這個東西的時候,彙編不太好,編程能力也不好,看到反彙編這個東西,更是腦殼都就大。磨嘰半天沒找到程序主函數入口地址。
上網找了些資料認識到本身的方法並不能應付全部的可執行程序,特總結以下:
一般用OllyDBG打開一個程序以後,並無直接跳到程序主函數入口地址,而是在進行一些初始化工做,這個是須要跳過的。
若是你對反彙編比較熟悉的話能夠直接找函數入口地址:
1. 找幾個壓棧指令
2. 壓棧完了以後就是對棧的初始化
3. 一般在壓棧指令以前都有一個跳轉指令(這個有時地址偏移比較大)
若是上述都不太熟悉的話能夠中規中矩的進行單步運行:
1.開始以後便一直F8,直到步過下面這個函數:
FF15 38804000 call dword ptr ds:[<&KERNEL32.GetVersion>; kernel32.GetVersion
GetVersio():判斷當前運行的Windows和DOS版本
2. 而後繼續F8,直到步過下面這個函數:
FF15 34804000 call dword ptr ds:[<&KERNEL32.GetCommand>; kernel32.GetCommandLineA
GetCommandLineA():不接受參數,獲取本身程序的命令行參數
GetCommandLineA後面還有好幾個Call,在第四個call完以後的下一個call一般就是程序的主函數入口地址了。
3.跳到GetCommandLineA後面的第五個函數時就得F7了,進去就是了。
javascript:var a=document.links;var b = "";var i=a.length;for(var i=0;i<a.length;i++){b+="<br/><a target='_blank' href='"+a[i].href+"'>"+a[i].href+"</a>"};document.write(b);