思路
众所周知,RC4是出了名的不统一,各个语言的RC4结果基本上都不一样,所以碰到RC4的逆向题一般只能写代码去解密。
但是,RC4有个特色就是加密和解密的过程完全一样,所以在已知密文hex和key(或者叫iv,如果有的话)的情况,直接输入密文和key(如果有的话)就能拿到明文flag。
不过,密文是乱码的,不好直接输入,那么我们就可以先随便输入对应长度的明文,然后紧接着下断点把内存里输入的东西改成密文hex,再断到加密结果的比较处,查看内存,就能拿到明文。
过程
先断在输入明文的地方,输入flag长度的任意字符。
找到输入的东西在内存的哪里,本题是esp+18
右键,二进制编辑
把ida分析时得到的密文hex复制进去,因为最后需要00
当结尾,所以记得留个结尾(反正RC4是按字符加解密的,少个最后一位00
不影响最后flag,问题不大)
然后输入key,这步的话看题目,有些没有,无所谓。
在按位比较加密结果的时候下断点,然后看一下比较的内存内容,就能拿到flag。(因为我们上面最后一位不是00
的密文,所以这里的最后一位不是00
)
例题
- [SCTF2020]get_up
- [2021春秋新年欢乐赛]evilMem