我們?cè)赪indows 10上開(kāi)始python逆向之旅,首先開(kāi)始搭建開(kāi)發(fā)環(huán)境,python解釋器使用最新的3.6.1,IDE使用PyCharm社區(qū)版2017.1.3,下載地址如下所示,下載完成后直接雙擊安裝包安裝即可,隨后設(shè)置PyCharm的Project Interpreter為剛才安裝的Python解釋器就可以了。
【Python】https://www.python.org/downloads/
【PyCharm】http://www.jetbrains.com/pycharm/download/#section=windows
首先介紹一下ctypes,它是一個(gè)用于Python的外部函數(shù)庫(kù),提供了與C語(yǔ)言兼容的數(shù)據(jù)類型,允許調(diào)用動(dòng)態(tài)鏈接庫(kù)或共享庫(kù)中的函數(shù),還可以包裝這些庫(kù)。下面是ctypes中的數(shù)據(jù)類型與C語(yǔ)言、Python中的數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系。

ctypes中的數(shù)據(jù)類型全部通過(guò)class來(lái)實(shí)現(xiàn),在Python中加載C庫(kù)涉及如下幾個(gè)類。
加載C庫(kù)更簡(jiǎn)單的方法是使用如下幾個(gè)預(yù)先創(chuàng)建的類實(shí)例。
ctypes.cdllctypes.oledllctypes.windllctypes.pydllctypes.pythonapi
上面提到了函數(shù)調(diào)用慣例cdecl和stdcall,cdecl的意思是函數(shù)的參數(shù)從右往左依次壓入棧內(nèi),函數(shù)的調(diào)用者在函數(shù)執(zhí)行完成之后負(fù)責(zé)函數(shù)的平衡,常用于X86架構(gòu)的C語(yǔ)言里,返回值存儲(chǔ)在EAX寄存器中,從匯編代碼的角度來(lái)看,函數(shù)參數(shù)從右往左依次壓棧,然后調(diào)用函數(shù),最后修改棧指針ESP為原來(lái)的位置。stdcall,參數(shù)傳遞的順序也是從右到左,不過(guò)棧的平衡處理由函數(shù)自己完成,而不是調(diào)用者,返回值同樣存儲(chǔ)在EAX中,也就是說(shuō),函數(shù)參數(shù)壓棧、函數(shù)調(diào)用之后沒(méi)有像cdecl一樣的棧指針ESP移動(dòng)。
下面的例子在Python中調(diào)用C的printf函數(shù),printf屬于“C:/Windows/System32/msvcrt.dll”,也就是Linux上的“l(fā)ibc.so”。
from ctypes import *msvcrt = cdll.msvcrtmessage = b"Hello World/n"msvcrt.printf(b"Message is %s", message)
上面的代碼輸出“Message is Hello World”。另外,ctypes還允許在Python中定義結(jié)構(gòu)和聯(lián)合等其它高級(jí)功能,詳細(xì)介紹請(qǐng)參考https://docs.python.org/3.6/library/ctypes.html?highlight=ctypes#。
使用調(diào)試器,能夠?qū)Τ绦蜻M(jìn)行動(dòng)態(tài)跟蹤和分析,特別是涉及到exploit、fuzzer和病毒分析的時(shí)候,動(dòng)態(tài)分析程序的能力就顯得非常重要了。調(diào)試程序時(shí),如果可以獲得源代碼,調(diào)試起來(lái)就容易一些,也就是透明的白盒測(cè)試,如果沒(méi)有源代碼,也就是黑盒測(cè)試,想要得到理想的結(jié)果,那就必須擁有高超的逆向技術(shù)和逆向工具的幫助。黑盒測(cè)試包括用戶模式與內(nèi)核模式兩種情況,兩者有不同的權(quán)限。
新聞熱點(diǎn)
疑難解答
圖片精選