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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程

發布時間:2024/9/27 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題記: 最近知道了有一種方法,可以獲取到程序的執行流程,具體做法是先獲取程序中每一個函數的地址,在這些地址上設置斷點,然后讓程序運行起來,hook調試器,斷點中斷時,不要停下來繼續執行,并記錄命中的斷點,這樣就得到了程序的執行流程。

這個方法是利用IDA的一個插件IDAPython實現的,這個插件可以hook IDA內置的調試器,通過調用一個py腳本實現以上功能,執行腳本時IDA提示窗口會不停的輸出HIT * 0x0000000,這些地址便是程序執行過的函數。可是他的速度實在是讓人蛋疼,程序基本上算是卡死了。

于是本人進行了一些修改,把IDA里面調試器做的事讓OD去做,這樣就不會有卡死的情況。于是,首先要從IDA里把函數的地址導出,py腳本如下

from idaapi import *

current_addr = ScreenEA()

i=0

#保存斷點文件的完整路徑,這里需要自己修改

filePath=” F:\\Users\\Administrator\\Desktop\\bp_Func.txt”

myfile = open(filePath, 'w')

for function in Functions(SegStart( current_addr ), SegEnd( current_addr )):

str_f=str(hex(function))

myfile.write("bp 0"+ str_f[2:]+ '\n') #以bp xxxxxxx的形式輸出斷點信息

i=i+1

print "Out Put bp number %d" % i

myfile.close()

導出函數地址保存到指定路徑的bp_Func.txt中

打開IDA,載入目標程序,安裝好了IDAPython插件以后IDA IDAPython的菜單項目,有的是版本IDA點文件能看到,有的是編輯---plugins 下面。這里以一個小程序ipMsg為例,點擊IDAPython菜單項,選擇剛才編寫的py腳本文件,運行成功后,IDA提示窗口會顯示導出斷點的數量,這時候bp_Func.txt里面就保存有斷點的信息。

執行結果

Out Put bp number 566

打開bp_Func.txt 會看到有很多行bp xxxxxxx

接下來再編寫OdbgScript腳本:

//bc

//msg "是否允許腳本"

var _bp_nub

#INC " bp_Func.txt " //導入斷點信息

msg "斷點設置完畢!"

wrta "out.txt","-----------------------------"

continue:

add _bp_nub,1

//msg _bp_nub

wrta "out.txt","\r\n"

wrta "out.txt",_bp_nub

wrta "out.txt","-->"

wrta "out.txt",eip

run

jmp continue

OdbgScript腳本的功能是通過#INC導入bp_Func.txt執行里面的bp指令,然后就不停執行run指令,run相當于F9,沒運行一次記錄EIP的信息到out.txt中。當然這里的2個txt文件需要在同一個目錄下。

好了,再用od載入ipMsg.exe,按工具欄上的”B”,顯示斷點信息。

插件--->OdbgScript--->運行腳本,等上一會所有的斷點設置完畢后會彈出一個框顯示”斷點設置完畢!”

先不確認,也不要取消,那個框先放一邊

我們知道,window有消息驅動機制,程序需要去處理消息循環這些代碼由開放工具幫我們實現,找到那些函數先把那些斷點取消掉,要不然會一直在那個地方浪費時間,Ctrl+N 找到這些函數PostMessage、PeekMessage、TranslateMessage,在這些函數上按回車找到調用的代碼,F2把這些地方的斷點取消掉。也可以在運行到這些斷點的時候按F2。

現在點確認運行腳本,會看到,od在哪里像抽風了一樣,有的地方會不停的執行,通過剛才的方法處理消息的地方并沒有被完全排除掉,可以再按F2將一些反復執行的斷點去掉。這里有個麻煩就是要不停的按F2,因為太多的地方設置了斷點。

過一段時間od就會穩定下來,程序正常的運行起來了。這個時候只有把鼠標移到程序的圖標會發現od又會瘋狂的中斷,這當然還是消息循環啦,手動刪除那些斷點。獲取焦點時od就沒有反應了,如果你對獲取焦點的事件感興趣,可以關注這個地方,od有Run跟蹤的功能,打開它,獲取焦點時執行的代碼就會被記錄下來。

下面簡單分析一下這個程序的按鈕事件,我這里干擾的斷點基本上已經去掉了,顯示界面,拖動窗體,點擊窗體OD都不會有動靜,附加中有我經過篩選的斷點文件bp_Func.txt。

先打開OD的Run跟蹤,調試---->打開或清除Run跟蹤,查看--->Run跟蹤,確認記錄是空的。切換到ipMsg的界面用戶列表里不用選任何人,直接點”發送”,回到OD 查看--->Run跟蹤,會發現幾條記錄,00411F6F就是發送按鈕的單擊事件。

0041200C |. FFD3 call ebx ; \IsDlgButtonChecked

//這里很顯然就是判斷界面上發送按鈕后面的復選框有沒有選上。

用通樣方法可以得到”關于”按鈕的單擊事件就,還有關于對話框上點擊顯示網頁那個按鈕,00409BF7 是打開網站的按鈕的事件,往下看我們知道 004210C4這個地址是存放網址的字符串。

好了,以上簡單分析了一下,其他的各位自己實驗吧。

有了這樣的方法我們便可不通過提示信息也能找到程序中的關鍵代碼。

5.29 補充,見16樓

上傳的附件:

瘋狂的斷點.rar

(85.91kb,165次下載)

IPMSG2007.rar

(72.52kb,160次下載)

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python代码执行过程记录_[原创]IDAPython+OdbgScript动态获取程序执行流程的全部內容,希望文章能夠幫你解決所遇到的問題。

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