什么时候使用 Windbg 和 Ollydbg?

逆向工程 调试 风袋 漏洞分析 恶意软件
2021-06-25 00:49:24

据我所知:WinDbg 使用调试信息(pdb/符号文件)进行调试。所以,例如说我得到一个未知的 exe(恶意)我可以调试它,因为我不会有它的 .pdb。WinDbg 是否最适合仅分析内存转储和崩溃问题?

Ollydbg 是一个 ring 3 调试器,可以很好地分析/调试恶意 exe,但不支持未知的 dll(有 loaddll 但你必须知道 dll 导出的函数和参数)和 rootkit(sys 文件)。

那么如果我有一个 dll 和一个 .sys 文件,我如何使用 olly 或 winDbg 调试它?

注意:我是菜鸟,我知道的可能有误。我没有资源购买 IDAPro :-)。

2个回答

即使是免费版的 IDA Pro也值得拥有。使用它比使用其他任何东西更容易找到未知二进制文件的一般结构。如果你有一个未知的 DLL,它会告诉你它有哪些导出,查看汇编代码可以帮助你猜测参数。

在大多数情况下,要调试 .dll,您需要编写一个小程序来一个接一个地调用它的几个导出。您可以使用 ollydbg 或 windbg 加载 .exe 并跟踪 .dll 代码。

我个人的经验是,在很多情况下,最好的方法是首先使用 IDA 来了解未知二进制文件的概况,然后使用 ollydbg 或 IDA 调试器在处理器指令级别上进行跟踪,并且仅在出现以下情况时才使用高级调试器有一些符号可以在源代码级别进行跟踪。

我已经购买了 IDA,我认为当前版本的调试器比免费的 5.0 版本要好得多,因此您可能希望完全跳过 IDA 调试器,但您仍将使用它进行静态分析。而且我更倾向于使用 Linux,而不是 Windows(如果在 Windows 上,使用 IDA 或 Ollydbg),所以我对 gdb 的经验比使用 windbg 的经验要多得多。

尽管如此,这些工具中的每一个都有其优点和缺点,如果您真的想进行二进制分析,从长远来看,您将需要它们中的每一个。如果我是你,我会为每个人投入一两天时间。一旦您对它们感到满意,您会发现您将根据您的具体情况使用它们中的每一个。

WinDbg 使用调试信息(pdb/符号文件)进行调试。所以,例如说我得到一个未知的 exe(恶意)我可以调试它,因为我不会有它的 .pdb

是的。符号是 Windbg 的主要优势之一,但它也可以在没有符号信息的情况下调试任何东西

WinDbg 是否最适合仅分析内存转储和崩溃问题?

再一次,它可以做到这一点,但这不是它的唯一用途。

Ollydbg 是一个 ring 3 调试器,可以很好地分析/调试恶意 exe,但不支持未知的 dll(有 loaddll 但你必须知道 dll 导出的函数和参数)

如果你需要分析一个DLL,你需要一个程序来加载它然后调试这个程序,因此你不能单独调试一个DLL(DLL,顾名思义是主程序使用的动态库)。这是系统要求。

和 rootkits(sys 文件)。

是的,您需要一个 ring0 调试器。

您还可以为 DLL 和驱动程序 (*.sys) 文件混合静态(反汇编程序)和运行时(调试程序)分析。Hex 射线有一个免费版本的 IDA。


两种调试器都可以用于Ring3(用户态)调试,只有Windbg可以做Ring0(内核态),但它们各有优缺点。

从我的角度来看(我经常使用两者):

  • OllyDbg:
    • 优点:非常适合向最终用户显示信息;配色方案,组织良好的显示窗口。
    • 缺点:符号信息很少;没有命令行;仅图形用户界面
  • 风车:
    • 优点:非常强大的符号信息;Ring0调试;窗户内部;裸机
    • 缺点:不是真正的用户友好;陡峭的学习曲线

他们都有一个原生的插件系统(C / C++);windbg 有一种脚本语言,它是真正的 PITA(但pykd [Windbg 脚本在 python] 可以缓解这个问题)。

请注意,除了“livekd”(但这适用于系统 snpashot,而不是实时),windbg 不能就地进行实时 ring0 调试(à la Softice 或 Syser):您需要一个主机系统(调试器)和另一台机器这将是调试对象(虚拟机或另一台物理机)。