反转 PE32 可执行文件 - CTF 问题

逆向工程 拆卸
2021-07-07 20:56:22

所以我们在玩 CTF,我们发现了这个有趣的 RE 挑战。当我们对文件进行静态分析时,我们发现了一个有趣的 for 循环。

for (var_84 = 0x0; var_84 < 0x13; var_84 = var_84 + 0x1) {
       edx = var_84;
      *(int8_t * )(var_84 + "Catch Me If You Can") = sign_extend_32( * (int8_t * )(var_84 + "Catch Me If You Can")) ^ * (ebp + (edx * 0x4 - 0xd8));


}

谁能解释一下上面的代码?

1个回答

它是按特定顺序的字节字节字符串异或。“Catch me if you can”是一个字符串或字节数组。

var_84(和 edx 寄存器)是其中的一个索引。我不知道到底什么是堆栈布局,也不能说它究竟是什么异或。

在更具可读性的 C 中,它将如下所示:

array = &"Catch me if you can"[0];
for (var_84 = 0x0; var_84 < 0x13; var_84 = var_84 + 0x1) {
       edx = var_84;
      array[var_84] = sign_extend_32( array[var_84]) ^ * (ebp + (edx * 0x4 - 0xd8));

}