前言
爬虫工程师在做加密参数逆向的时候,经常会遇到各种各样的加密算法、编码、混淆,每个算法都有其对应的特征,对于一些较小的网站,往往直接引用这些官方算法,没有进行魔改等其他操作,这种情况下,如果我们能熟悉常见算法的特征,通过密文就能猜测出使用的哪种算法、编码、混淆,将会大大提高工作效率!在CTF中通常也会有密码类的题目,掌握一些常见密文特征也是CTFer们必备的技能!
本文将介绍以下编码和加密算法的特征:
编码:Base系列、Unicode、Escape、URL、Hex;
算法:MD5、SHA系列、HMAC系列、RSA、AES、DES、3DES、RC4、Rabbit、SM系列;
混淆:Obfuscator、JJEncode、AAEncode、JSFuck、Jother、Brainfuck、Ook!、Trivialbrainfucksubstitution;
其他:恺撒密码、栅栏密码、猪圈密码、摩斯密码、培根密码、维吉尼亚密码、与佛论禅、当铺密码。
PS:常见加密算法原理以及在Python和JavaScript中的实现方法可参见K哥以前的文章:爬虫常见加密解密算法
编码系列
Base系列编码
Base64是我们最常见的编码,除此之外,其实还有Base16、Base32、Base58、Base85、Base等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意字节数据进行编码,比如Base64使用了64个可打印字符(A-Z、a-z、0-9、+、/),Base16使用了16个可打印字符(A-F、0-9),这里主要讲怎么快速识别,其具体原理可自行百度,Base系列主要特征如下:
Base16:结尾没有等号,数字要多于字母;
Base32:字母要多于数字,明文数量超过10个,结尾可能会有很多等号;
Base58:结尾没有等号,字母要多于数字;
Base64:一般情况下结尾都会有1个或者2个等号,明文很少的时候可能没有;
Base85:等号一般出现在字符串中间,含有一些奇怪的字符;
Base:密文由Emoji表情组成。
示例:
Unicode编码
Unicode又称为统一码、万国码、单一码,是一种在计算机上使用的字符编码。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。其主要特征如下:
以\u、#或#x开头,后面是数字加字母组合
PS:\u开头和#x开头是一样的,都是16进制Unicode字符的不同写法,#则是Unicode字符10进制的写法,此外,#和#x开头的,也称为HTML字符实体转换,字符实体是用一个编号写入HTML代码中来代替一个字符,在HTML中,某些字符是预留的,如果希望正确地显示预留字符,就必须在HTML源代码中使用字符实体。
Escape编码
Escape编码又叫%u编码,Escape编码就是字符对应UTF-16BE表示方式前面加%u,Escape不会对ASCII字母和数字进行编码,也不会对下面这些ASCII标点符号进行编码:*
-_+./,其他所有的字符都会被转义序列替换。其主要特征如下:以%u开头,后面是数字加字母组合
URL/Hex编码
URL和Hex编码的结果是一样的,不同的是当你用URL编码网址时是不会把