以GeeTest為例的滑動驗證碼破解 - 參數初探

上一篇文章的最後,我們列出來需要解決的一些問題。這些問題基本上都與參數有關,因此從這裡開始我們便會開始研究他們。

首先,要用到的工具是瀏覽器F12 Dev Tool里的Debugger,Chrome和Edge的都可以。

開始之前先確保你對JavaScript有最基礎的認知,達到語法上能看懂就好了。

---------------------------------------------------------------------------------------

首先要探究的是1號包里的ts參數,上一篇文章中我們作出了它是隨機數的假設。切換到Debugger標籤頁,在搜索框中輸入ts=進行搜索:

可以看到,ts參數的確是隨機數沒錯。這樣我們就可以寫代碼模擬出1號包了。

接著是回調函數名geetest_xxx中的xxx,我們想知道這裡的xxx是否也是隨機數。在搜索框中尋找callback=",結果有兩個,一個是gt.js中的:

s.src = protocol + apiServer + "getfrontlib.php?gt=" + config.gt + "&callback=" + cb;

從這裡往上追查cb,找到了這一行:

var cb = "geetest_" + random();

random並不是JS原生函數,在同一頁面找到random的定義:

var random = function () { return parseInt(Math.random() * 10000) + (new Date()).valueOf(); };

我們一開始猜測它是單純的隨機數,實際上它是一個0-10000的隨機整數加上目前的UNIX時間。這個實際上也非常好模擬。

至此,對於上次留下的5個問題中,第一個問題:

  • 1號包的參數ts和後面的callback的後綴是否真的是隨機數?

我們得出了答案:

  • ts是單純的隨機數,只是為了防止瀏覽器直接返回緩存
  • callback的後綴是隨機數+目前時間

是的,就是這樣,這篇文章無恥地在這裡結束了??(一天一更就是這樣)。原本想把圖像還原也開個頭的,但是有點累了不想寫了。我還得儘快在專欄微軟信仰中心里更新之前挖下的必應詞典API的坑啊(有興趣的可以去看看)。

下篇文章里我們將一起探究打亂了的圖像是如何被還原的,而在再下一篇文章里,我們將會開始寫C#來實現這個還原。

還是那句啦,喜歡我的文章的話記得關注點贊!

推薦閱讀:

Cocos 中的腳本綁定
使用Hbuild快速構建生成現代化前端項目
某熊周刊系列:一周推薦外文技術資料(12.1)
在手持設備上使用 touchstart 事件代替 click 事件是不是個好主意?
PHP 和 node.js 共存的問題?

TAG:验证码识别 | Windows开发 | JavaScript |