狗儿

热爱的话就坚持吧~

0%

胖虎也想学idapython

那你能帮帮我吗?

若无特殊说明则表示代码是胖虎自己写的。

函数

idc.ScreenEA()当前光标

idautils.FuncItems(ea)选中函数的所有指令地址

idc.GetDisasm(addr)汇编代码

idc.GetOpnd(addr, 1)第1个操作数(0开始)

idc.GetMnem操作码

脚本

当前函数的全部汇编代码

1
2
3
4
5
6
7
8
9
10
11
print "[-] 开始导出反汇编代码"
import idautils
ea = idc.ScreenEA()
addrs = idautils.FuncItems(ea)
text = ''
for addr in addrs:
#print idc.GetDisasm(addr)
text += idc.GetDisasm(addr) + '\n'
with open("D:\\disasm.txt", 'w')as f:
f.write(text)
print "[+] 成功将当前函数的反汇编代码写入d:\\disasm.txt"

当前函数所有汇编操作码及出现次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
print "[-] 开始统计操作码!"
import idautils
ea = idc.ScreenEA()
addrs = idautils.FuncItems(ea)
op_list = []
for addr in addrs:
op_list.append(idc.GetMnem(addr))
op_dic = {}
for item in set(op_list):
op_dic[item] = op_list.count(item)
op_dic = sorted(op_dic.items(), key=lambda item:item[1])
for item in op_dic:
print "%s\t%d" % (item[0], item[1])
print "[+] 成功统计操作码!"

output:

1
2
3
4
5
6
7
8
9
10
11
12
[-] 开始统计操作码!
sub 1
retn 1
add 1
pop 4
push 4
shl 779
mov 31754
shr 31988
and 32767
xor 32767
[+] 成功统计操作码!