2.逆向分析Hello World!程序-上
?
?
代碼窗口:默認用于顯示反匯編代碼,還用于各種注釋、標簽,分析代碼時顯示循環、跳轉位置等信息
寄存器窗口:實時顯示CPU寄存器的值,可用于修改特定的寄存器
數據窗口:以Hex/ASCII/Unicode值的形式顯示進程的內存地址,也可在此修改內存地址
棧窗口:實時顯示ESP寄存器指向的進程棧內存,并允許修改
EP是Windows可執行文件(EXE、DLL、SYS等)的代碼入口點,是執行應用程序時最先執行的代碼的起始位置,它依賴于CPU。用OD調試XX.exe剛開始默認跳轉的位置就是EP處。
?
先補充幾個快捷鍵:
????Ctrl+F2??重新開始調試(終止正在調試的進城后再次運行)
????F7??????單步步入,可以進入到函數里
????F8??????單步步過,不進入任何函數,往下走一條指令
????Ctrl+F9??一直執行,知道遇到RETN指令,跳出函數
加載exe到od里,直接來到EP處,然后就是一路F7/F8[這個是剛開始,后期有經驗了就不會這么無腦的從頭開始找了]call,是函數調用,遇到call想進函數里看看就F7想路過就F8然后是找到這么一個地方(注意你的地址和我的地址可能不同)
?
我的PE文件代碼段FOA(400)->RVA(1000)->VA(1341000)這個計算方式以后說。
然后就F7進去看看:
?
紅色注釋部分就是我們要找的函數。而且在call之前各種把參數push進去,還有就是看到了字符串地址在013420F8處,從棧和內存里也能清楚的看到:
同時現在考慮下,這個調用MessageBox函數的函數不就是main函數嗎?執行到這個函數的return處,在F8返回上一層:
?
回來后就準備開始執行add了,那么上面那個call?NXYod.00341000就是main函數地址碼。這個其實是可以算出來的。還是根據FOA->RVA->VA?最后那個RVA->VA在OD里可以直接Ctrl+G輸入RVA他會自動跳轉到VA處,比如我的FOA是400,我算出來RVA是1000(我自己寫了個計算工具),然后我在OD里直接Ctrl+G
?
OK之后直接跳轉到:
?
這直接就是main函數了。
?
?
總結
以上是生活随笔為你收集整理的2.逆向分析Hello World!程序-上的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.关于逆向工程(RE、RCE)-笔记
- 下一篇: 防止SQL注入