pydbg是基于Python实现的一个调试器框架,之前看《Python灰帽子:黑客与逆向工程师的Python编程之道》这本书的时候接触过一点,今天再次试用,记录一点使用心得。
0×01. 安装
1. 下载pydbg源码
从 https://github.com/OpenRCE/pydbg 下载 pydbg 的源码,解压后复制到 C:\Python27\Lib\site-packages 文件夹下,注意文件夹重命名为 pydbg;
2. 下载paimei源码
从 https://github.com/OpenRCE/paimei 下载 paimei 的源码,解压后将其中的pgraph、pida、utils复制到 C:\Python27\Lib\site-packages 文件夹下;
3. 更新pydasm.pyd
自带的pydasm.pyd无法在Python 2.7下正常工作,会提示ImportError错误,所以需要自己编译一个pydasm,这里直接从看雪论坛找了一个现成的(http://bbs.pediy.com/showthread.php?t=133992);
0×02. 样例代码
基本框架代码如下(主要是设置回调函数,通过设置USER_CALLBACK_DEBUG_EVENT可以实现超时监控):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/usr/bin/env python # -*- coding:utf-8 -*- from pydbg import * from pydbg.defines import * import utils import time def get_crash_info(debugger): """获取Crash信息""" crash_bin = utils.crash_binning.crash_binning() crash_bin.record_crash(debugger) return crash_bin.crash_synopsis() def access_violation(debugger): """Access Violation 回调函数""" if debugger.dbg.u.Exception.dwFirstChance: return DBG_EXCEPTION_NOT_HANDLED #print get_crash_info(debugger) debugger.terminate_process() return DBG_EXCEPTION_NOT_HANDLED def time_out(debugger): """超时回调函数""" if time.time() - debugger.start_time > 10.0: debugger.terminate_process() return DBG_CONTINUE def main(): debugger = pydbg() # 创建新进程,使用load函数 debugger.load(r"C:\Windows\System32\calc.exe") # 如果是附加到现有进程,使用attach函数 #debugger.attach(pid) debugger.set_callback(EXCEPTION_ACCESS_VIOLATION, access_violation) debugger.set_callback(USER_CALLBACK_DEBUG_EVENT, time_out) debugger.start_time = time.time() debugger.run() if __name__ == "__main__": main() |
0×03. 吐槽
使用pydbg测试两个不同的样本,结果有时候得到的Crash信息居然是一模一样的,于是放弃之!
扩展阅读:如何进行浏览器Fuzz
参考:
https://github.com/rmadair/fuzzer/blob/master/Executor.py
http://bbs.pediy.com/showthread.php?t=133992
本文地址: 程序人生 >> 试用pydbg
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!