該系列文章僅限于某驗滑塊研究,不會公開具體算法源碼,歡迎討論
本文關(guān)聯(lián)文章:
縱觀
入微
芥子
浩瀚
一. 函數(shù)c.guid()
跟進(jìn)c函數(shù)得到其定義
ok,353行,這有點熟悉啊,和那個pow_msg的生成一樣的
var g = function() {
function e() {
return (65536 * (1 + Math["random"]()) | 0)["toString"](16)["substring"](1);
}
return function() {
return e() + e() + e() + e();
}
;
}();
二. 函數(shù)_.encrypt()
跟進(jìn).default.encrypt函數(shù)

跟進(jìn)函數(shù)可以看到其定義了setPublic

扣下來的js代碼太長,這里就不粘貼了,各位自己扣下,或者用其他語言實現(xiàn)下,作者用的是python的Crypto庫
如果你用Crypto庫實現(xiàn)的話,有個坑注意下,rsa加密完的數(shù)據(jù)應(yīng)該轉(zhuǎn)換成hex碼
三. 函數(shù)i.encrypt()
跟進(jìn)i.default.encrypt函數(shù),結(jié)合上下文代碼看到有iv、mode、CBC、pad、pkcs7、AES等諸多元素,猜測其為AES-CBC模式加密,pkcs7模式填充,偏移iv

這里也是js代碼太長,作者用的還是Crypto庫,很牛逼,連填充方式都有
這里同樣有個坑,aes加密完的數(shù)據(jù)如果轉(zhuǎn)化成hex碼就等于把接下來的第四步也完成了
四. 函數(shù)c.arrayToHex()
同樣的方法跟進(jìn)去
把代碼扣下來
t["arrayToHex"] = function w(e) {
for (var t = [], s = 0, n = 0; n < 2 * e["length"]; n += 2)
t[n >>> 3] |= parseInt(e[s], 10) << 24 - n % 8 * 4,
s++;
for (var a = [], o = 0; o < e["length"]; o++) {
var r = t[o >>> 2] >>> 24 - o % 4 * 8 & 255;
a["push"]((r >>> 4)["toString"](16)),
a["push"]((15 & r)["toString"](16));
}
return a["join"]("");
}
五. 結(jié)語
到這里我們就分析完了該驗證碼所有流程,把每階段的代碼組合封裝下,就OK了,上一下運行結(jié)果圖,平均通過率95%左右

第一輪通過率98%

第二輪通過率94%

第三輪通過率97%