非常复杂的一个题目,主要考察了 RC4,和魔改版 base64 算法的识别。本来我只是想用这个题目用来试试 M1 做逆向调试 Linux 应用效果如何,结果题目怎么这么恶心啊 😭

如何调试

这是一个被 strip 过的程序,如何调试可以查看这个文章 GDB 如何调试 strip 过的程序

M1 上调试 x86 Linux 应用需要借助 Qemu + GDB multiarch,具体怎么操作可以看我的 B 站视频。

如何在 M1 Arm Mac 上调试 X86 Linux 应用_哔哩哔哩_bilibili

查看反汇编代码

RC4 加密

首先使用 Ghidra 打开这个程序。查看反汇编代码。找 Main 函数怎么找这里就不再赘述了,反正就是通过字符串找。

可以看到有几个非常可疑的函数对输入数据进行了操作,或间接地进行了操作(我对函数做过重命名了)

Untitled

第一个函数大概长这样

Untitled

可以看到里面有一个 s[i] = i 这样的操作,然后还有类似置换 s_box 的操作

可以看到上面的图片中的初始置换 S 操作和伪代码非常相似

可以看到上面的图片中的初始置换 S 操作和伪代码非常相似

所以很明显这个就是 RC4 的加密,然后他初始化了 RC4 加密中非常关键的一个常量 S_box

Untitled

接下来我们再看第二个关键函数,这个函数是直接用到了用户输入的那个字符串,所以这个很明显是一个加密函数。我们来看看 RC4 的加密步骤是不是和上面写的一样。

Untitled

对上了,完全一致!

所以这边用了一个 RC4 没有魔改过的加密算法