关注K哥爬虫,持续分享爬虫进阶、JS/安卓逆向等技术干货!
前言爬虫工程师在做加密参数逆向的时候,经常会遇到各种各样的加密算法、编码、混淆,每个算法都有其对应的特征,对于一些较小的网站,往往直接引用这些官方算法,没有进行魔改等其他操作,这种情况下,如果我们能熟悉常见算法的特征,通过密文就能猜测出使用的哪种算法、编码、混淆,将会大大提高工作效率!在 CTF 中通常也会有密码类的题目,掌握一些常见密文特征也是 CTFer 们必备的技能!
本文将介绍以下编码和加密算法的特征:
编码:Base 系列、Unicode、Escape、URL、Hex;算法:MD5、SHA 系列、HMAC 系列、RSA、AES、DES、3DES、RC4、Rabbit、SM 系列;混淆:Obfuscator、JJEncode、AAEncode、JSFuck、Jother、Brainfuck、Ook!、Trivial brainfuck substitution;其他:恺撒密码、栅栏密码、猪圈密码、摩斯密码、培根密码、维吉尼亚密码、与佛论禅、当铺密码。PS:常见加密算法原理以及在 Python 和 JavaScript 中的实现方法可参见K哥以前的文章:【爬虫知识】爬虫常见加密解密算法
编码系列Base 系列编码Base64 是我们最常见的编码,除此之外,其实还有 Base16、Base32、Base58、Base85、Base100 等,他们之间最明显的区别就是使用了不同数量的可打印字符对任意字节数据进行编码,比如 Base64 使用了64个可打印字符(A-Z、a-z、0-9、 、/),Base16 使用了16个可打印字符(A-F、0-9),这里主要讲怎么快速识别,其具体原理可自行百度,Base 系列主要特征如下:
Base16:结尾没有等号,数字要多于字母;Base32:字母要多于数字,明文数量超过10个,结尾可能会有很多等号;Base58:结尾没有等号,字母要多于数字;Base64:一般情况下结尾都会有1个或者2个等号,明文很少的时候可能没有;Base85:等号一般出现在字符串中间,含有一些奇怪的字符;Base100:密文由 Emoji 表情组成。示例:
Unicode 编码
编码类型
示例一
示例二
明文
01234567890
administrators
Base16
3031323334353637383930
61646D696E6973747261746F7273
Base32
GAYTEMZUGU3DOOBZGA======
MFSG22LONFZXI4TBORXXE4Y=
Base58
cX8j8pvGzppMKVb
BNF5dFLUTN5XwM1yLoF
Base64
MDEyMzQ1Njc4OTA=
YWRtaW5pc3RyYXRvcnM=
Base85
0JP==1c70M3&rY
@:X4hDJ=06Eaa'.EcV
Base100
Unicode 又称为统一码、万国码、单一码,是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。其主要特征如下:
以 \u、 或 开头,后面是数字加字母组合PS:\u 开头和 开头是一样的,都是16进制 Unicode 字符的不同写法, 则是 Unicode 字符10进制的写法,此外, 和 开头的,也称为 HTML 字符实体转换,字符实体是用一个编号写入 HTML 代码中来代替一个字符,在 HTML 中,某些字符是预留的,如果希望正确地显示预留字符,就必须在 HTML 源代码中使用字符实体。
Escape 编码
编码类型
示例一
示例二
明文
12345
admin
Unicode
\u0031\u0032\u0033\u0034\u0035
\u0061\u0064\u006d\u0069\u006e
Escape 编码又叫 %u 编码,Escape 编码就是字符对应 UTF-16BE 表示方式前面加 %u,Escape 不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ . /,其他所有的字符都会被转义序列替换。其主要特征如下:
以 %u 开头,后面是数字加字母组合URL / Hex 编码
编码类型
示例一
示例二
明文
K哥爬虫
我爱Python
Escape
K%u54E5%u722C%u866B
%u6211%u7231Python
URL 和 Hex 编码的结果是一样的,不同的是当你用 URL 编码网址时是不会把 http、https 关键字和 /、?、&、= 等连接符进行编码的,而 Hex 编码则全部转化了,其主要特征如下:
以 % 开头,后面是数字加字母组合加密算法MD5
编码类型
示例
明文
https://www.kuaidaili.com/
Unicode
https://www.kuaidaili.com/
Hex
https://www.kuaidaili.com/
MD5 实质是一种消息摘要算法,一个数据的 MD5 值是唯一的,同一个数据不可能计算出多个不同的 MD5 值,但是,不同数据计算出来的 MD5 值是有可能一样的,知道一个 MD5 值,理论上是无法还原出它的原始数据的,MD5 是最容易辨别的,主要特征如下:
密文一般为 16 位或者 32 位,其中 16 位是取的 32 位第 9~25 位的值;组成方式为字母(a-f)和数字(0-9)混合,字母可以全部是大写或者小写。除了通过密文特征来判断以外,我们还可以搜索源代码,标准 MD5 的源码里是包含了一些特定的值的,没有这些特定值,就无法实现 MD5:
0123456789ABCDEF、0123456789abcdef1732584193、-271733879、-1732584194、271733878PS:某些特殊情况下,密文的长度也有可能不止 16 位或者 32 位,有可能是在官方算法上有一些魔改,通常也是在 16 位的基础上,左右填充了一些随机字符串。
示例:
SHA 系列
编码类型
示例一
示例二
明文
123456
admin
MD5(16位小写)
49ba59abbe56e057
7a57a5a743894a0e
MD5(16位大写)
49BA59ABBE56E057
7A57A5A743894A0E
MD5(32位小写)
e10adc3949ba59abbe56e057f20f883e
21232f297a57a5a743894a0e4a801fc3
MD5(32位大写)
E10ADC3949BA59ABBE56E057F20F883E
21232F297A57A5A743894A0E4A801FC3
SHA 是比 MD5 更安全一点的摘要算法,SHA 通常指 SHA 家族算法,分别是 SHA-1、SHA-2、SHA-3,其中 SHA-2 是 SHA-224、SHA-256、SHA-384、SHA-512 的并称,SHA-3 是 SHA3-224、SHA3-256、SHA3-384、SHA3-512、SHAKE128、SHAKE256 的并称,其名字的后缀的数字就代表了结果的大小(bit),注意,SHAKE 算法结果的大小并不是固定的,其他算法特征如下:
SHA-1:字母(a-f)和数字(0-9)混合,固定位数 40 位;SHA-224/SHA3-224:字母(a-f)和数字(0-9)混合,固定位数 56 位;SHA-256/SHA3-256:字母(a-f)和数字(0-9)混合,固定位数 64 位;SHA-384/SHA3-384:字母(a-f)和数字(0-9)混合,固定位数 96 位;SHA-512/SHA3-512:字母(a-f)和数字(0-9)混合,固定位数 128 位。示例:
HMAC 系列
编码类型
示例
明文
123456
SHA-1
7c4a8d09ca3762af61e59520943dc26494f8941b
SHA-256
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
SHA3-256
c888c9ce9e098d5864d3ded6ebcc140a12142263bace3a23a36f9905f12bd64a
HMAC 这种算法就是在 MD5、SHA 两种加密的基础上引入了秘钥,其密文也和 MD5、SHA 类似,密文的长度和使用的 MD5、SHA 算法对应密文的长度是一样的。特征如下:
HMAC-MD5:字母(a-f)和数字(0-9)混合,位数一般为 32 位;HMAC-SHA-1:字母(a-f)和数字(0-9)混合,固定位数 40 位;HMAC-SHA-224 / HMAC-SHA3-224:字母(a-f)和数字(0-9)混合,固定位数 56 位;HMAC-SHA-256 / HMAC-SHA3-256:字母(a-f)和数字(0-9)混合,固定位数 64 位;HMAC-SHA-384 / HMAC-SHA3-384:字母(a-f)和数字(0-9)混合,固定位数 96 位;HMAC-SHA-512 / HMAC-SHA3-512:字母(a-f)和数字(0-9)混合,固定位数 128 位。HMAC 和 SHA、MD5 的密文都很像,当无法确定是否为 HMAC 时,可以通过其名称搜索到加密方法,如果传入了密钥 key,说明就是 HMAC,当然你也可以直接当做是 SHA 或 MD5 来解,解密失败时就得考虑是否有密钥,是否为 HMAC 了,在 JS 中,通常一个 HMAC 加密方法是这样写的:
function HmacSHA1Encrypt(word, key) { return CryptoJS.HmacSHA1(word, key).toString();}
示例(密钥 123456abcde):
RSA
编码类型
示例
明文
123456
HMAC-MD5
432bb95bb00005ddce4a1c757488ed95
HMAC-SHA-1
37a04076b7736c44460d330ee0d00014428b175e
HMAC-SHA-256
50cb1345366df11140fb91b43caaf69627e3f5529705ddf6b0d0cae67986e585
HMAC-SHA3-256
b808ed9f66436e89fba527a01d1d6044318fea8599d9f39bfb6bec4843964bf3
RSA 加密算法是一种非对称加密算法,通过公钥加密结果,必须私钥解密。 同样私钥加密结果,公钥可以解密,应用非常广泛,在网站中通常使用 JSEncrypt 库来实现,其最大的特征就是有一个设置公钥的过程,我们可以通过以下方法来快速初步判断是否为 RSA 算法:
搜索关键词 new JSEncrypt(),JSEncrypt 等,一般会使用 JSEncrypt 库,会有 new 一个实例对象的操作;搜索关键词 setPublicKey、setKey、setPrivateKey、getPublicKey 等,一般实现的代码里都含有设置密钥的过程;RSA 的私钥、公钥、明文、密文长度也有一定对应关系,也可以从这方面初步判断:私钥长度(Base64)公钥长度(Base64)明文长度密文长度4281281~53888122161~11717215883921~245344AES、DES、3DES、RC4、Rabbit 等AES、DES、3DES、RC4、Rabbit 等加密算法的密文通常没有固定的长度,他们通常使用 crypto-js 来实现,比如 AES 加解密示例如下:
CryptoJS = require("crypto-js")var key = CryptoJS.enc.Utf8.parse("0123456789abcdef");var iv = CryptoJS.enc.Utf8.parse("0123456789abcdef");function AESEncrypt(word) { var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString();}function AESDecrypt(word) { var srcs = word; var decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); return decrypt.toString(CryptoJS.enc.Utf8);}console.log(AESEncrypt("K哥爬虫"))console.log(AESDecrypt("nSk3wCd92s08sQ9N VHNvA=="))
在 crypto-js 中,也有一些特定的关键字,我们可以通过搜索这些关键字来快速定位到 crypto-js:
CryptoJS、crypto-js、iv、mode、padding、createEncryptor、createDecryptorABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /=、0xffffffff、0xffff定位到 CryptoJS 后,观察加密方法,比如 AES 就是 CryptoJS.AES.encrypt,DES 就是 CryptoJS.DES.encrypt,3DES 就是 CryptoJS.TripleDES.encrypt,注意他的 iv、mode、padding,拿下来就可以本地复现了。
SM 系列SM 代表商密,即商业密码,是我国发布的一系列国产加密算法,SM 系列包括:SM1、SM2、SM3 、SM4、SM7、SM9,其中 SM1 和 SM7 的算法不公开,SM 系列算法在我国一些 gov 网站上有应用,有关国产加密算法 K 哥前期文章有介绍:《爬虫逆向基础,认识 SM1-SM9、ZUC 国密算法》,本文不再赘述。
在 SM 的 JavaScript 代码中一般会存在以下关键字,可以通过搜索关键字定位:
SM2、SM3、SM4FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789getPublicKeyFromPrivateKey、doEncrypt、doDecrypt、doSignature混淆系列ObfuscatorObfuscator 就是混淆的意思,简称 OB 混淆,实战可参考K哥以前的文章:【JS 逆向百例】W店UA,OB反混淆,抓包替换CORS跨域错误分析,OB 混淆具有以下特征:
一般由一个大数组或者含有大数组的函数、一个自执行函数、解密函数和加密后的函数四部分组成;函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合;自执行函数,进行移位操作,有明显的 push、shift 关键字;一段正常的代码如下:
function hi() { console.log("Hello World!");}hi();
经过 OB 混淆后的结果:
JJEncode
function _0x3f26() { var _0x2dad75 = ['5881925kTCKCP', 'Hello\x20World!', '600mDvfGa', '699564jYNxbu', '1083271cEvuvT', 'log', '18sKjcFY', '214857eMgFSU', '77856FUKcuE', '736425OzpdFI', '737172JqcGMg']; _0x3f26 = function () { return _0x2dad75; }; return _0x3f26();}(function (_0x307c88, _0x4f8223) { var _0x32807d = _0x1fe9, _0x330c58 = _0x307c88(); while (!![]) { try { var _0x5d6354 = parseInt(_0x32807d(0x6f)) / 0x1 parseInt(_0x32807d(0x6e)) / 0x2 parseInt(_0x32807d(0x70)) / 0x3 -parseInt(_0x32807d(0x69)) / 0x4 parseInt(_0x32807d(0x71)) / 0x5 parseInt(_0x32807d(0x6c)) / 0x6 * (parseInt(_0x32807d(0x6a)) / 0x7) -parseInt(_0x32807d(0x73)) / 0x8 * (parseInt(_0x32807d(0x6d)) / 0x9); if (_0x5d6354 === _0x4f8223) break; else _0x330c58['push'](_0x330c58['shift']()); } catch (_0x3f18e4) { _0x330c58['push'](_0x330c58['shift']()); } }}(_0x3f26, 0xaa023));function _0x1fe9(_0xa907e7, _0x410a46) { var _0x3f261f = _0x3f26(); return _0x1fe9 = function (_0x1fe950, _0x5a08da) { _0x1fe950 = _0x1fe950 - 0x69; var _0x82a06 = _0x3f261f[_0x1fe950]; return _0x82a06; }, _0x1fe9(_0xa907e7, _0x410a46);}function hi() { var _0x12a222 = _0x1fe9; console[_0x12a222(0x6b)](_0x12a222(0x72));}hi();
JJEncode、AAEncode、JSFuck 都是同一个作者,实战可参考K哥以前的文章:【JS 逆向百例】网洛者反爬练习平台第二题:JJEncode 加密,JJEncode 具有以下特征:
大量 $、_ 符号,大量重复的自定义变量;仅由 18 个符号组成:[]()! ,\"$.:;_{}~=正常的一段 JS 代码:
alert("Hello, JavaScript" )
经过 JJEncode 混淆(自定义变量名为 $)之后的代码:
AAEncode
$=~[];$={___: $,$$$$:(![] "")[$],__$: $,$_$_:(![] "")[$],_$_: $,$_$$:({} "")[$],$$_$:($[$] "")[$],_$$: $,$$$_:(!"" "")[$],$__: $,$_$: $,$$__:({} "")[$],$$_: $,$$$: $,$___: $,$__$: $};$.$_=($.$_=$ "")[$.$_$] ($._$=$.$_[$.__$]) ($.$$=($.$ "")[$.__$]) ((!$) "")[$._$$] ($.__=$.$_[$.$$_]) ($.$=(!"" "")[$.__$]) ($._=(!"" "")[$._$_]) $.$_[$.$_$] $.__ $._$ $.$;$.$$=$.$ (!"" "")[$._$$] $.__ $._ $.$ $.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$ "\"" $.$_$_ (![] "")[$._$_] $.$$$_ "\\" $.__$ $.$$_ $._$_ $.__ "(\\\"\\" $.__$ $.__$ $.___ $.$$$_ (![] "")[$._$_] (![] "")[$._$_] $._$ ",\\" $.$__ $.___ "\\" $.__$ $.__$ $._$_ $.$_$_ "\\" $.__$ $.$$_ $.$$_ $.$_$_ "\\" $.__$ $._$_ $._$$ $.$$__ "\\" $.__$ $.$$_ $._$_ "\\" $.__$ $.$_$ $.__$ "\\" $.__$ $.$$_ $.___ $.__ "\\\"\\" $.$__ $.___ ")" "\"")())();
JJEncode、AAEncode、JSFuck 都是同一个作者,实战可参考K哥以前的文章:【JS 逆向百例】网洛者反爬练习平台第三题:AAEncode 加密,AAEncode 具有以下特征:
仅由日式表情符号组成正常的一段 JS 代码:
alert("Hello, JavaScript")
经过 AAEncode 混淆之后的代码:
JSFuck
゚ω゚ノ= /`m´)ノ ~┻━┻ / ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) '_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) '_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) '_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚) '_') [ (゚ー゚) (゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚) '_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c'] (゚Д゚) ['o'] (゚ω゚ノ '_')[゚Θ゚] ((゚ω゚ノ==3) '_') [゚ー゚] ((゚Д゚) '_') [(゚ー゚) (゚ー゚)] ((゚ー゚==3) '_') [゚Θ゚] ((゚ー゚==3) '_') [(゚ー゚) - (゚Θ゚)] (゚Д゚) ['c'] ((゚Д゚) '_') [(゚ー゚) (゚ー゚)] (゚Д゚) ['o'] ((゚ー゚==3) '_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) '_') [゚Θ゚] (゚Д゚) .゚Д゚ノ ((゚Д゚) '_') [(゚ー゚) (゚ー゚)] ((゚ー゚==3) '_') [o^_^o -゚Θ゚] ((゚ー゚==3) '_') [゚Θ゚] (゚ω゚ノ '_') [゚Θ゚]; (゚ー゚) =(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ '_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚ (゚Д゚)[゚o゚] (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) (゚Θ゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((゚ー゚) (゚Θ゚)) (゚ー゚) (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) ((゚ー゚) (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) ((o^_^o) - (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) (゚ー゚) (゚Д゚)[゚ε゚] ((゚ー゚) (゚Θ゚)) (c^_^o) (゚Д゚)[゚ε゚] (゚ー゚) ((o^_^o) - (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) (゚Θ゚) (c^_^o) (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) ((゚ー゚) (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) ((゚ー゚) (゚Θ゚)) (゚ー゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((゚ー゚) (゚Θ゚)) (゚ー゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((゚ー゚) (゚Θ゚)) ((゚ー゚) (o^_^o)) (゚Д゚)[゚ε゚] ((゚ー゚) (゚Θ゚)) (゚ー゚) (゚Д゚)[゚ε゚] (゚ー゚) (c^_^o) (゚Д゚)[゚ε゚] (゚Θ゚) (゚Θ゚) ((o^_^o) - (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) (゚Θ゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) ((o^_^o) (o^_^o)) (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) (゚Θ゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) - (゚Θ゚)) (o^_^o) (゚Д゚)[゚ε゚] (゚Θ゚) (゚ー゚) (o^_^o) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) ((o^_^o) - (゚Θ゚)) (゚Д゚)[゚ε゚] (゚Θ゚) ((゚ー゚) (゚Θ゚)) (゚Θ゚) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) (c^_^o) (゚Д゚)[゚ε゚] (゚Θ゚) ((o^_^o) (o^_^o)) (゚ー゚) (゚Д゚)[゚ε゚] (゚ー゚) ((o^_^o) - (゚Θ゚)) (゚Д゚)[゚ε゚] ((゚ー゚) (゚Θ゚)) (゚Θ゚) (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
JJEncode、AAEncode、JSFuck 都是同一个作者,实战可参考K哥以前的文章:【JS 逆向百例】网洛者反爬练习平台第四题:JSFuck 加密,JSFuck 具有以下特征:
仅由 6 个符号组成:[]()!正常的一段 JS 代码:
alert(1)
经过 JSFuck 混淆之后的代码类似于:
Jother
[][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]][([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] ([][[]] [])[ ! []] (![] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [])[ ! []] ([][[]] [])[ []] ([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] (!![] [])[ ! []]]((!![] [])[ ! []] (!![] [])[! [] ! [] ! []] (!![] [])[ []] ([][[]] [])[ []] (!![] [])[ ! []] ([][[]] [])[ ! []] ( [![]] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ ! []]] (!![] [])[! [] ! [] ! []] ( (! [] ! [] ! [] [ ! []]))[(!![] [])[ []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] ([] [])[([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] ([][[]] [])[ ! []] (![] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [])[ ! []] ([][[]] [])[ []] ([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] (!![] [])[ ! []]][([][[]] [])[ ! []] (![] [])[ ! []] (( [])[([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] ([][[]] [])[ ! []] (![] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [])[ ! []] ([][[]] [])[ []] ([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[! [] ! [] ! []] (!![] [])[ []] (!![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[ ! [] [ []]] (!![] [])[ ! []]] [])[ ! [] [ ! []]] (!![] [])[! [] ! [] ! []]]](! [] ! [] ! [] [! [] ! []]) (![] [])[ ! []] (![] [])[! [] ! []])()((![] [])[ ! []] (![] [])[! [] ! []] (!![] [])[! [] ! [] ! []] (!![] [])[ ! []] (!![] [])[ []] ([][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]] [])[ ! [] [! [] ! [] ! []]] [ ! []] ([ []] ![] [][(![] [])[ []] (![] [])[! [] ! []] (![] [])[ ! []] (!![] [])[ []]])[! [] ! [] [ []]])
Jother 混淆和 JSFuck 有点儿类似,唯一的区别就是密文比 JSFuck 多了 {},其解密方式和 JSFuck 是一样的,Jother 混淆现在不太常见了,也很难找到在线混淆之类的工具了,原作者有个在线页面也关闭了,不过仍然可以了解一下,Jother 混淆具有以下特征:
仅由 8 个符号组成:[]()! {}正常的一段代码:
function anonymous() {return location}
经过 Jother 混淆之后的代码类似于:
Brainfuck
[][(![] [])[!![] !![] !![]] ({} [])[ !![]] (!![] [])[ !![]] (!![] [])[ []]][({} [])[!![] !![] !![] !![] !![]] ({} [])[ !![]] ({}[[]] [])[ !![]] (![] [])[!![] !![] !![]] (!![] [])[ []] (!![] [])[ !![]] ({}[[]] [])[ []] ({} [])[!![] !![] !![] !![] !![]] (!![] [])[ []] ({} [])[ !![]] (!![] [])[ !![]]]((!![] [])[ !![]] (!![] [])[!![] !![] !![]] (!![] [])[ []] ({}[[]] [])[ []] (!![] [])[ !![]] ({}[[]] [])[ !![]] ({} [])[!![] !![] !![] !![] !![] !![] !![]] (![] [])[!![] !![]] ({} [])[ !![]] ({} [])[!![] !![] !![] !![] !![]] (![] [])[ !![]] (!![] [])[ []] ({}[[]] [])[!![] !![] !![] !![] !![]] ({} [])[ !![]] ({}[[]] [])[ !![]])()
Brainfuck 实际上是一种极小化的计算机语言,又称为 BF 语言,该语言以其极简主义着称,仅包含八个简单的命令、一个数据指针和一个指令指针,这种语言在爬虫领域也可以是一种反爬手段,可以视为一种混淆方式,虽然不常见,这里给一个在线体验的网址:https://copy.sh/brainfuck/text.html ,感兴趣的同志可以深入研究一下,Brainfuck 具有以下特征:
仅由 <> -.[] 组成;大量的 - 符号。正常的一段代码:
alert("Hello, Brainfuck")
经过 Brainfuck 混淆之后的代码类似于:
Ook!
--[-----> <]>-----. .-------. . . [---> <]> .------. [-> <]>.-[-> <]> . .. .[-> <]> .------------. [-> <]>.---[-----> <]>-. [-> <]> . . .--------.-[---> <]>--. [-> <]> . . [ >---<]>. .
Ook! 和 Brainfuck 的原理都是类似的,只不过符号有差异,同样的,这种语言在爬虫领域也可以是一种反爬手段,可以视为一种混淆方式,虽然不常见,在线体验的网址:https://www.splitbrain.org/services/ook ,Ook! 具有以下特征:
完整 Ook!:仅由 3 种符号组成 Ook.、Ook?、Ook!Short Ook!:仅由 3 种符号组成 .!?正常的一段代码:
alert("Hello, Ook!")
经过 Ook! 混淆之后的代码类似于:
Trivial brainfuck substitution
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Trivial brainfuck substitution 不是一种单一的编程语言,而是一大类编程语言,成员超过 20 个,前面提到的 Brainfuck、Ook! 都是其中的一员,在爬虫领域中,说实话这种稀奇古怪的混淆其实并不常见,但是在一些 CTF 中有可能会出现,作为爬虫工程师也可以了解了解,具体可以参考:https://esolangs.org/wiki/Trivial_brainfuck_substitution
其他恺撒密码恺撒密码(Caesar cipher)又称为恺撒加密、恺撒变换、变换加密,它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是 3 的时候,所有的字母 A 将被替换成 D,B 变成 E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
根据偏移量的不同,还存在若干特定的恺撒密码名称:偏移量为10:Avocat(A→K);偏移量为13:ROT13;偏移量为-5:Cassis (K 6);偏移量为-6:Cassette (K 7)
示例(偏移量 3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC栅栏密码栅栏密码就是把要加密的明文分成 N 个一组,然后把每组的第 1 个字连起来,形成一段无规律的话。栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多,一般不超过 30 个。
示例:明文为 THE LONGEST DAY MUST HAVE AN END。加密时,把将要传递的信息中的字母交替排成上下两行:
T E O G S D Y U T A E N N
H L N E T A M S H V A E D
将下面一行字母排在上面一行的后边组合成密文:
TEOGSDYUTAENN HLNETAMSHVAED
栅栏密码还有一种变种,称为栅栏密码 W 型,它会先把明文类似 W 形状进行排列,然后再按栏目顺序 1-N,取每一栏的所有字符值,组成加密后密文,比如字符串 123456789,采用栏目数为 3 时,明文将采用如下排列: 1—5—9 -2-4-6-8- –3—7– 取每一栏所有字符串,组成加密后密文:159246837
猪圈密码猪圈密码也称为朱高密码、共济会暗号、共济会密码或共济会员密码,是一种以格子为基础的简单替代式密码。只能对字母加解密并且符号无法复制,粘贴后会直接显示明文,即使使用符号,也不会影响密码分析,亦可用在其它替代式的方法。曾经是美国内战时盟军使用的密码,目前仅在密码教学、各种竞赛中使用。
摩斯密码
摩斯密码(Morse code),又称为摩尔斯电码、摩斯电码,是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。
26个字母的摩斯密码表
字符
摩斯码
字符
摩斯码
字符
摩斯码
字符
摩斯码
A
.━
B
━ ...
C
━ .━ .
D
━ ..
E
.
F
..━ .
G
━ ━ .
H
....
I
..
J
.━ ━ ━
K
━ .━
L
.━ ..
M
━ ━
N
━ .
O
━ ━ ━
P
.━ ━ .
Q
━ ━ .━
R
.━ .
S
...
T
━
U
..━
V
...━
W
.━ ━
X
━ ..━
Y
━ .━ ━
Z
━ ━ ..
10个数字的摩斯密码表
字符
摩斯码
字符
摩斯码
字符
摩斯码
字符
摩斯码
0
━ ━ ━ ━ ━
1
.━ ━ ━ ━
2
..━ ━ ━
3
...━ ━
4
....━
5
.....
6
━ ....
7
━ ━ ...
8
━ ━ ━ ..
9
━ ━ ━ ━ .
标点符号的摩斯密码表
培根密码
字符
摩斯码
字符
摩斯码
字符
摩斯码
字符
摩斯码
.
.━ .━ .━
:
━ ━ ━ ...
,
━ ━ ..━ ━
;
━ .━ .━ .
?
..━ ━ ..
=
━ ...━
'
.━ ━ ━ ━ .
/
━ ..━ .
!
━ .━ .━ ━
━
━ ....━
_
..━ ━ .━
"
.━ ..━ .
(
━ .━ ━ .
)
━ .━ ━ .━
$
...━ ..━
&
. ...
@
.━ ━ .━ .
培根密码,又名倍康尼密码(Bacon's cipher)是由法兰西斯·培根发明的一种隐写术,它是一种本质上用二进制数设计的,没有用通常的0和1来表示,而是采用a和b,看到一串的a和b,并且五个一组,那么就是培根加密了。
第一种方式:
字符
培根密码
字符
培根密码
字符
培根密码
字符
培根密码
A
aaaaa
H
aabbb
O
abbba
V
babab
B
aaaab
I
abaaa
P
abbbb
W
babba
C
aaaba
J
abaab
Q
baaaa
X
babbb
D
aaabb
K
ababa
R
baaab
Y
bbaaa
E
aabaa
L
ababb
S
baaba
Z
bbaab
F
aabab
M
abbaa
T
baabb
G
aabba
N
abbab
U
babaa
第二种方式:
字符
培根密码
字符
培根密码
字符
培根密码
字符
培根密码
a
AAAAA
h
AABBB
p
ABBBA
x
BABAB
b
AAAAB
i-j
ABAAA
q
ABBBB
y
BABBA
c
AAABA
k
ABAAB
r
BAAAA
z
BABBB
d
AAABB
l
ABABA
s
BAAAB
e
AABAA
m
ABABB
t
BAABA
f
AABAB
n
ABBAA
u-v
BAABB
g
AABBA
o
ABBAB
w
BABAA
示例:
明文:kuaidaili密文:ABABABABAAAAAAAABAAAAAABBAAAAAABAAAABABBABAAA维吉尼亚密码维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移排序为一张表,与原字母序列共同组成26行及26列的字母表。另外,维吉尼亚密码必须有一个密钥,这个密钥由字母组成,最少一个,最多可与明文字母数量相等。维吉尼亚密码表如下:
示例:
明文:I've got it.密钥:ok密文:W'fs qcd wd.首先,密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到相同。示例的明文长度为8个字母(非字母均被忽略),密钥会被程序补全为 okokokok,然后根据维吉尼亚密码表进行加密:明文第一个字母是 I,密钥第一个字母是 o,在表格中找到 I 列与 o 行相交点,字母 W 就是密文第一个字母,同理,v 列与 k 行交点字母是 F,e 列与 o 行交点字母是 S,以此类推。注意:维吉尼亚密码只对字母进行加密,不区分大小写,若文本中出现非字母字符会原样保留,如果输入多行文本,每行是单独加密的。
与佛论禅字符串转换后,是一些佛语,在线体验:https://keyfc.net/bbs/tools/tudoucode.aspx
示例:
明文:K哥爬虫密文:佛曰:哆室梵阿俱顛哆礙孕奢大皤帝罰藝哆伽密謹爍舍呐栗皤夷密当铺密码当铺密码在 CTF 比赛题目中出现过。该加密算法是根据当前汉字有多少笔画出头,对应的明文就是数字几。
示例:
明文:王夫 井工 夫口 由中人 井中 夫夫 由中大密文:67 84 70 123 82 77 125
爬虫的数据相关性分析(CTF爬虫掌握这些特征)
2024-11-25 10:00:33 作者:数理化 网址:https://m.xinb2b.cn/know/axd480447.html
- 假牙和种牙社保能报销吗(你知道吗)
- 2024-11-25你知道吗牙科纳入医保范围的主要是:补牙(包括基本材料、治疗费);拔牙;治疗牙周病、牙龈炎等牙病发生的费用而不能用医保进行报销的项目是:镶牙;烤瓷牙;洗牙;牙齿矫正;种植牙;拔牙,补牙等都属医保范围但镶牙、洗牙。
- 四川刘氏家谱的字辈(刘氏家谱字辈字派)
- 2024-11-25刘氏家谱字辈字派刘氏字辈字派之四川省(川)四川(湖北迁入)刘氏:正文章中良汉四川大邑县安仁镇(上场口刘大石桥)刘氏:芝澄勋振,从化光昌含君有明,开国成家续编:诗书为本,勤俭良嘉;根深叶茂,永焕光华四川大邑县安仁镇(刘。
- 龙珠超布罗利最终形态(龙珠超2022年剧场版)
- 2024-11-25龙珠超2022年剧场版布罗利自从单独出剧场版之后,就知道了布罗利距离洗白不远了果不其然布罗利被悟吉塔打败后,原本是回到了曾经的星球但是在2022年剧场版中,布罗利已经被悟空接到了破坏神星,目的就是防止弗利萨找到布罗利同时也。
- 上二本想考研学什么专业好(大学要是报考这5个专业)
- 2024-11-25大学要是报考这5个专业很多学生和家长在听到“第二学位”的时候,都会以为这不就是辅修“双学位”吗?其实这两者有着很大的区别“双学位”是指在大学中学好自己本专业的同时,进行其他专业的学习,但是教育部并不认可这样的学位证书,仅仅。
- 如何科学喂养猫咪的5个小技巧(如何科学喂养猫咪)
- 2024-11-25如何科学喂养猫咪"民以食为天",对于猫咪也不例外如何喂养好猫咪,让它们能够健康成长,铲屎官们也是操碎了心正确的饮食不仅能够增强猫咪的免疫力,降低生病的几率,保障宠物身体的健康,还能延长猫咪的生命因此怎。
- 美瞳如何分正反(新手如何戴美瞳)
- 2024-11-25新手如何戴美瞳宝宝们都希望拥有迷人大眼睛,但是有的宝宝一旦摘下眼镜就会双眼无神,那么宝宝们可以尝试一下戴隐形眼镜1.在光线充足的情况下,找一个大镜子,放在桌子上或凳子上2.把装美瞳的盒子打开,拿出佩戴棒、镊子3.用。
- 张翰新剧杀青表情包(张翰新剧先生们请立正官宣海报)
- 2024-11-25张翰新剧先生们请立正官宣海报近期热播的电视剧有很多,像是《二十不惑》《三十而已》《以家人之名》《琉璃》等等,都获得观众的热议,但是要说其中最火爆的电视剧,当属《三十而已》和《以家人之名》这两部现在《以家人之名》正在热播,但随着剧。
- 牙齿缺失一颗有几种修复(牙齿缺失哪种修复方法好)
- 2024-11-25牙齿缺失哪种修复方法好牙齿缺失哪种修复方法好 随着口腔意识的提升,很多缺牙的朋友们纷纷走进口腔医院,去重新找回健康的牙齿,但是现在口腔补牙技术逐渐发展,即使是牙齿缺失,也有多种修复方法,这让很多人陷入了纠结,牙齿缺失哪种。
- 适合食用三七的十大人群(三七的黄金搭档终于出现了)
- 2024-11-25三七的黄金搭档终于出现了三七,是民众所熟知的中药材之一,更被心血病人看做是“活血化瘀之首”相对于其他的中药材,三七相对更安全,李时珍称把它称为“金不换”,而享誉国内外的片仔癀和云南白药中都有三七成分目前大家服用最多的是三七粉。
- 早餐吃什么长高最快(吃早餐方法)
- 2024-11-25吃早餐方法想要通过早餐的饮食促进长高,要注意氨基酸和钙离子微量元素的摄入,可以比如喝牛奶、吃杂粮粥、全麦的面包、鸡蛋,可以少量的摄入肉类,可以补充一定量的坚果,都可以有效的补充营养,同时也有利于消化不至于让晨起。
- 48款空气炸锅美食(6种空气炸锅美食)
- 2024-11-256种空气炸锅美食作为土生土长的四川人,对烧烤和油炸食品,有着深深的执念,可心里也总觉得传统的油炸食品热量太高,做起来也非常耗油,所以不得不尽量控制自己的嘴巴不过,随着这两年空气炸锅的普及,自己也跟风入手了,不得不承认。
- 岳云鹏说过哪些情话(岳云鹏晒手写信庆结婚10周年)
- 2024-11-25岳云鹏晒手写信庆结婚10周年2月9日,相声演员岳云鹏凌晨在社交平台公布了自己与老婆结婚的登记日期,并且晒出了手写信,来庆祝他与老婆结婚登记10周年从岳云鹏的手写信中可以看到他对妻子的感情非常深,岳云鹏在信中写道“10年里我们的婚。