use IdaRub write Ida Plugin

本文介绍如何使用IdaRub和rublib工具简化IDA插件的开发流程,并通过一个指令计数器的实际例子展示了整个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转眼又是快半年没“耕耘”这个blog了……今天来介绍下IdaRub和rublib
IdaRub : http://www.metasploit.com/users/spoonm/idarub/
rublib : http://www.the-interweb.com/serendipity/index.php?/archives/91-RubLib-0.04.html
有了这两个excellent的工具后,写Ida的plugin就简单多了:)
以下是学习 InstructionCounter的ruby版本,enjoy it!
# !/usr/bin/ruby -w
#
 InstructCounter.rb
#
 ------------------
# Binjo @ 2007-04-07
#
-------------------------------------------------------------------------------
$:.unshift('..')

require 
'idarub'
require 
'rublib'

begin
    ida,    
=   IdaRub.auto_client
    file    
=   IdaFile.new( ida )
rescue
    
print "Error : %s" % $!
    exit
end

Opcodes          
= { }
Opcodes[
'total'= 0

def loop_instruc( file )
    file.each { 
|func|

        puts 
"---- parsing #{func.name} ----"

        func.each { 
|instruc|
            
yield instruc.mnemonic
        }
    }
end

loop_instruc( file ) { 
|instruc|

    
if ( Opcodes[instruc] == nil )
        Opcodes[instruc]  
= 1
    
else
        Opcodes[instruc] 
+= 1
    end

    
# total counter
    Opcodes['total'+= 1
}

puts 
"Opcode distribution of file: #{file.path}"

Total 
= Opcodes['total']
print "Total opcodes : #{Total} "

Opcodes.delete( 
'total' )

Opcodes.sort{ 
|a,b| a[1<=> b[1] }.each { |key, value|
    percents 
= 100 * value.to_f / Total.to_f
    puts 
"%06d    %8.2f%%   %s" % [ value, percents, key ]
}
#-------------------------------------------------------------------------------
#
 EOF

以下是输出
# ruby InstructCounter.rb
----  parsing _StartRoutine  ----
----  parsing start  ----
----  parsing sub_104FE  ----
----  parsing NewZwEnumerateKey  ----
----  parsing NewZwQueryKey  ----
----  parsing NewZwCreateKey  ----
----  parsing NewZwOpenKey  ----
----  parsing LzxHookRegs  ----
----  parsing GetModuleBase  ----
----  parsing LzxStrCmp  ----
----  parsing GetProcAddressFromExport  ----
----  parsing sub_1099C  ----
----  parsing sub_10A48  ----
----  parsing DisableCR0  ----
----  parsing EnableCR0  ----
----  parsing QuerySystemInfomationEx  ----
----  parsing sub_10B5E  ----
----  parsing LzxGetPid  ----
----  parsing sub_10BC0  ----
----  parsing sub_10C06  ----
----  parsing GetProcNameOffset  ----
----  parsing sub_10CA0  ----
----  parsing sub_10CC8  ----
----  parsing sub_10D14  ----
----  parsing GetLowerLevelDevObj  ----
----  parsing sub_10DEA  ----
----  parsing sub_10E4E  ----
----  parsing sub_10E7C  ----
----  parsing sub_10EAA  ----
----  parsing sub_10EE0  ----
----  parsing sub_10F34  ----
----  parsing sub_10F80  ----
----  parsing sub_10FD4  ----
----  parsing sub_10FEE  ----
----  parsing sub_1108A  ----
----  parsing sub_110EE  ----
----  parsing sub_111AA  ----
----  parsing sub_11262  ----
----  parsing sub_1127C  ----
----  parsing sub_1138A  ----
----  parsing sub_11450  ----
----  parsing sub_11498  ----
----  parsing sub_1150A  ----
----  parsing sub_115F8  ----
----  parsing sub_11606  ----
----  parsing StartRoutine  ----
----  parsing sub_116A4  ----
----  parsing sub_1173C  ----
----  parsing sub_1177E  ----
----  parsing sub_117A6  ----
----  parsing sub_1195A  ----
----  parsing sub_11BB6  ----
----  parsing sub_11CDA  ----
----  parsing sub_11D82  ----
----  parsing sub_11E10  ----
----  parsing sub_11F50  ----
----  parsing sub_120BC  ----
----  parsing sub_1223A  ----
----  parsing sub_1230E  ----
----  parsing sub_12342  ----
----  parsing sub_1236C  ----
----  parsing sub_1239A  ----
----  parsing sub_123C4  ----
----  parsing sub_1248A  ----
----  parsing sub_12568  ----
----  parsing sub_12702  ----
----  parsing sub_12730  ----
----  parsing sub_12746  ----
----  parsing sub_127EA  ----
----  parsing NewZwSaveKey  ----
----  parsing sub_1299A  ----
----  parsing NewZwDeviceIoControlFile  ----
----  parsing sub_12B56  ----
----  parsing sub_12C3E  ----
----  parsing NotifyRoutine  ----
----  parsing sub_12EC8  ----
----  parsing DeferredRoutine  ----
----  parsing sub_1306C  ----
----  parsing sub_130E8  ----
----  parsing sub_13186  ----
----  parsing sub_131CA  ----
----  parsing sub_131E8  ----
----  parsing sub_13220  ----
----  parsing sub_13258  ----
----  parsing sub_1327E  ----
----  parsing sub_13294  ----
----  parsing sub_132EC  ----
----  parsing sub_132FE  ----
----  parsing _new_sysenter  ----
----  parsing sub_133A6  ----
----  parsing HookCode  ----
----  parsing sub_134A5  ----
----  parsing sub_13538  ----
----  parsing sub_1354E  ----
----  parsing sub_13610  ----
----  parsing sub_138A4  ----
----  parsing sub_138D0  ----
----  parsing sub_13C44  ----
----  parsing sub_13D62  ----
----  parsing sub_13E54  ----
----  parsing sub_13F12  ----
----  parsing sub_13F4A  ----
----  parsing sub_13FA6  ----
----  parsing NewZwQuerySystemInformation  ----
----  parsing LzxHookQuerySysInfo  ----
----  parsing sub_140BE  ----
----  parsing sub_14244  ----
----  parsing sub_14264  ----
----  parsing sub_142E2  ----
----  parsing sub_14334  ----
----  parsing nullsub_1  ----
----  parsing nullsub_2  ----
----  parsing sub_1437E  ----
----  parsing GetRelatedObj  ----
----  parsing sub_14486  ----
----  parsing sub_14508  ----
----  parsing sub_14610  ----
----  parsing sub_146C0  ----
----  parsing sub_14740  ----
----  parsing sub_14758  ----
----  parsing sub_1484C  ----
----  parsing sub_14A4C  ----
----  parsing sub_14B54  ----
----  parsing sub_14CD2  ----
----  parsing sub_14D1C  ----
----  parsing sub_14D92  ----
----  parsing sub_14DCE  ----
----  parsing sub_14EB2  ----
----  parsing sub_15104  ----
----  parsing sub_15170  ----
----  parsing sub_1528A  ----
----  parsing sub_1534F  ----
----  parsing sub_155AB  ----
----  parsing sub_158E6  ----
----  parsing sub_15A48  ----
----  parsing sub_15AA2  ----
----  parsing sub_15B8E  ----
----  parsing sub_15BF8  ----
----  parsing sub_15C50  ----
----  parsing sub_15C66  ----
----  parsing sub_15E12  ----
----  parsing sub_160B0  ----
----  parsing sub_160EA  ----
----  parsing sub_1615E  ----
----  parsing sub_16239  ----
----  parsing NewZwTerminateProcess  ----
----  parsing LzxHookTerminateProcess  ----
----  parsing sub_164C2  ----
----  parsing sub_1656C  ----
----  parsing LzxSomeInit  ----
----  parsing PsGetCurrentProcessId  ----
----  parsing KeDetachProcess  ----
----  parsing KeAttachProcess  ----
----  parsing  __try   ----
----  parsing sub_16725  ----
----  parsing ObOpenObjectByName  ----
----  parsing ZwRestoreKey  ----
----  parsing PsSetCreateProcessNotifyRoutine  ----
----  parsing KeGetCurrentThread  ----
----  parsing KeGetPreviousMode  ----
----  parsing PsGetVersion  ----
----  parsing _except_handler3  ----
----  parsing sub_16760  ----
----  parsing sub_167E3  ----
----  parsing sub_167ED  ----
----  parsing sub_167EF  ----
Opcode distribution of file: F:src k_thingRK.PE386_BotMailer2dumplzx32_mem
1 .sys
Total opcodes : 
8013

000001          0.01 %    neg
000001          0.01 %    cmpxchg
000001          0.01 %    jg
000001          0.01 %    cpuid
000001          0.01 %    sar
000001          0.01 %    jle
000002          0.02 %    lods
000002          0.02 %    cld
000002          0.02 %    imul
000002          0.02 %    sidt
000002          0.02 %    cli
000002          0.02 %    popf
000002          0.02 %    setnl
000002          0.02 %    setnz
000002          0.02 %    sti
000003          0.04 %    pushf
000003          0.04 %    rdmsr
000003          0.04 %    xadd
000004          0.05 %    jge
000005          0.06 %    sbb
000005          0.06 %    popa
000005          0.06 %    setz
000005          0.06 %    pusha
000006          0.07 %    xchg
000007          0.09 %    adc
00000
8          0.10 %    shl
00000
9          0.11 %    movsx
000010          0.12 %    div
000021          0.26 %    ja
000023          0.29 %     or
0000
29          0.36 %    jbe
000031          0.39 %    jnb
000037          0.46 %    dec
000044          0.55 %    shr
000044          0.55 %    movzx
000051          0.64 %    movs
000055          0.69 %    jl
000057          0.71 %    jb
000066          0.82 %    leave
000066          0.82 %    stos
0000
94          1.17 %    inc
0000
99          1.24 %     and
000
119          1.49 %    sub
000
158          1.97 %    retn
000170          2.12 %    jnz
000
185          2.31 %    jmp
000
187          2.33 %    xor
000
198          2.47 %    add
000
199          2.48 %    test
000304          3.79 %    jz
000317          3.96 %    lea
000
348          4.34 %    pop
000441          5.50 %    cmp
000
680          8.49 %    call
00
1786         22.29 %    push
002107         26.29 %    mov

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值