NEWS
新闻资讯
|
二进制中的RC4以及提高出题难度的方法前言密码学是很重要的一门学科,也是很复杂得学科,但同样是撑起信息安全的伟大学科。不管是在哪个方向,只要与信息有关,都会涉及到密码学。在二进制中会分析大量的加密算法,在web分析中也纯在很多加密方式,今天我就用通俗的语言来分析从浅入深的分析RC4加密算法,并且涉及到其实战中的算法分析。让我们在二进制分析中更加游刃有余。 什么是RC4加密算法?对这种算法的描述有很多,曾经作为商业密码未被公开过,不过现在这种加密已经成为历史。但是其中很优秀的加密思想依然值得我们学习,除此之外,改良这种算法并加以利用依然很受欢迎。 如何理解这张图——加密原理KSA算法初始化长度为 256 的 S 盒。第一个 for 循环将 0 到 255 的互不重复的元素装入 S 盒;第二个 for 循环根据密钥打乱 S 盒。 PRGA(Pseudo-random generation algorithm)算法根据 S 盒生成与明文长度相同的秘钥流,使用秘钥流加密明文。 因为接下来我会用两个例子来跟好的说明这种算法在二进制中的体现。一个是android逆向,会用到java版本的RC4,还有一个题目是伪代码,类似于C代码的形式,因此接下来展示一下C语言如何实现加密的。以方便后面题目的分析。 使用秘钥流进行加密的过程 中规中矩的RC4加密现在已经有解码器可以使用了,因此在CTF比赛中,出题人常常都会对RC4算法进行魔改,让玩家没办法用解码器解码,提高题目的难度,就像base64加密一样,在很多二进制题目中都会出现,但是每次出现都会有不一样的结果,出题人都会改动加密方式。因此,接下来我们就看看两个题目,从而更加理解RC4加密。 通过IDA反汇编的伪代码,逻辑不是很难。会先对输入的字符串进行base64加密,但是这个base64加密也不是常规的,更换过密码本的。这个加密直接用一个python脚本就能够解出来。 接下来就是加密环节的反汇编代码 结果发现和源码是一样的,由于RC4这种加密的特殊性,不太容易在算法中修改,有效够提高这种题目难度的就是对加密函数的输入进行处理。这题就是运用了变种的base64进行处理。 然而这题的独特之处在于将字符串存放在数据库中,又对字符串进行MD5加密,然后再作为key用于RC4加密。 总结:从接触RC4这种加密方式,到在二进制逆向分析中分析这种加密的题目,诀窍在于,出题人会对加密函数的参数做手脚,这样来提高难度。当我们明白RC4加密的原理和过程后,就会发现这种逆向题目并不是很难分析。不管是什么语言写的加密算法,在明白原理后,都是一样的分析。除此之外,在很多加密算法中,都是这样的,比如base64,只要我们明白其加密原理,不管怎样变换,我们都能够很快分析出来。 |