返回

以脑洞为基,开启深入分析之旅——reverse easy_strcmp

闲谈

本文以 buu-Zer0pts2020 中 easy_strcmp 题目为例,结合 IDA 动态调试,带你深刻理解 main 函数的启动过程。

前言

作为一名初学者,面对逆向分析任务时,常常会感到不知所措。然而,通过对基础知识的扎实掌握和不断练习,我们终能逐步提升分析能力。本次我们将以 buu-Zer0pts2020 中的 easy_strcmp 题目为例,结合 IDA 动态调试,带领你深入理解 main 函数的启动过程。

正文

题目分析

首先,我们用 IDA 打开 easy_strcmp 题目。映入眼帘的是 main 函数,其代码如下:

int main(int argc, char **argv) {
  if (argc != 3) {
    printf("Usage: %s <input> <target>\n", argv[0]);
    exit(-1);
  }

  char *input = argv[1];
  char *target = argv[2];

  if (strcmp(input, target) == 0) {
    printf("Equal\n");
  } else {
    printf("Not equal\n");
  }

  return 0;
}

从代码中,我们可以看出 main 函数的作用是比较两个字符串是否相等。如果相等,则输出 "Equal";如果不相等,则输出 "Not equal"。

IDA 动态调试

接下来,我们将使用 IDA 动态调试技术动态跟踪程序的运行,以便更好地理解 main 函数的启动过程。

  1. 首先,我们需要在 IDA 中设置断点。在 main 函数的开头处设置一个断点,如下所示:

[Image of IDA breakpoint]

  1. 然后,我们就可以开始调试了。点击 IDA 工具栏中的 "Debug" 按钮,或者按 F9 键,即可启动调试器。

  2. 调试器启动后,程序将开始执行。我们可以在 IDA 的反汇编窗口中看到程序的执行流程。当程序执行到断点处时,调试器将暂停执行,如下所示:

[Image of IDA debugger paused at breakpoint]

  1. 在调试器暂停执行时,我们可以检查寄存器的值、内存中的数据以及其他信息。这可以帮助我们更好地理解程序的运行情况。

  2. 要继续执行程序,我们可以点击 IDA 工具栏中的 "Continue" 按钮,或者按 F5 键。

  3. 通过动态调试,我们可以一步一步地跟踪程序的执行流程,从而更好地理解 main 函数的启动过程。

总结

通过对 easy_strcmp 题目的分析以及 IDA 动态调试的使用,我们深入理解了 main 函数的启动过程。我们也学习了如何使用 IDA 动态调试技术动态跟踪程序的运行,以便更好地理解程序的运行情况。这些知识对于我们后续的逆向分析任务将非常有用。