逆向工程二进制文件以查找标志

逆向工程 二元分析 反编译 二进制
2021-06-19 10:44:21

二进制文件来自这里:https : //files.fm/u/qtqmhhdd

这几天我一直在尝试。这是一个 ELF-64 位文件,我已经使用 gdb 和 IDA 看看它是如何工作的。您可以通过运行该文件

./reverse1.bin TEST (outputs a fail message)

在 gdb 中,它运行一个 _Z5checkPc 函数,您可以使用“disas check”。它使用该标志的地址0x601038

 synt{0p5r7996pnq3qn36377036onor7342s41pq30r3n3q0p46n283862718o7n6s78n}

但我没有看到它在代码中实际使用的地方。

从检查功能来看,它似乎对您的 arg 执行了一系列操作(或添加、...)。我认为它会进行比较以确定它是“失败”还是“成功”,0x00000000004005b0但奇怪的是,这是不对的。

关于该怎么做的任何见解?

2个回答

由于这是一个逆向挑战,我不会立即开枪并给您一些提示,这些提示可能对这次和未来的挑战有所帮助。

check功能(_Z5checkPc是一个错位的名称)看起来是这样的: 艾达代表

您已经找到了与输入值进行比较的数据。但是你没有理解这里没有直接的比较。

  1. 我们对字符串值进行了循环。这意味着很有可能每个字符都是按顺序处理的。
  2. 值在比较之前以(混淆的)方式修改 -> 这里有某种编码!

尽管函数中包含死代码,但您必须在比较之前确定直接发生的修改(与什么进行比较?如何计算这些值?)。

如果您有什么特别不明白的地方,我强烈建议您提出后续问题。对于小问题或讨论,您也可以在聊天中访问。

事实上,你拿到了国旗!

做一个 ROT13

synt{0p5r7996pnq3qn36377036onor7342s41pq30r3n3q0p46n283862718o7n6s78n} 

要得到

flag{0c5e7996cad3da36377036babe7342f41cd30e3a3d0c46a283862718b7a6f78a}