Welcome to A!Die Software Studio |
ollydbg 虽然很强大, 还是无法满足所有的需求, 比如找了很久也没找到的功能就有:
1. 进入某个模块的断点. 即相当于把某个 dll 的所有函数(不光是导出的函数) 入口全部下上断点.
2. 对 COM 组件的函数下断点.
3. 内存断点的条件限制.
...
要解决所有问题的唯一办法就是写自己的调试器, 但是要从头开始写一个调试器并不是一项简单的工作. 这时, 利用 pydbg 库来实现特定的调试需求就非常方便了. 不过 pydbg 的安装也并不容易, 你不光要有 python 还得有 C 编译器才行. 下面是我安装过程的记录:
1. 下载 libdasm (pydbg 依赖于 pydasm, pydasm 又需要 libdasm)
http://www.nologin.org/main.pl?action=codeView&codeId=49&
http://www.adintr.com/down/libs/libdasm-1.5.tar.gz
2. 用 VC 的命令行进入解压出来的 pydasm 目录. 执行 setup.py install 自动编译后安装.
如果你从没有编译个 c 源代码的 python 库, 而且你安装的 python 和你的 VC 编译器版本不匹配的话, 可能会出现找不到 C 编译器的错误. 这时就需要手动修改 python 的 Lib\distutils\msvccompiler.py 文件.
3. 测试安装的 pydasm. 进入 python 命令行, 输入 import pydasm, 出现错误: ImportError: DLL load failed: 找不到指定的模块.
使用 dumpbin /DEPENDENTS pydasm.pyd 命令查找它依赖的 dll, 发现有: MSVCR80.dll, python27.dll , KERNEL32.dll (根据你的 python 版本和 VC 版本可能有不同). 缺少的应该是 MSVCR80.dll 拷贝一份到 python 目录下. 再次 import pydasm, 提示错误: ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
4. 没办法了, 只要用我自己用源代码编译出来的 python 版本了. 自己编译出来的版本是把 VC 编译器配置好了的. 直接编译后 import pydasm 就成功了 :)
5. 下载 pydbg, 源代码在 google code 上, 需要用 svn 下载: http://paimei.googlecode.com/svn/trunk/.
6. 进入源代码目录, 执行 setup.py install.
7. 安装完成后直接 import pydbg 仍然是提示 pydasm 的 dll 无法加载. 需要把 site-packages\pydbg 目录下那一份 pydasm.pyd 文件删除.
终于可以导入 pydbg 了:
GoogleCode 即将关闭, pydbg 已经转移到 github 上了: https://github.com/OpenRCE/pydbg
谢谢大哥免费分享libdasm,CSDN上还收积分