阅读参考文章1,获取脚本,修改。可以改成任何自己爱用的语言。

本质是获取当前操作者的浏览器信息、鼠标键盘事件统计、生成 hexin-v 的时间,以及定期从服务器获取的 SERVER_TIME,经过可逆加密来生成一段密文,携带在请求中,服务器收到请求后再比对验证。

所以按原文说的,抠一下 js代码。主要还是抠加密代码,解密代码咱也用不上。

需要注意两点:

  1. 最后生成主体中,其实是统计了 mouseMovemouseClickmouseWheel(写脚本的家伙错拼成了mouseWhell)、keyDownclickPosXclickPosY的。前面 4 者是每有一次操作时都 +1,后 2 者是当 keyDown 发生时的点击坐标。虽然现在置为0也没关系,但若要模拟的足够逼真,每次 Update 的时候:
    • 前 4 者可以 + 合适的随机数再参与生成;
    • 后 2 者可以取合适的屏幕坐标随机数范围。
  2. strHash 是拿当前 User-Agent 去 hash 了,要模仿的够逼真,可以拿爬虫模拟的 User-Agent 去 hash。谁知道后面会不会真的去验证这玩意呢?
graph LR A[Init random value,<br/><code>strHash</code>or 0] --> B[Query chameleon.js<br/>to get<code>SERVER_TIME</code><br/>, and generate<code>hexin-v</code>]; B -- Succeed --> C[Request and<br/>add random<br/>to statistic<br/>fields]; C --> D{Content-type?}; D -- text/html --> B; D -- application<br/>/json --> F[Process<br/>/Next request]; B -- Failed ----> E[Retry/End];
流程