关注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-22 01:59:10 作者:数理化 网址:https://m.xinb2b.cn/sport/axd480447.html
- 暮霭沉沉什么意思(暮霭沉沉释义)
- 2024-11-22暮霭沉沉释义暮霭沉沉的意思是:形容傍晚的云雾深厚低沉的样子暮霭,傍晚的云雾,黄昏时的云雾沉沉,深沉,常指人心或事物沉重,可解释为水、雨等貌盛,也可以解释为声音,音信等遥远不及在这里是低沉厚重之意。
- 中超比赛直播国安比赛日程(中超积分榜中超刺激一夜)
- 2024-11-22中超积分榜中超刺激一夜2023年中超联赛第15轮最后三场,武汉三镇2-1长春亚泰,获得本赛季主场首胜;上海海港1-1大连人,领头羊惨遭扳平;北京国安主场5-0横扫深圳队;一起来看看精彩比赛过程!北京国安5-0深圳队朴成在比。
- 千年沧桑人文史迹(期颐老人笑谈家国巨变)
- 2024-11-22期颐老人笑谈家国巨变百岁老人钮六连每天还要喝一碗糊糊这种以玉米面或小米面配着土豆、菜叶子熬成的稀菜粥,老人年轻时从未吃饱过在20多公里外的山西省阳高县龙泉镇义合村,同样1921年出生的安焕珠如今竟然习惯了吃拿糕,年轻时不。
- 爱玛电动车在不骑的情况下多久充一次电更好
- 2024-11-22爱玛电动车在不骑的情况下多久充一次电更好一年电动车如若长时间不使用,断开车与电源插头后,应当一年充一次电,同时应当避免电池馈电,造成后期无法充电;避免部分部件因锈蚀而无法正常工作。
- 女性怀孕男士可以主张不要吗(安全无副作用的方式)
- 2024-11-22安全无副作用的方式随着国家二胎政策的放开,越来越多的女性选择再次怀孕,生第二个宝宝但是也有部分家庭,面临养育的困境,物质生活的窘迫,带孩子人手的不足,或者夫妻双方年龄的增大,因此有很多女性在怀孕后,逼不得已进行人工流产。
- 好听的天津话方言(渐渐褪去的天津方言土语)
- 2024-11-22渐渐褪去的天津方言土语前几天和小孙子打逗,我人高胳膊长,用两只手轮换着轻轻推捂他的脑袋,不让他靠近我,孙子不断用小胳膊小手拍打我,就是够不着于是,他主动停了下来,突然伸出胳膊抡了两圈儿,然后捣在我肚子上,我脱口说了句:嘿!。
- 杭州时尚女装批发市场哪里好(杭州品牌折扣女装批发市场进货该怎么做)
- 2024-11-22杭州品牌折扣女装批发市场进货该怎么做杭州是一个美丽的城市,这里的经济也比较发达,这里的服装行业也是比较多的,很多人都来这里进货杭州的本地生产的服装也有着自己独特的派系风格,这里也聚集着很多大品牌服装来这里进货是不错的选择,我们在进货的时。
- 朝天子咏喇叭原文翻译(朝天子咏喇叭原文阅读)
- 2024-11-22朝天子咏喇叭原文阅读《朝天子·咏喇叭》王磐〔明代〕喇叭,唢呐,曲儿小腔儿大官船来往乱如麻,全仗你抬声价(唢呐一作:锁呐;声价一作:身价)军听了军愁,民听了民怕哪里去辨甚么真共假?(甚么同:什么)眼见的吹翻了这家,吹伤了那。
- 流量代理平台有哪些(陌陌引流推广软件推荐)
- 2024-11-22陌陌引流推广软件推荐12月10日,罗斯基联合钛动科技、Topon共同主办的《游戏赛道新机会》主题系列沙龙在武汉举办活动邀请了国内外多家业内知名公司的负责人到场进行分享,几位嘉宾分别从自己擅长的领域出发,通过数据分析,案例。
- 夏威夷游玩计划(上精选赢夏威夷双人游)
- 2024-11-22上精选赢夏威夷双人游分享即大神,脑洞变大奖!网易大神全新版本近日清凉来袭,新增发现功能汇聚优质内容,实用游戏工具助力大神进阶,还能抢鲜掌握网易各大游戏产品的爆料!为回馈广大玩家,网易大神携手多款热门游戏,献上多重惊喜在指。
- 8cm火焰龟多少钱(靓货火焰龟)
- 2024-11-22靓货火焰龟,。
- 国企改革的现代企业发展模式(非凡十年国企改革)
- 2024-11-22非凡十年国企改革每经记者:李可愚每经编辑:陈旭国有企业是中国特色社会主义的重要物质基础和政治基础,是党执政兴国的重要支柱和依靠力量——回顾党的十八大以来的十年,我国国资国企在改革和发展各方面走过了一条极不平凡的道路,。