該系列文章僅限于某驗(yàn)滑塊研究诵叁,不會公開具體算法源碼,歡迎討論
本文關(guān)聯(lián)文章:
縱觀
入微
芥子
浩瀚
一. 函數(shù)c.guid()
跟進(jìn)c函數(shù)得到其定義ok,353行,這有點(diǎn)熟悉啊,和那個(gè)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代碼太長,這里就不粘貼了嚷量,各位自己扣下陋桂,或者用其他語言實(shí)現(xiàn)下,作者用的是python的Crypto庫
如果你用Crypto庫實(shí)現(xiàn)的話蝶溶,有個(gè)坑注意下嗜历,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庫抹腿,很牛逼,連填充方式都有
這里同樣有個(gè)坑旭寿,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é)語
到這里我們就分析完了該驗(yàn)證碼所有流程警绩,把每階段的代碼組合封裝下,就OK了盅称,上一下運(yùn)行結(jié)果圖肩祥,平均通過率95%左右