题目要求:求出由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修改内存及其不方便,希望能够有个批量修改的插件,常去大佬群看看