使用IDAPYTHON跟踪程序执行路径-未加壳
来源:互联网 发布:js实现放大图片预览 编辑:程序博客网 时间:2024/06/11 04:16
IDA Pro是一款静态反汇编的利器,具有良好的交互性、可编程性、可扩展性及对多处理器的支持。
对于IDA Pro的可扩展性表现在两个方面,一是采用内置的脚本语言IDC写脚本;二是采用Hex-rays提供的SDK写插件Plug-in。简单的任务交由脚本完成,复杂的任务则需要定制满足需求的插件。
IDA本身附带了一个内建的调试器,可采用该调试器来调试外挂程序,然后使用IDAPython脚本来获取程序执行路径。
技术说明
使用IDAPyhon脚本来获取程序执行路径的基本方法如下:
① 先用IDA反汇编可执行程序,生成xx.pdb文件。
② 编写IDAPython脚本,用来在稍后的调试中获取程序执行路径。脚本框架如下:
from idaapi import *
class FuncPath(DBG_Hooks):
# Our breakpoint handler
def dbg_bpt(self, tid, ea):
print "[*] Hit: 0x%08x" % ea
return 1
debugger = FuncPath () #建立一个对象
debugger.hook() #将钩子装入IDA内建调试器
current_addr = ScreenEA() #获取光标坐标
# 遍历所有函数,并添加断点,设置断点的属性为跟踪
for function in Functions(SegStart( current_addr ), SegEnd( current_addr )):
AddBpt( function )
SetBptAttr( function, BPTATTR_FLAGS, BPT_ENABLED|BPT_TRACE)
num_breakpoints = GetBptQty()
print "[*] Set %d breakpoints." % num_breakpoints
基本的思想是 建立一个FuncPath类,该类从DBG_Hooks类继承而来,包含了调试器的钩子和一些和调试相关的功能。你可以重写它的相关函数。
然后建立一个钩子类对象,获取光标所在位置,枚举每一个函数,然后在函数上下断点,并设置属性为跟踪。
将该脚本保存为文本,且命名为 get_path.py
③打开PDB文件,选择调试器为本地调试。然后从 文件->Script file... 载入get_path.py脚本。等几秒钟,断点就设置好了。
④ F9 运行调试器,就可以看到有断点命中了。并且在输出窗口里有log信息。
⑤ 你可以将在关键动作触发前的命中的函数的断点全部去除(可重断点窗口里手动删除)。然后触发你想跟踪的功能。
这样输出窗口里的命中函数就是你需要重点分析的函数了。
附脚本:
from idaapi import *class FuncPath(DBG_Hooks): # Our breakpoint handler def dbg_bpt(self, tid, ea): print "[*] Hit: 0x%08x" % ea return 1# Add our function coverage debugger hookdebugger = FuncPath ()debugger.hook()current_addr = ScreenEA()# Find all functions and add breakpointsfor function in Functions(SegStart( current_addr ), SegEnd( current_addr )): AddBpt( function ) SetBptAttr( function, BPTATTR_FLAGS, BPT_ENABLED|BPT_TRACE)num_breakpoints = GetBptQty()print "[*] Set %d breakpoints." % num_breakpoints
- 使用IDAPYTHON跟踪程序执行路径-未加壳
- 深入跟踪MFC程序的执行流程
- 深入跟踪MFC程序的执行流程
- 深入跟踪MFC程序的执行流程
- Linux strace命令---跟踪程序执行
- 深入跟踪MFC程序的执行流程
- .NET执行程序运行路径
- VC获取执行程序路径
- java classpath路径执行程序
- 获取程序的执行路径
- java classpath路径执行程序
- 使用Eclipse跟踪JDK代码执行流程
- 使用trace跟踪sql语句执行计划
- 使用sqltrace跟踪session执行的sql
- 跟踪程序在Linux下的执行的函数调用
- Linux下实现跟踪程序执行信息记录日志文件
- 跟踪程序执行流程,在某个模块的入口
- 使用调试器逐步跟踪程序
- spring框架读取配置文件信息
- 创建后台程序(应用)
- RIOT 基于CC2538cb套件学习2,编译测试default和helloword
- 前端测试->虚拟机vmware的安装
- html 知识
- 使用IDAPYTHON跟踪程序执行路径-未加壳
- 2016.02.23回顾
- hibernate中dialect的讲解
- 跳表的实现
- AngularJS的启动引导过程
- Android获取Manifest中<meta-data>元素的值
- EXT JS Grid拓展
- 职业规则
- 引入外部css文件时最好加上type属性,否则有可能引入失败