用Python玩玩反彙編
今天要給大家介紹一款全能型的反彙編引擎Capstone。這一款引擎不僅能夠跨平台,還跨多種語言,其中就有我們喜愛的Python。
我們利用Capstone也能輕鬆寫出高大上的反彙編工具啦~~~
Capstone 能輕鬆反彙編多種平台的機器碼,例如:x86(普通PC機)、ARM(手機用得比較多)、MIPS(路由) //括弧中僅作舉例。
實驗環境:
macOS
Python 2.7
step 0x0 安裝Capstone 庫
Mac OSX 系統:
brew install capstonen
Ubuntu :
sudo apt-get install libcapstone3n
其它系統或方法可以參考:
Documentation
step 0x1 Clone
我們去git上Clone 一份Capstone 源碼,其中包含了大量示範代碼和文檔
git clone https://github.com/aquynh/capstone.gitn
切換到Python 示範代碼的目錄:bindings/python,這裡你能找到大量的py演示代碼。
比如,我是做ARM逆向分析的,所以對ARM反彙編比較關心,就看test_arm.py 這一份代碼了。
python test_arm.pyn
step 0x2 最簡單的例子
# test1.pynfrom capstone import *nCODE = b"x55x48x8bx05xb8x13x00x00"nmd = Cs(CS_ARCH_X86, CS_MODE_64)nfor i in md.disasm(CODE, 0x1000):n print("0x%x:t%st%s" %(i.address, i.mnemonic, i.op_str)n
以上代碼片段的輸出結果為:
$ python test1.pynn0x1000: push rbpn0x1001: mov rax, qword ptr [rip + 0x13b8]n
代碼的第二行導入了Capstone的庫,第三行是一段十六進位表示的機器碼。
第四行初始化了Capstone的Cs類,初始化需要兩個參數,分別是平台的架構和模式。
在這一段代碼中,我們想反彙編的是一段x86的64位彙編代碼。
第五行,通過Cs類的disasm對二進位的機器碼進行反彙編,第一個參數是機器碼Byte數據,第二個參數是這段代碼的「基地址」。該函數為反彙編到一條錯誤的指令為止。
第六行,輸出地址信息、助記符、操作數字元串。
step 0x3 詳細信息
Capstone有一項非常強大的技能,它能分析彙編指令的隱含信息,比如「call xxx」是調用xxx這個函數,實質是把下一條指令地址入棧後修改EIP寄存器至XXX地址,Capstone就能將這種隱含信息分析出來。
因為分析需要花費更多的時間,所以默認是關閉的,需要開發者自己打開。
打開方法:
md = Cs(CS_ARCH_X86, CS_MODE_32)nmd.detail = Truen
如果不使用可,就及時關閉:
md.detail = Falsen
完整的測試代碼:
1 from capstone import *n 2 from capstone.arm import *n 3 n 4 CODE = b"xf1x02x03x0ex00x00xa0xe3x02x30xc1xe7x00x00x53xe3"n 5 n 6 md = Cs(CS_ARCH_ARM, CS_MODE_ARM)n 7 md.detail = Truen 8 n 9 for i in md.disasm(CODE, 0x1000):n10 if i.id in (ARM_INS_BL, ARM_INS_CMP):n11 print("0x%x:t%st%s" %(i.address, i.mnemonic, i.op_str))n12 n13 if len(i.regs_read) > 0:n14 print("tImplicit registers read: "),n15 for r in i.regs_read:n16 print("%s " %i.reg_name(r)),n17 printn18 n19 if len(i.groups) > 0:n20 print("tThis instruction belongs to groups:"),n21 for g in i.groups:n22 print("%u" %g),n23 printn
輸出的結果:
0x1000: bl #0x104cn Implicit registers read: pcn This instruction belongs to groups: 20n0x101c: cmp r3, #0n This instruction belongs to groups: 20n
推薦閱讀:
※如何看待微軟中國關於微軟產品最近傳言的五點聲明?
※0xB6 入口流量分析平台搭建與流量分析那些事兒
※11月安卓系統漏洞小結:31個不得不修復的漏洞