真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

利用IDAPython給WindowsAPI下條件斷點(diǎn)-創(chuàng)新互聯(lián)

問題描述:在逆向分析過程,經(jīng)常需要跟蹤操作系統(tǒng)API的調(diào)用情況。使用IDA進(jìn)行調(diào)試的過程中,可以通過界面操作給指定API設(shè)置斷點(diǎn)。但是界面操作存在操作不便,不利于分析自動化等缺陷。使用IDAPython腳本實(shí)現(xiàn)給API函數(shù)下條件斷點(diǎn),可有效解決上述問題。

成都創(chuàng)新互聯(lián)致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、微信小程序、公眾號商城、等建站開發(fā),成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

一、通過界面操作給Windows API下斷點(diǎn)

1、操作過程

以給LoadLibraryA函數(shù)下斷點(diǎn)為例,程序ida01.exe(EXE文件)對應(yīng)的源代碼如下:

#include "windows.h"

int main()
{
    LoadLibrary("E:\\Office10\\SAEXT.DLL");
    LoadLibrary("E:\\document\\My Knowledge\\Update_x86\\WizTools.dll");
    return 0;
}

①用IDA打開EXE文件后,設(shè)置調(diào)試器在入口暫停。操作路徑:點(diǎn)擊Debugger→Debugger setup,選中Suspend on process entry point。

②按F9,運(yùn)行EXE利用IDAPython給Windows API下條件斷點(diǎn)

③在上圖的modules窗口中找到kernel32.dll,然后雙擊,在右側(cè)出現(xiàn)Module:kernel32.dll標(biāo)簽窗口,如下圖所示
利用IDAPython給Windows API下條件斷點(diǎn)

④找到LoadLibraryA函數(shù),然后雙擊,IDA View窗口將導(dǎo)航至LoadLibraryA函數(shù)處,點(diǎn)擊指定地址左側(cè)的小圓點(diǎn),即可下斷點(diǎn)。下完斷點(diǎn)后如下圖所示
利用IDAPython給Windows API下條件斷點(diǎn)

⑤如果只在加載SAEXT.DLL時中斷執(zhí)行,那么可以將斷點(diǎn)設(shè)置成條件斷點(diǎn)。具體方法:在Breakpoints窗口中右擊指定斷點(diǎn),點(diǎn)擊Edit,然后在condition編輯框中輸入strstr(GetString(Dword(esp+4),-1, 0), "SAEXT.DLL") != -1。需要說明的是,此編輯框中必須是IDC腳本表達(dá)式,不能使用IDAPython腳本。表達(dá)式中Dword(esp+4)是獲取第一個參數(shù)值,在此例中就是文件路徑的指針,GetString(Dword(esp+4))是獲取路徑,strstr則進(jìn)行搜索,如果路徑中包含SAEXT.DLL為真,斷點(diǎn)才有效。

2、問題分析

①上述下斷點(diǎn)的過程,首先要確定API函數(shù)所在的DLL,而分析人員很難記住API函數(shù)與所在DLL的對應(yīng)關(guān)系

②無法與自動化腳本想結(jié)合,整個過程都需要人工介入

二、IDAPython腳本實(shí)現(xiàn)Windows API條件斷點(diǎn)

1、思路

將所有Windows API與DLL的對應(yīng)關(guān)系保存到文件,當(dāng)用戶下斷點(diǎn)時,腳本自動查找API函數(shù)對應(yīng)的DLL文件名。找到文件名后,利用文件名+函數(shù)名定位函數(shù)地址,然后下斷點(diǎn)并設(shè)置相關(guān)條件。

2、腳本代碼

由兩個文件組成,一個是IDAPython腳本break_api.py,一個是存放API函數(shù)和DLL對應(yīng)關(guān)系的數(shù)據(jù)文件win_api.dat(可從附件下載)。兩個文件都放到了[IDA安裝目錄]\Python\script下,break_api.py腳本內(nèi)容如下:

def GetApiModule(api_name):
    try:
        path = GetIdaDirectory()
        path = path + '\\python\\script\\win_api.dat'
        f = open(path, 'r')
        strall = f.read()
        f.close()
    except IOError:
        Message('Can\'t open win_api.dat.')
        return 'none'

    pos = strall.find(api_name)
    if (-1 == pos):
        Message('Can\'t find the api.')
        return 'none'
    beg = strall.rfind('<', 0, pos)+1
    end = strall.find('>', beg)
    return strall[beg:end]

def BptAPI(api_name):
    dll_name = GetApiModule(api_name)
    if dll_name == 'none':
        Message('API err.')
        return
    name = dll_name[0:len(dll_name)-4] + '_' + api_name
    ea = LocByName(name)
    AddBpt(ea)
    SetBptCnd(ea, 'strstr(GetString(Dword(esp+4),-1, 0), "SAEXT.DLL") != -1')

代碼很簡單,不做多余的解釋。

3、腳本使用方法

①用IDA打開EXE文件后,設(shè)置調(diào)試器在入口暫停。操作路徑:點(diǎn)擊Debugger→Debugger setup,選中Suspend on process entry point。

②按F9,運(yùn)行EXE

③alt+f7,導(dǎo)入break_api.py

④在Output window窗口,選擇Python腳本,然后調(diào)用BptAPI('LoadLibraryA'),即可給LoadLibraryA函數(shù)設(shè)置條件斷點(diǎn),具體條件和前面的界面操作一致,如果有其他需求,可對條件表達(dá)式進(jìn)行修改。

三、小結(jié)

本文只是簡單給出使用IDAPython腳本給windows API函數(shù)下條件斷點(diǎn)的方法,讀者朋友們可根據(jù)各自需求進(jìn)行靈活應(yīng)用,進(jìn)而實(shí)現(xiàn)復(fù)雜分析過程的自動化。希望對大家有幫助。

附件下載

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


本文題目:利用IDAPython給WindowsAPI下條件斷點(diǎn)-創(chuàng)新互聯(lián)
本文地址:http://weahome.cn/article/djseeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部