题目要求:求出由RC4异或的密文所对应的明文,秘钥存在于文件中,考察RC4算法的理解和对安全加密的应用

Eswink技术学习


【资料图】

Information

Necessary Tools

IDA 7.5 Linux Cracked by ericyudatou

Pwntools

Pycharm && Python3

Debugging Environment

Linux kali 5.10.0-kali9-amd64

Windows 10

Decompile

检测程序架构信息

RC4

本题涉及到了RC4算法,并且该题中,有一处发生了改变

经过百度查询到的RC4的加密算法中,异或前 而这里反编译出来的伪代码中缺少了 这一个步骤,非常地困惑,想不通,自写地全部崩溃,人都是麻的。最终还是走到了调试这一步。

由于以前接触过类似自加密算法的样本文件,通常是将加密key加密保存在或者段,需要解密加密的PE文件时再对key进行解密调用

本题的Key已经给的很明显了,为下面这一段长度为300的字符串:

经过了解,我们可以得知的加解密其实就是:,解密步骤也是相同, ,那么我们直接将密文传入内存或者读入再解密,即可获得明文

Modify

跳过异或循环

我们观察伪代码,可以清楚的看到,在进行加密初始化时,经过了异或操作,那么我们可以手动Patch代码

我们可以将  修改为:

我们也可以在  修改为:

即为无条件跳转,保存完毕文件后再次通过IDA分析,即可看到循环消失

写入密文

尝试将密文转化为字符串通过的方式读入,但是转换后发现存在乱码和其他符号会直接被截断,通过使用也无法传入,也许时本人活儿不精。

那么我们只好进行远程调试,在处断点,步过到并且修改内存的值:

在修改内存时,我也遇到了一些不顺手的地方,如果是在windows环境下的ollydbg,编辑内存值非常容易,将data转换为HEX String 然后复制就行了,不过IDA好像没有这个功能,也不知道有没有人写过这种插件,导致我按byte输入,异常地麻烦。

在修改完内存并且单步后,密文就成功解密了。

解密

解密后的字符串,使用LazyIDA插件将其转换为PythonList:

由于之前我们省略了异或步骤,所以我们这里再次异或:

最终可以得到答案:

将得到的flag读入Level2,得到正确结果:

Reflection & Proposal

办法总比困难多,羊毛出在羊身上

本次题目还可以通过   和 来完成,劫持跳转也可以达到同样的结果

IDA修改内存及其不方便,希望能够有个批量修改的插件,常去大佬群看看

推荐内容