我們在Windows 10上開始python逆向之旅,首先開始搭建開發環境,python解釋器使用最新的3.6.1,IDE使用PyCharm社區版2017.1.3,下載地址如下所示,下載完成后直接雙擊安裝包安裝即可,隨后設置PyCharm的Project Interpreter為剛才安裝的Python解釋器就可以了。
【Python】https://www.python.org/downloads/
【PyCharm】http://www.jetbrains.com/pycharm/download/#section=windows
首先介紹一下ctypes,它是一個用于Python的外部函數庫,提供了與C語言兼容的數據類型,允許調用動態鏈接庫或共享庫中的函數,還可以包裝這些庫。下面是ctypes中的數據類型與C語言、Python中的數據類型的對應關系。
ctypes中的數據類型全部通過class來實現,在Python中加載C庫涉及如下幾個類。
加載C庫更簡單的方法是使用如下幾個預先創建的類實例。
ctypes.cdllctypes.oledllctypes.windllctypes.pydllctypes.pythonapi
上面提到了函數調用慣例cdecl和stdcall,cdecl的意思是函數的參數從右往左依次壓入棧內,函數的調用者在函數執行完成之后負責函數的平衡,常用于X86架構的C語言里,返回值存儲在EAX寄存器中,從匯編代碼的角度來看,函數參數從右往左依次壓棧,然后調用函數,最后修改棧指針ESP為原來的位置。stdcall,參數傳遞的順序也是從右到左,不過棧的平衡處理由函數自己完成,而不是調用者,返回值同樣存儲在EAX中,也就是說,函數參數壓棧、函數調用之后沒有像cdecl一樣的棧指針ESP移動。
下面的例子在Python中調用C的printf函數,printf屬于“C:/Windows/System32/msvcrt.dll”,也就是Linux上的“libc.so”。
from ctypes import *msvcrt = cdll.msvcrtmessage = b"Hello World/n"msvcrt.printf(b"Message is %s", message)
上面的代碼輸出“Message is Hello World”。另外,ctypes還允許在Python中定義結構和聯合等其它高級功能,詳細介紹請參考https://docs.python.org/3.6/library/ctypes.html?highlight=ctypes#。
使用調試器,能夠對程序進行動態跟蹤和分析,特別是涉及到exploit、fuzzer和病毒分析的時候,動態分析程序的能力就顯得非常重要了。調試程序時,如果可以獲得源代碼,調試起來就容易一些,也就是透明的白盒測試,如果沒有源代碼,也就是黑盒測試,想要得到理想的結果,那就必須擁有高超的逆向技術和逆向工具的幫助。黑盒測試包括用戶模式與內核模式兩種情況,兩者有不同的權限。
新聞熱點
疑難解答