03_IDA逆向分析

IDA逆向分析-插件demo

http://hex-rays.com/products/ida/support/idapython_docs idapython的文档

IDA插件的编写

  • plugins 目录下进行实例化
  • python 目录下面进行具体功能的编写

在IDA的plugins目录下创建 listFuncPlugin.py文件

# -*- coding:utf-8 -*-
import idautils
import idaapi
import idc
from datetime import datetime

class ListFunc(idaapi.plugin_t):  # 继承idaapi.plugin_t
    flags = idaapi.PLUGIN_UNL

    comment = "List all function in this binary file"

    wanted_name = "listfunc"   # 插件的名称
    wanted_hotkey = "Alt-F9" #插件的快捷键
    help = "Coming soon..."

    def init(self):
        # 初始化方法
        idaapi.msg(">>> My plugin starts. {0}\n".format(datetime.now()))

        # 导入python目录下的功能模块
        idaapi.require("listFunc")
        idaapi.require("listFunc.listFuncInterface")
        return idaapi.PLUGIN_OK

    def run(self,arg):
        listFunc.listFuncInterface.main()   # 进行调用

    def term(self):
        idaapi.msg(">>> My plugin ends. {0}\n".format(datetime.now()))

# 插件的入口函数
def PLUGIN_ENTRY():
    return ListFunc()

在IDA的python目录下创建listFunc文件夹,在其中创建

__init__.py
listFuncInterface.py 文件

其中 listFuncInterface.py 的内容为
# -*- coding:utf-8 -*-
import idautils
import idaapi
import idc
from datetime import datetime

def main():
    for i, func in enumerate(idautils.Functions()):
        func_name = idc.GetFunctionName(func)  # 函数名
    
        if "DllMain" in func_name:
            print("{0} is the valu function {1}".format(i, func_name))

if __name__ == '__main__':
    main()

如上,IDA插件的大致就这样

当如何,python目录创建类不是强制的,在plugin文件夹的py插件可以不引用其他类

不打开IDA,自动执行IDA插件

  • 一个整体运行的脚本run.py
  • 一个是具体分析数据的脚本,由run.py调用

run.py

# -*- coding:utf-8 -*-

import os
import subprocess


dir_path = "C:/tools/teest/1" # 原始数据的文件夹
ida_path = "C:/tools/IDA_Pro_v7.0_Portable/ida.exe" # ida的路径
ana_file = "C:/tools/teest/analysis.py" # 分析文件的路径

def run():
    for root, dirs, files in os.walk(dir_path):
        for file_name in files:
            file_path = os.path.join(root, file_name)
            cmd = "{0} -LC:/tools/mylog.log -c -A -S{1} {2}".format(ida_path, ana_file, file_path)
            p = subprocess.Popen(cmd)
            p.wait()

if __name__ == "__main__":
    print("begin")
    run()

analysis.py

# -*- coding:utf-8 -*-

import idautils
import idaapi
import idc

def do_some_analyse():
    danger_func = ["main","DllMain","gets","read","StringVPrintfWorkerW"]
    for func in idautils.Functions():
        if idc.GetFunctionName(func) in danger_func:
            print(hex(func), idc.GetFunctionName(func))

def main():
    idc.Wait()
    do_some_analyse()
    idc.Exit(0)

if __name__ == "__main__":
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值