腾讯防水墙的分析识别与破解(续)

书接上回

  前面文章因为孩子晚上哭闹而告终,后面的解密草草结束了。只能感叹,奶爸伤不起。既要挣钱养家,又要照顾孩子和她。只希望孩子快快长大。

防水墙加密参数分析

   1 <!DOCTYPE html>
   2 <html>
   3     <head lang=zh-CN>
   4         <meta charset=UTF-8>
   5         <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
   6         <meta name=renderer content=webkit>
   7         <script src=https://captcha.gtimg.com/open/1/lang_2052.js></script>
   8         <script type=text/javascript src="https://captcha.gtimg.com/open/1/jquery-1.11.3.min.js?v=1.1.0"></script>
   9         <link rel=stylesheet type=text/css href="/cap_icons.css?v=2.2.4">
  10         <link rel=stylesheet href="/union_slide_puzzle_cap.css?v=2.2.7">
  11         <script src=https://captcha.gtimg.com/open/1/JsonMsg.js></script>
  12         <script src=https://captcha.gtimg.com/open/1/libbm.js></script>
  13         <script type=text/javascript src=https://captcha.gtimg.com/open/1/d41060624d.js></script>
  14         <script defer type=text/javascript src="https://captcha.gtimg.com/public/2/tokenidiframe_d.js?v=1.0.0"></script>
  15     </head>
  16     <body class=captcha_aq unselectable=on>
  17         <div class=slide_puzzle>
  18             <div class=container_wrap>
  19                 <div class=container_wrap_modal></div>
  20                 <div class=container_head>
  21                     <div class=icon>
  22                         <div class="title_icon logo aq_icon aq_icon_vryLogo" style=color:#;>&#xe910;</div>
  23                         <div class=title_icon_modal></div>
  24                     </div>
  25                     <div class=title id=title style=color:#;>安全验证</div>
  26                     <span class="aq_icon aq_icon_close icon_close">&#xe901;</span>
  27                 </div>
  28                 <div class=container_body id=container_body>
  29                     <div class=captchArea ctrl=capachArea>
  30                         <div class=layout>
  31                             <div class=drag>
  32                                 <div class=network_error style=display:none;></div>
  33                                 <div class=oripic data-img=captcha-bkg>
  34                                     <img id=slideBkg class="big img" style=visibility:hidden;>
  35                                 </div>
  36                                 <div class=operates style=visibility:hidden;>
  37                                     <div class="refresh captcha_icon">
  38                                         <a class="aq_icon aq_icon_refresh" id=reload href=javascript:void(0)>&#xe904;</a>
  39                                         <span class=tip style=color:#; id=change_pic></span>
  40                                     </div>
  41                                     <div class="help captcha_icon">
  42                                         <a class="aq_icon aq_icon_vryFeedback" id=showFB target=_blank rel="noopener noreferrer" href=javascript:void(0);>&#xe90f;</a>
  43                                         <span class=tip style=color:#; id=feedback></span>
  44                                     </div>
  45                                     <div class=clear_both></div>
  46                                 </div>
  47                                 <img id=slideBlock class=slideBlock style=visibility:hidden;>
  48                                 <img id=totalBlock class=totalBlock style=visibility:hidden;>
  49                                 <div id=tip_point class=tip_point_2052 style=visibility:hidden;></div>
  50                                 <div id=bar_success class=bar_success>
  51                                     <div class=bkg></div>
  52                                     <span class=bar_success_icon>验证成功</span>
  53                                 </div>
  54                                 <div id=bar_mask class=bar_mask></div>
  55                                 <div class=loader>
  56                                     <div class=ball-beat>
  57                                         <div style="background-color:#;opacity:0.2;filter: alpha(opacity=20);"></div>
  58                                         <div style=background-color:#;></div>
  59                                         <div style="background-color:#;opacity:0.2;filter: alpha(opacity=20);"></div>
  60                                     </div>
  61                                 </div>
  62                             </div>
  63                         </div>
  64                         <div class=opArea>
  65                             <div id=slide class=slide>
  66                                 <div class=slide_bkg_border></div>
  67                                 <div class=slide_bkg id=slide_bkg style=color:#;></div>
  68                                 <div id=slide_bar_head class=bar_head unselectable=on>
  69                                     <div class="bar_head_modal aq_icon aq_icon_va_loading" unselectable=on style=color:#;>&#xe90d;</div>
  70                                     <img class=bar_head_modal_img unselectable=on src="/slide_modal.png?v=1.0">
  71                                     <div class=bar_bkg unselectable=on></div>
  72                                 </div>
  73                             </div>
  74                         </div>
  75                     </div>
  76                 </div>
  77             </div>
  78         </div>
  79         <div class=captcha_aq_modal></div>
  80     </body>
  81     <script type=text/javascript>
  82         !function(t) {
  83             function e(n) {
  84                 if (o[n])
  85                     return o[n].exports;
  86                 var i = o[n] = {
  87                     exports: {},
  88                     id: n,
  89                     loaded: !1
  90                 };
  91                 return t[n].call(i.exports, i, i.exports, e),
  92                 i.loaded = !0,
  93                 i.exports
  94             }
  95             var o = {};
  96             return e.m = t,
  97             e.c = o,
  98             e.p = "",
  99             e(0)
 100         }([function(t, e, o) {
 101             var n = o(1)
 102               , i = o(2);
 103             n(document).ajaxSend(function(t, e, o) {
 104                 /^post$/i.test(o.type) ? o.data = i(o.data) : o.url = i(o.url)
 105             });
 106             var r = o(3)
 107               , a = o(8)
 108               , s = o(26)
 109               , c = (o(12),
 110             o(6));
 111             o(18);
 112             var d = o(13)
 113               , f = o(15)
 114               , l = "noborder"
 115               , p = ""
 116               , u = "embed"
 117               , h = "";
 118             n(function() {
 119                 var t = new r;
 120                 t.init({
 121                     theme: p,
 122                     color: h
 123                 }),
 124                 t.conform(u, 4, h, p),
 125                 window.PIE && n(".bar_head_modal_img, .bar_bkg, #slide").each(function() {
 126                     PIE.attach(this)
 127                 }),
 128                 "noborder" != l && t.addBorder(),
 129                 s.init(t),
 130                 a.init(),
 131                 n("#title").html(c.c2),
 132                 n("#change_pic").html(c.c5),
 133                 n("#feedback").html(c.c4),
 134                 n(".bar_success_icon").html(c.c3),
 135                 n("#slide_bkg").html(c.puzzle1),
 136                 n(".network_error").html(c.c13),
 137                 document.body.onselectstart = function() {
 138                     return !1
 139                 }
 140                 ,
 141                 document.body.onmousedown = function() {
 142                     return !1
 143                 }
 144                 ,
 145                 BJ_REPORT && BJ_REPORT.init && BJ_REPORT.init({
 146                     onReport: function(t, e) {
 147                         var o = "";
 148                         e && e.msg && (o += e.msg),
 149                         f.send(d.getInfo().tokenid, 1, o)
 150                     }
 151                 })
 152             })
 153         }
 154         , function(t, e) {
 155             t.exports = jQuery
 156         }
 157         , function(t, e) {
 158             var o = function() {
 159                 var t = 1
 160                   , e = /subsid=(d+)/.exec(location.href);
 161                 e && (t = parseInt(e[1], 10) + 1);
 162                 var o = function(e, o) {
 163                     var n = o || t;
 164                     return e = /subsid=d+/.test(e) ? e.replace(/subsid=d+/g, "subsid=" + n) : e + "&subsid=" + n,
 165                     o || t++,
 166                     e
 167                 };
 168                 return o.get = function() {
 169                     return t
 170                 }
 171                 ,
 172                 o.bind = function() {
 173                     var e = t++;
 174                     return function(t) {
 175                         return o(t, e)
 176                     }
 177                 }
 178                 ,
 179                 o.reset = function() {
 180                     t = 1
 181                 }
 182                 ,
 183                 o
 184             }();
 185             t.exports = o
 186         }
 187         , function(t, e, o) {
 188             function n(t) {
 189                 this.opts = i.extend(s, t || {})
 190             }
 191             var i = o(1)
 192               , r = o(4)
 193               , a = o(5)
 194               , s = {
 195                 color: "#1a79ff",
 196                 color_e: "#b3b3b3",
 197                 c_gray_icon: "#b3b3b3",
 198                 borderEle: i(".container_wrap"),
 199                 fontEles: [i(".radio"), i(".tip")],
 200                 bgEles: [i(".btn_primary")],
 201                 theme: ""
 202             };
 203             n.prototype.init = function(t) {
 204                 this.opts = i.extend(s, t || {}),
 205                 "yellow" == this.opts.theme ? this.opts.color_e = "#bea272" : "" != this.opts.color && (this.opts.color_e = this.opts.color)
 206             }
 207             ,
 208             n.prototype.addBorder = function() {
 209                 this.opts.borderEle.addClass("cap_container")
 210             }
 211             ,
 212             n.prototype.addBorderTop = function() {
 213                 this.opts.borderEle.addClass("cap_container_top cap_container_shadow")
 214             }
 215             ,
 216             n.prototype.dealEvents = function(t) {
 217                 if ("yellow" == this.opts.theme) {
 218                     var e = r.lighten(this.opts.color_e, 40);
 219                     t.css("color", e)
 220                 } else {
 221                     var e = r.lighten(this.opts.c_gray_icon, 40);
 222                     t.css("color", e)
 223                 }
 224             }
 225             ,
 226             n.prototype.unDealEvents = function(t) {
 227                 "yellow" == this.opts.theme ? t.css("color", this.opts.color_e) : t.css("color", this.opts.c_gray_icon)
 228             }
 229             ,
 230             n.prototype.setElements = function() {
 231                 for (var t = this.opts.color, e = this.opts.fontEles, o = 0; o < e.length; o++)
 232                     e[o].each(function() {
 233                         i(this).css("color", t)
 234                     });
 235                 for (var n = this.opts.bgEles, r = 0; r < n.length; r++)
 236                     n[r].each(function() {
 237                         i(this).css({
 238                             background: t,
 239                             "border-color": t
 240                         })
 241                     })
 242             }
 243             ,
 244             n.prototype.set = function(t, e) {
 245                 t in this.opts && (this.opts[t] = e)
 246             }
 247             ,
 248             n.prototype.conform = function(t, e, o, n) {
 249                 if ("yellow" == n && this.opts.borderEle.css("1" == a.isIE() ? {
 250                     border: "1px solid rgb(234,223,199)",
 251                     background: "linear-gradient(180deg,#fff9ed,#fff4dd)",
 252                     background: "-moz-linear-gradient(180deg, #fff9ed,#fff4dd)",
 253                     background: "-o-linear-gradient(180deg,#fff9ed,#fff4dd)",
 254                     background: "-webkit-linear-gradient(180deg,#fff9ed,#fff4dd)",
 255                     background: "-ms-linear-gradient(180deg,#fff9ed,#fff4dd)",
 256                     filter: "progid:DXImageTransform.Microsoft.Gradient(startColorStr='#fff9ed',endColorStr='#fff4dd',gradientType='0')"
 257                 } : "point" == t ? {
 258                     border: "1px solid rgb(234,223,199)",
 259                     "border-top": "0px",
 260                     background: "linear-gradient(180deg,#fff9ed,#fff4dd)",
 261                     background: "-moz-linear-gradient(180deg, #fff9ed,#fff4dd)",
 262                     background: "-o-linear-gradient(180deg,#fff9ed,#fff4dd)",
 263                     background: "-webkit-linear-gradient(180deg,#fff9ed,#fff4dd)",
 264                     filter: "progid:DXImageTransform.Microsoft.Gradient(startColorStr='#fff9ed',endColorStr='#fff4dd',gradientType='0')"
 265                 } : {
 266                     border: "1px solid rgb(234,223,199)",
 267                     background: "linear-gradient(180deg,#fff9ed,#fff4dd)",
 268                     background: "-moz-linear-gradient(180deg, #fff9ed,#fff4dd)",
 269                     background: "-o-linear-gradient(180deg,#fff9ed,#fff4dd)",
 270                     background: "-webkit-linear-gradient(180deg,#fff9ed,#fff4dd)",
 271                     filter: "progid:DXImageTransform.Microsoft.Gradient(startColorStr='#fff9ed',endColorStr='#fff4dd',gradientType='0')"
 272                 }),
 273                 "popup" == t)
 274                     switch (e) {
 275                     case 1:
 276                         "yellow" == n && (i(".title_icon, .title, .icon_close, .aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 277                             color: "#bea272"
 278                         }),
 279                         i(".btn").css({
 280                             background: "#bea272",
 281                             border: "none"
 282                         }));
 283                         break;
 284                     case 2:
 285                         "yellow" == n ? (i(".container_head").css({
 286                             "border-bottom": "none"
 287                         }),
 288                         i(".title_icon, .title, .icon_close, .aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 289                             color: "#bea272"
 290                         }),
 291                         i(".captcha_aq").css({
 292                             background: "linear-gradient(to bottom,#fff9ed,#fff4dd)"
 293                         }),
 294                         i(".btn").css({
 295                             background: "#bea272",
 296                             border: "none"
 297                         })) : i(".container_head").css({
 298                             "border-bottom": "none"
 299                         });
 300                         break;
 301                     case 3:
 302                         "yellow" == n ? (i(".container_head").css({
 303                             "border-bottom": "none"
 304                         }),
 305                         i(".title_icon, .title, .icon_close, .aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 306                             color: "#bea272"
 307                         }),
 308                         i(".captcha_aq").css({
 309                             background: "linear-gradient(to bottom,#fff9ed,#fff4dd)"
 310                         }),
 311                         i(".btn").css({
 312                             background: "#bea272",
 313                             border: "none"
 314                         })) : i(".popup_ct_wrap_head").css({
 315                             "border-bottom": "1px solid #e5e5e5"
 316                         });
 317                         break;
 318                     case 4:
 319                         if ("yellow" == n)
 320                             i(".tip").css({
 321                                 color: "#bea272"
 322                             }),
 323                             i(".bar_head").css({
 324                                 border: "none",
 325                                 "border-radius": "5px",
 326                                 "box-shadow": "0 0 10px rgba(108,85,35,0.5)",
 327                                 background: "linear-gradient(to bottom,#ffffff,#eadab6)"
 328                             }),
 329                             i(".slide_bkg").css(1 == a.isLteIEVersion(9) ? {
 330                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#7Fecddbb',endColorstr='#7Fecddbb')",
 331                                 color: "#bea272"
 332                             } : {
 333                                 "border-top": "1px solid rgba(109,84,28,0.1)",
 334                                 background: "rgba(236,221,187,0.5)",
 335                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#19ecddbb',endColorstr='#19ecddbb')",
 336                                 color: "#bea272"
 337                             }),
 338                             i(".title_icon, aq_icon_vryLogo, .title, .aq_icon_close, .aq_icon_va_loading").css({
 339                                 color: "#bea272"
 340                             });
 341                         else if (null != o && "" != o) {
 342                             (o[0] = "#" && 7 == o.length) && (o = o.substr(1));
 343                             var r = parseInt(o.substr(0, 2), 16)
 344                               , s = parseInt(o.substr(2, 2), 16)
 345                               , c = parseInt(o.substr(4, 2), 16)
 346                               , d = "1px solid rgba(" + r + "," + s + "," + c + ",0.2)"
 347                               , f = "1px solid rgba(" + r + "," + s + "," + c + ",0.1)"
 348                               , l = "rgba(" + r + "," + s + "," + c + ",0.1)"
 349                               , p = "#19" + o;
 350                             1 == a.isLteIEVersion(9) ? (i(".bar_head").css({
 351                                 background: "#fff",
 352                                 border: "1px solid #f5f5f6",
 353                                 "box-shadow": "0 0 10px #d4d4d4",
 354                                 "border-radius": "5px",
 355                                 left: "0px",
 356                                 top: "0px"
 357                             }),
 358                             i(".slide_bkg").css({
 359                                 background: l,
 360                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=" + p + ",endColorstr=" + p + ")"
 361                             })) : (i(".bar_head").css({
 362                                 background: "#fff",
 363                                 border: d,
 364                                 "box-shadow": "0 0 10px #d4d4d4",
 365                                 "border-radius": "5px",
 366                                 left: "0px",
 367                                 top: "0px"
 368                             }),
 369                             i(".slide_bkg").css({
 370                                 background: l,
 371                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=" + p + ",endColorstr=" + p + ")",
 372                                 "border-top": f
 373                             }))
 374                         }
 375                     }
 376                 else
 377                     switch (e) {
 378                     case 1:
 379                         "yellow" == n && (i(".captcha_aq").css({
 380                             background: "linear-gradient(to bottom,#fffdf8,#fff9eb)"
 381                         }),
 382                         i(".aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 383                             color: "#bea272"
 384                         }),
 385                         i(".aq_icon_ok, .aq_icon_logo").css({
 386                             color: "#bea272"
 387                         }),
 388                         i(".btn").css({
 389                             background: "#bea272",
 390                             border: "none"
 391                         }));
 392                         break;
 393                     case 2:
 394                         "yellow" == n && (i(".aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 395                             color: "#bea272"
 396                         }),
 397                         i(".aq_icon_vryLogo .title").css({
 398                             color: "#bea272"
 399                         }),
 400                         i(".captcha_aq").css({
 401                             background: "linear-gradient(to bottom,#fffdf8,#fff9eb)"
 402                         }),
 403                         i(".btn").css({
 404                             background: "#bea272",
 405                             border: "none"
 406                         }));
 407                         break;
 408                     case 3:
 409                         "yellow" == n && (i(".aq_icon_refresh, .aq_icon_feedback, .tip, .aq_icon_shield").css({
 410                             color: "#bea272"
 411                         }),
 412                         i(".aq_icon_vryLogo .title").css({
 413                             color: "#bea272"
 414                         }),
 415                         i(".captcha_aq").css({
 416                             background: "linear-gradient(to bottom,#fffdf8,#fff9eb)"
 417                         }),
 418                         i(".btn").css({
 419                             background: "#bea272",
 420                             border: "none"
 421                         }));
 422                         break;
 423                     case 4:
 424                         if ("yellow" == n)
 425                             i(".tip").css({
 426                                 color: "#bea272"
 427                             }),
 428                             i(".bar_head").css({
 429                                 border: "none",
 430                                 "border-radius": "5px",
 431                                 "box-shadow": "0 0 10px rgba(108,85,35,0.5)",
 432                                 background: "linear-gradient(to bottom,#ffffff,#eadab6)"
 433                             }),
 434                             i(".aq_icon_va_loading").css({
 435                                 color: "#bea272"
 436                             }),
 437                             i(".slide_bkg").css(1 == a.isLteIEVersion(9) ? {
 438                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#7Fecddbb',endColorstr='#7Fecddbb')",
 439                                 color: "#bea272"
 440                             } : {
 441                                 "border-top": "1px solid rgba(109,84,28,0.1)",
 442                                 background: "rgba(236,221,187,0.5)",
 443                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#19ecddbb',endColorstr='#19ecddbb')",
 444                                 color: "#bea272"
 445                             });
 446                         else if (null != o && "" != o) {
 447                             (o[0] = "#" && 7 == o.length) && (o = o.substr(1));
 448                             var r = parseInt(o.substr(0, 2), 16)
 449                               , s = parseInt(o.substr(2, 2), 16)
 450                               , c = parseInt(o.substr(4, 2), 16)
 451                               , d = "1px solid rgba(" + r + "," + s + "," + c + ",0.2)"
 452                               , f = "1px solid rgba(" + r + "," + s + "," + c + ",0.1)"
 453                               , l = "rgba(" + r + "," + s + "," + c + ",0.1)"
 454                               , p = "#19" + o;
 455                             1 == a.isLteIEVersion(9) ? (i(".bar_head").css({
 456                                 background: "#fff",
 457                                 border: "1px solid #f5f5f6",
 458                                 "box-shadow": "0 0 10px #d4d4d4",
 459                                 "border-radius": "5px",
 460                                 left: "0px",
 461                                 top: "0px"
 462                             }),
 463                             i(".slide_bkg").css({
 464                                 background: l,
 465                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=" + p + ",endColorstr=" + p + ")"
 466                             })) : (i(".bar_head").css({
 467                                 background: "#fff",
 468                                 border: d,
 469                                 "box-shadow": "0 0 10px #d4d4d4",
 470                                 "border-radius": "5px",
 471                                 left: "0px",
 472                                 top: "0px"
 473                             }),
 474                             i(".slide_bkg").css({
 475                                 background: l,
 476                                 filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=" + p + ",endColorstr=" + p + ")",
 477                                 "border-top": f
 478                             }))
 479                         }
 480                     }
 481             }
 482             ,
 483             t.exports = n
 484         }
 485         , function(t, e) {
 486             function o(t, e) {
 487                 var o = !1;
 488                 "#" == t[0] && (t = t.slice(1),
 489                 o = !0);
 490                 var n = parseInt(t, 16)
 491                   , i = (n >> 16) + e;
 492                 i > 255 ? i = 255 : 0 > i && (i = 0);
 493                 var r = (n >> 8 & 255) + e;
 494                 r > 255 ? r = 255 : 0 > r && (r = 0);
 495                 var a = (255 & n) + e;
 496                 return a > 255 ? a = 255 : 0 > a && (a = 0),
 497                 (o ? "#" : "") + (a | r << 8 | i << 16).toString(16)
 498             }
 499             function n(t, e) {
 500                 var o = t.toLowerCase();
 501                 if (o && i.test(o)) {
 502                     if (4 === o.length) {
 503                         for (var n = "#", r = 1; 4 > r; r += 1)
 504                             n += o.slice(r, r + 1).concat(o.slice(r, r + 1));
 505                         o = n
 506                     }
 507                     for (var a = [], r = 1; 7 > r; r += 2)
 508                         a.push(parseInt("0x" + o.slice(r, r + 2)));
 509                     return "RGBA(" + a.join(",") + "," + e + ")"
 510                 }
 511                 return o
 512             }
 513             var i = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;
 514             t.exports = {
 515                 lighten: o,
 516                 rgba: n
 517             }
 518         }
 519         , function(t, e) {
 520             function o() {
 521                 var t = navigator.userAgent
 522                   , e = t.indexOf("Opera") > -1
 523                   , o = t.indexOf("compatible") > -1 && t.indexOf("MSIE") > -1 && !e;
 524                 return o ? "1" : "-1"
 525             }
 526             function n(t) {
 527                 var e = navigator.userAgent
 528                   , o = e.indexOf("Opera") > -1
 529                   , n = e.indexOf("compatible") > -1 && e.indexOf("MSIE") > -1 && !o;
 530                 if (n) {
 531                     var i = new RegExp("MSIE (\d+\.\d+);");
 532                     i.test(e);
 533                     var r = parseFloat(RegExp.$1);
 534                     return t > r ? !0 : !1
 535                 }
 536                 return !1
 537             }
 538             function i(t) {
 539                 var e = document.createElement("b");
 540                 return e.innerHTML = "<!--[if IE " + t + "]><i></i><![endif]-->",
 541                 1 === e.getElementsByTagName("i").length
 542             }
 543             function r() {
 544                 var t, e = {}, o = {}, n = navigator.userAgent.toLowerCase();
 545                 (t = n.match(/msie ([d.]+)/)) ? e.ie = t[1] : (t = n.match(/firefox/([d.]+)/)) ? e.firefox = t[1] : (t = n.match(/chrome/([d.]+)/)) ? e.chrome = t[1] : (t = n.match(/opera.([d.]+)/)) ? e.opera = t[1] : (t = n.match(/version/([d.]+).*safari/)) ? e.safari = t[1] : 0;
 546                 return e.ie ? (o.name = "IE",
 547                 o.version = e.ie) : e.firefox ? (o.name = "firefox",
 548                 o.version = e.firefox) : e.chrome ? (o.name = "chrome",
 549                 o.version = e.chrome) : e.opera ? (o.name = "opera",
 550                 o.version = e.opera) : e.safari ? (o.name = "safari",
 551                 o.version = e.safari) : (o.name = "other",
 552                 o.version = "0"),
 553                 o
 554             }
 555             function a() {
 556                 var t = {}
 557                   , e = navigator.userAgent
 558                   , o = "Win32" == navigator.platform || "Windows" == navigator.platform
 559                   , n = "Mac68K" == navigator.platform || "MacPPC" == navigator.platform || "Macintosh" == navigator.platform || "MacIntel" == navigator.platform;
 560                 if (n) {
 561                     var i = e.match(/Mac OS X ([d_]+)/);
 562                     return t.name = "iMac",
 563                     i && i[1] ? t.version = i[1] : t.version = "pc",
 564                     t
 565                 }
 566                 t.version = "pc";
 567                 var r = "X11" == navigator.platform && !o && !n;
 568                 if (r)
 569                     return t.name = "Unix",
 570                     t;
 571                 var a = String(navigator.platform).indexOf("Linux") > -1;
 572                 if (a)
 573                     return t.name = "Linux",
 574                     t;
 575                 if (o) {
 576                     var s = e.indexOf("Windows NT 5.0") > -1 || e.indexOf("Windows 2000") > -1;
 577                     if (s)
 578                         return t.name = "Win2000",
 579                         t;
 580                     var c = e.indexOf("Windows NT 5.1") > -1 || e.indexOf("Windows XP") > -1;
 581                     if (c)
 582                         return t.name = "WinXP",
 583                         t;
 584                     var d = e.indexOf("Windows NT 5.2") > -1 || e.indexOf("Windows 2003") > -1;
 585                     if (d)
 586                         return t.name = "Win2003",
 587                         t;
 588                     var f = e.indexOf("Windows NT 6.0") > -1 || e.indexOf("Windows Vista") > -1;
 589                     if (f)
 590                         return t.name = "WinVista",
 591                         t;
 592                     var l = e.indexOf("Windows NT 6.1") > -1 || e.indexOf("Windows 7") > -1;
 593                     if (l)
 594                         return t.name = "Win7",
 595                         t
 596                 }
 597                 return t.name = "other",
 598                 t
 599             }
 600             t.exports = {
 601                 isLteIEVersion: n,
 602                 isIE: o,
 603                 getBrowserInfo: r,
 604                 getOSInfo: a,
 605                 isIEVer: i
 606             }
 607         }
 608         , function(t, e) {
 609             t.exports = captcha
 610         }
 611         , , function(t, e, o) {
 612             var n = o(1)
 613               , i = {
 614                 _check: function() {
 615                     return "maxLength"in document.createElement("textarea")
 616                 },
 617                 init: function() {
 618                     this._check() || this.fix()
 619                 },
 620                 fix: function() {
 621                     n("textarea[maxlength]").each(function(t, e) {
 622                         var o = n(this)
 623                           , i = parseInt(o.attr("maxlength"), 10);
 624                         i > 0 && o.keyup(function() {
 625                             var t = o.val();
 626                             t.length > i && (t = t.substring(0, i)),
 627                             o.val(t)
 628                         })
 629                     })
 630                 }
 631             };
 632             t.exports = i
 633         }
 634         , , , function(t, e) {
 635             t.exports = {
 636                 ERROR_TYPE_TWICE_IMAGE_ONERROR: 13,
 637                 ERROR_TYPE_CGI_IMAGE_ONERROR: 12,
 638                 ERROR_TYPE_IMAGE_ONERROR: 11,
 639                 ERROR_TYPE_AJAX_GETSIG: 9,
 640                 ERROR_TYPE_AJAX_VERIFY: 8,
 641                 ERROR_TYPE_IMAGE_BEYONDSIZE: 7,
 642                 ERROR_TYPE_MB_FP_REGISTER_TIMEOUT: 6,
 643                 ERROR_TYPE_MB_FPJS_DOWNLOAD_FAIL: 5,
 644                 ERROR_TYPE_PC_FP_REGISTER_TIMEOUT: 4,
 645                 ERROR_TYPE_PC_FPJS_DOWNLOAD_FAIL: 3,
 646                 ERROR_TYPE_BADJS_DOWNLOAD_FAIL: 2,
 647                 ERROR_TYPE_BADJS_REPORT: 1
 648             }
 649         }
 650         , function(t, e, o) {
 651             var n = !!window.ActiveXObject
 652               , i = o(2)
 653               , r = o(13)
 654               , a = {
 655                 timePoints: [],
 656                 flag1: 21406,
 657                 flag2: 1,
 658                 flag3: 1,
 659                 appid: 0,
 660                 push: function(t, e) {
 661                     this.timePoints[t] = e,
 662                     32 == t && !n && window.performance && window.performance.timing && (this.timePoints[32] = this.timePoints[32] - window.performance.timing.navigationStart)
 663                 },
 664                 set: function(t, e, o, n) {
 665                     this.flag1 = t,
 666                     this.flag2 = e,
 667                     this.flag3 = o,
 668                     this.appid = n
 669                 },
 670                 parseUrl: function() {
 671                     var t = location.search.substr(1)
 672                       , e = new Object;
 673                     if (t && t.length > 0)
 674                         for (var o = t.split("&"), n = 0; o && n < o.length; n++) {
 675                             var i = o[n].split("=");
 676                             e[i[0]] = i[1]
 677                         }
 678                     return e
 679                 },
 680                 queryParam: function(t) {
 681                     return this.parseUrl(location.search)[t]
 682                 },
 683                 send: function(t, e) {
 684                     var o = [];
 685                     if (t)
 686                         o.push(t + "=" + this.timePoints[t]);
 687                     else {
 688                         if (!n && window.performance && window.performance.timing) {
 689                             var a = window.performance.timing;
 690                             this.timePoints[1] = a.unloadEventStart,
 691                             this.timePoints[2] = a.unloadEventEnd,
 692                             this.timePoints[3] = a.redirectStart,
 693                             this.timePoints[4] = a.redirectEnd,
 694                             this.timePoints[5] = a.fetchStart,
 695                             this.timePoints[6] = a.domainLookupStart,
 696                             this.timePoints[7] = a.domainLookupEnd,
 697                             this.timePoints[8] = a.connectStart,
 698                             this.timePoints[9] = a.connectEnd,
 699                             this.timePoints[10] = a.requestStart,
 700                             this.timePoints[11] = a.responseStart,
 701                             this.timePoints[12] = a.responseEnd,
 702                             this.timePoints[13] = a.domLoading,
 703                             this.timePoints[14] = a.domInteractive,
 704                             this.timePoints[15] = a.domContentLoadedEventStart,
 705                             this.timePoints[16] = a.domContentLoadedEventEnd,
 706                             this.timePoints[17] = a.domComplete,
 707                             this.timePoints[18] = a.loadEventStart,
 708                             this.timePoints[19] = a.loadEventEnd,
 709                             this.timePoints[17] <= 0 && (this.timePoints[17] = a.domContentLoadedEventEnd),
 710                             this.timePoints[18] <= 0 && (this.timePoints[18] = this.timePoints[17]),
 711                             this.timePoints[19] <= 0 && (this.timePoints[19] = this.timePoints[18]),
 712                             this.timePoints[20] = this.timePoints[19] - a.navigationStart,
 713                             this.timePoints[21] = this.timePoints[17] - a.responseEnd,
 714                             this.timePoints[22] = a.domainLookupEnd - a.domainLookupStart,
 715                             this.timePoints[23] = a.responseStart - a.navigationStart,
 716                             this.timePoints[24] = a.connectEnd - a.connectStart,
 717                             this.timePoints[29] = this.appid,
 718                             this.timePoints[31] = r.getInfo().tokenid
 719                         }
 720                         for (var s = 1; 33 > s; s++)
 721                             o.push("undefined" != typeof this.timePoints[s] ? s + "=" + this.timePoints[s] : s + "=0");
 722                         o.push("33=");
 723                         var c = this.queryParam("sid");
 724                         o.push("34=" + c);
 725                         for (var s = 35; 49 > s; s++)
 726                             o.push("undefined" != typeof this.timePoints[s] ? s + "=" + this.timePoints[s] : s + "=0"),
 727                             this.timePoints[s] = void 0
 728                     }
 729                     var d, f, l, p, u = "flag1=" + this.flag1 + "&flag2=" + this.flag2 + "&flag3=" + this.flag3 + "&" + o.join("&");
 730                     -1 == window.location.href.indexOf("https") ? (d = "http://dj.captcha.qq.com/caplog?appid=20128&platform=pc&" + u,
 731                     l = "http://report.huatuo.qq.com/report.cgi?appid=20128&platform=pc&speedparams=" + escape(u)) : (d = "https://dj.captcha.qq.com/caplog?appid=20128&platform=pc&" + u,
 732                     l = "https://report.huatuo.qq.com/report.cgi?appid=20128&platform=pc&speedparams=" + escape(u)),
 733                     f = new Image,
 734                     f.src = e ? e(d) : i(d),
 735                     p = new Image,
 736                     p.src = l
 737                 }
 738             };
 739             t.exports = a
 740         }
 741         , function(t, e) {
 742             function o(t) {
 743                 "undefined" != typeof TDC && TDC.setData && TDC.setData(t)
 744             }
 745             function n() {
 746                 "undefined" != typeof TDC && TDC.clearTc && TDC.clearTc()
 747             }
 748             function i() {
 749                 var t = "";
 750                 return "undefined" != typeof TDC && TDC.getData && (t = TDC.getData(!0)),
 751                 t
 752             }
 753             function r() {
 754                 var t = "";
 755                 return "undefined" != typeof TDC && TDC.getInfo && (t = TDC.getInfo()),
 756                 t
 757             }
 758             function a() {
 759                 var t = "";
 760                 return "undefined" != typeof TDC && TDC.getInfo && (t = TDC.getInfo()) && (t = t.info),
 761                 t
 762             }
 763             function s() {
 764                 var t = "";
 765                 return "undefined" != typeof TDC && TDC.getInfo && (t = TDC.getInfo()) && (t = t.fps),
 766                 t
 767             }
 768             function c() {
 769                 var t = "undefined" == typeof TDC ? 0 : 1;
 770                 return t
 771             }
 772             t.exports = {
 773                 setData: o,
 774                 getData: i,
 775                 clearData: n,
 776                 getInfo: r,
 777                 getEks: a,
 778                 getFps: s,
 779                 getTlg: c
 780             }
 781         }
 782         , function(t, e, o) {
 783             function n() {
 784                 this.url = "https://aq.qq.com/cn2/manage/mbtoken/cap_monitor",
 785                 this.obj = {},
 786                 this.points = []
 787             }
 788             var i = o(2);
 789             n.prototype = {
 790                 push: function(t, e) {
 791                     this.points[t] = e
 792                 },
 793                 set: function(t) {
 794                     this.obj.tk = t.tk,
 795                     this.obj.clientType = t.clientType,
 796                     this.obj.appid = t.appid,
 797                     this.obj.capType = t.capType
 798                 },
 799                 send: function() {
 800                     this.obj.data = this.points.slice();
 801                     var t = new Image;
 802                     this.url += "?appid=" + encodeURIComponent(this.obj.appid) + "&uid=&clientType=" + encodeURIComponent(this.obj.clientType) + "&capType=" + encodeURIComponent(this.obj.capType) + "&tk=" + encodeURIComponent(this.obj.tk),
 803                     this.url += "&t0=" + this.points[0],
 804                     this.url += "&t1=" + this.points[1],
 805                     this.url += "&t2=" + this.points[2],
 806                     this.url += "&rnd=" + Math.random(),
 807                     t.src = i(this.url)
 808                 }
 809             },
 810             t.exports = n
 811         }
 812         , function(t, e, o) {
 813             var n = o(2)
 814               , i = {
 815                 send: function(t, e, o, i, r, a) {
 816                     try {
 817                         var s = new Image
 818                           , c = document.referrer
 819                           , d = location.href;
 820                         c = c.length > 500 ? c.substr(0, 500) : c,
 821                         d = d.length > 400 ? d.substr(0, 400) : d,
 822                         o = o && o.length > 300 ? o.substr(0, 300) : o,
 823                         i = i || 0;
 824                         var f = "https://aq.qq.com/cn2/manage/mbtoken/cap_monitor?uid=&subcapclass=9&appid=1253408289&referer=" + encodeURIComponent(c) + "&href=" + encodeURIComponent(d);
 825                         f += "&tokenid=" + t,
 826                         f += "&type=" + e,
 827                         f += "&reason=" + encodeURIComponent(o),
 828                         f += "&errType=" + i,
 829                         r && (f += "&sid=" + r),
 830                         a && (f += "&timing=" + a),
 831                         s.src = n(f)
 832                     } catch (l) {}
 833                 }
 834             };
 835             t.exports = i
 836         }
 837         , function(t, e) {
 838             var o = function(t) {
 839                 var e = {
 840                     id: "",
 841                     time: t,
 842                     start: function(t) {
 843                         this.end();
 844                         var e = this.time
 845                           , o = this;
 846                         this.id = setTimeout(function() {
 847                             t(o)
 848                         }, e)
 849                     },
 850                     end: function() {
 851                         clearTimeout(this.id)
 852                     }
 853                 };
 854                 return e
 855             };
 856             t.exports = o
 857         }
 858         , function(t, e, o) {
 859             var n = o(1)
 860               , i = {
 861                 header: n(".container_head"),
 862                 hideTitle: function() {
 863                     this.header.find(".title").hide()
 864                 },
 865                 showTitle: function() {
 866                     this.header.find(".title").show()
 867                 },
 868                 setTitle: function(t) {
 869                     this.header.find(".title").html(t)
 870                 },
 871                 show: function(t) {
 872                     this.header.show()
 873                 },
 874                 init: function(t) {
 875                     this.header.find(".icon_close").on("mouseenter mouseleave click", function(e) {
 876                         var o = n(this);
 877                         "mouseenter" == e.type && t.theme && t.theme.dealEvents(o),
 878                         "mouseleave" == e.type && t.theme && t.theme.unDealEvents(o),
 879                         "click" == e.type && t.close && t.close()
 880                     })
 881                 }
 882             };
 883             t.exports = i
 884         }
 885         , function(t, e, o) {
 886             var n = o(13)
 887               , i = o(5)
 888               , r = "1253408289"
 889               , a = "2072465490";
 890             $(function() {
 891                 $("#showFB").on("click", function() {
 892                     var t = "https://support.qq.com/products/2136"
 893                       , e = n.getInfo().tokenid
 894                       , o = i.getBrowserInfo()
 895                       , s = i.getOSInfo();
 896                     t += t && t.indexOf("?") > 1 ? "&" : "?",
 897                     t = t + "clientInfo=" + o.name + "&clientVersion=" + o.version + "&os=" + s.name + "&osVersion=" + s.version + "&netType=" + r + "&imei=" + e,
 898                     a && a.length > 0 && (t = t + "&customInfo=custominfo:clientIP:" + a),
 899                     window.open(t)
 900                 })
 901             })
 902         }
 903         , , , , , , function(t, e, o) {
 904             var n = o(1)
 905               , i = function() {
 906                 function t(t) {
 907                     t.on("mousedown touchstart", s),
 908                     t[0].dispatchEvent = null
 909                 }
 910                 function e() {
 911                     n(document).on("mousemove touchmove", f),
 912                     n(document).on("mouseup touchend", d)
 913                 }
 914                 function o() {
 915                     n(document).off("mousemove touchmove"),
 916                     n(document).off("mouseup touchend")
 917                 }
 918                 function i(t) {
 919                     return t.originalEvent.touches[0]
 920                 }
 921                 function r() {
 922                     k = !1
 923                 }
 924                 function a() {
 925                     k = !0
 926                 }
 927                 function s(t) {
 928                     t.preventDefault(),
 929                     c(t),
 930                     T.dragobj = 1
 931                 }
 932                 function c(t) {
 933                     return T.dragobj = 0,
 934                     k ? (v = !0,
 935                     ele_l = p.offset().left,
 936                     ele_t = p.offset().top,
 937                     h = t.pageX - ele_l,
 938                     g = t.pageY - ele_t,
 939                     "touchstart" == t.type && (h = i(t).clientX - ele_l,
 940                     g = i(t).clientY - ele_t),
 941                     e(),
 942                     T.start(),
 943                     t.preventDefault(),
 944                     !1) : void 0
 945                 }
 946                 function d(t) {
 947                     v = !1,
 948                     o(),
 949                     T.stop(_, T.dragobj)
 950                 }
 951                 function f(t) {
 952                     var e = t.pageX
 953                       , o = t.pageY
 954                       , n = {}
 955                       , r = t.pageX - h - m
 956                       , a = t.pageY - g - b;
 957                     "touchmove" == t.type && (e = i(t).clientX,
 958                     o = i(t).clientY,
 959                     r = i(t).clientX - h - m,
 960                     a = i(t).clientY - g - b);
 961                     var s = $container.width() - p.width()
 962                       , c = $container.height() - p.height();
 963                     return y && x && (0 > r || 0 > a || r > s || a > c) ? void d(t) : (0 > r && (r = 0),
 964                     r > s && (r = s),
 965                     0 > a && (a = 0),
 966                     a > c && (a = c),
 967                     _.left = r,
 968                     _.top = a,
 969                     n.left = e,
 970                     n.top = o,
 971                     T.draging(_, n),
 972                     p.css(_),
 973                     t.stopPropagation(),
 974                     !1)
 975                 }
 976                 function l() {
 977                     p.css(u)
 978                 }
 979                 var p, u = {}, h = 0, g = 0, m = 0, b = 0, _ = {}, v = !1, w = !!window.ActiveXObject, y = w && (8 == document.documentMode || 7 == document.documentMode), x = !1, k = !0, T = {
 980                     stop: function() {},
 981                     start: function() {},
 982                     draging: function() {},
 983                     dragobj: 0
 984                 }, E = function(t) {
 985                     T = n.extend(T, t || {}),
 986                     p = T.ele,
 987                     $container = T.container,
 988                     m = $container.offset().left,
 989                     b = $container.offset().top,
 990                     x = T.bubble || !1,
 991                     u.left = p.css("left"),
 992                     u.top = p.css("top"),
 993                     p.on("mousedown touchstart", c),
 994                     p[0].dispatchEvent = null
 995                 }, I = {
 996                     init: E,
 997                     goBack: l,
 998                     stop: d,
 999                     cancel: r,
1000                     resume: a,
1001                     bindMouseDown: t,
1002                     hasMouseDown: function() {
1003                         return v
1004                     }
1005                 };
1006                 return I
1007             };
1008             t.exports = i
1009         }
1010         , function(t, e) {
1011             function o() {
1012                 d = c = +new Date
1013             }
1014             function n(t, e) {
1015                 var o = +new Date;
1016                 s.length < a && s.push({
1017                     x: Math.floor(t),
1018                     y: Math.floor(e),
1019                     t: o - c
1020                 })
1021             }
1022             function i() {
1023                 s.length = 0
1024             }
1025             function r(t) {
1026                 for (var e, o = [], n = 0; n < t.length; n++) {
1027                     var i = t[n];
1028                     o.push(0 == n ? [i.x, i.y, i.t] : [i.x - e.x, i.y - e.y, Number((i.t - e.t).toFixed(3))]),
1029                     e = i
1030                 }
1031                 return o
1032             }
1033             var a = 300
1034               , s = []
1035               , c = +new Date
1036               , d = +new Date;
1037             t.exports = {
1038                 start: o,
1039                 end: i,
1040                 push: n,
1041                 getData: function() {
1042                     return r(s)
1043                 }
1044             }
1045         }
1046         , function(t, e, o) {
1047             function n(t) {
1048                 a.addTarget(window.parent, "parent"),
1049                 i.init({
1050                     theme: t,
1051                     success: function(t) {
1052                         try {
1053                             var e = {
1054                                 message: {
1055                                     type: 3,
1056                                     ticket: t.ticket,
1057                                     randstr: t.randstr
1058                                 }
1059                             };
1060                             a.targets.parent.send(JSON.stringify(e))
1061                         } catch (o) {}
1062                     },
1063                     ready: function() {
1064                         try {
1065                             var t = {
1066                                 message: {
1067                                     type: 10
1068                                 }
1069                             };
1070                             a.targets.parent.send(JSON.stringify(t))
1071                         } catch (e) {}
1072                     }
1073                 }),
1074                 r.init({
1075                     theme: t,
1076                     close: function() {
1077                         try {
1078                             var t = {
1079                                 message: {
1080                                     type: 6
1081                                 }
1082                             };
1083                             a.targets.parent.send(JSON.stringify(t))
1084                         } catch (e) {}
1085                     }
1086                 }),
1087                 "popup" == s && (t.addBorderTop(),
1088                 r.show())
1089             }
1090             var i = (o(1),
1091             o(16),
1092             o(27))
1093               , r = o(17)
1094               , a = new TCapMsg("securityCode")
1095               , s = "embed";
1096             t.exports = {
1097                 init: n
1098             }
1099         }
1100         , function(t, e, o) {
1101             function n(t) {
1102                 "popup" == J ? M(".container_wrap").css("height", "270px") : "point" == J && M(".container_wrap").css("height", "231px"),
1103                 tt.success = t.success,
1104                 tt.ready = t.ready,
1105                 i(),
1106                 d(t.theme),
1107                 u(N, Y || 0, !0),
1108                 v()
1109             }
1110             function i() {
1111                 if (0 == s("fb")) {
1112                     M(".help.captcha_icon").hide();
1113                     var t = M(".refresh.captcha_icon");
1114                     t.css({
1115                         "margin-right": "10px"
1116                     });
1117                     var e = t.find(".tip");
1118                     e.css({
1119                         "background-position": "-334px -5px",
1120                         right: "-8px"
1121                     }),
1122                     L && (e[0].style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="/cap_bubble_right_feedback.png",sizingMethod="crop")')
1123                 }
1124             }
1125             function r(t, e, o) {
1126                 var n = new Image;
1127                 n.onload = function() {
1128                     e(n)
1129                 }
1130                 ,
1131                 n.onerror = o || function() {}
1132                 ,
1133                 n.src = t
1134             }
1135             function a() {
1136                 var t = location.search.substr(1)
1137                   , e = new Object;
1138                 if (t.length > 0)
1139                     for (var o = t.split("&"), n = 0; n < o.length; n++) {
1140                         var i = o[n].split("=");
1141                         e[i[0]] = i[1]
1142                     }
1143                 return e
1144             }
1145             function s(t) {
1146                 return a(location.search)[t]
1147             }
1148             function c(t, e) {
1149                 e.src = "/cap_transparent.gif",
1150                 e.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + t + "', sizingMethod='scale')"
1151             }
1152             function d(t) {
1153                 function e() {
1154                     n.animate({
1155                         left: "0px"
1156                     }, {
1157                         step: function(t, e) {
1158                             i.css("left", t),
1159                             0 == t && (i.css("visibility", "visible"),
1160                             a.css("visibility", "visible"),
1161                             r.css("visibility", "visible"),
1162                             M(".slide_bkg").html(S.puzzle1).css({
1163                                 color: E
1164                             }))
1165                         }
1166                     })
1167                 }
1168                 var o = new q
1169                   , n = M("#slide_bar_head")
1170                   , i = (n.width(),
1171                 M("#slideBlock"))
1172                   , r = M("#totalBlock")
1173                   , a = M(".oripic")
1174                   , s = M("#tip_point");
1175                 1 == z && r.css("visibility", "hidden");
1176                 var c = [r.offset().left, r.offset().top, B];
1177                 A.setData({
1178                     coordinate: c,
1179                     clientType: V
1180                 }),
1181                 o.init({
1182                     ele: n,
1183                     container: M("#slide"),
1184                     draging: function(t, e) {
1185                         $.push(e.left, e.top),
1186                         i.css("left", t.left)
1187                     },
1188                     stop: function(t, o) {
1189                         var n = [{
1190                             left: Math.floor(t.left / B),
1191                             top: Math.floor(Y)
1192                         }]
1193                           , i = $.getData();
1194                         w(n, i, o, function() {
1195                             e(),
1196                             $.end()
1197                         })
1198                     },
1199                     start: function() {
1200                         $.start(),
1201                         r.css("visibility", "hidden"),
1202                         s.css("visibility", "hidden"),
1203                         i.css("visibility", "visible"),
1204                         a.css("visibility", "visible")
1205                     }
1206                 }),
1207                 o.bindMouseDown(i),
1208                 M("#reload").on("click", function() {
1209                     f(),
1210                     G++,
1211                     A.clearData(),
1212                     M(".slide_bkg").html(S.puzzle1).css({
1213                         color: E
1214                     })
1215                 }),
1216                 M(document).on("mouseleave", function() {
1217                     o.hasMouseDown() && o.stop()
1218                 }),
1219                 M(".captcha_icon").on("mouseenter mouseleave mousedown", function(t) {
1220                     var e = M(this).find(".tip")
1221                       , o = M(this).find("a");
1222                     "mouseenter" == t.type && (o.css("color", "#b3b3b3"),
1223                     e.show()),
1224                     ("mouseleave" == t.type || "mousedown" == t.type) && (o.css("color", "#fff"),
1225                     e.hide())
1226                 })
1227             }
1228             function f() {
1229                 var t;
1230                 t = "" != location.search ? location.search + "&rand=" + Math.random() : "?rand=" + Math.random();
1231                 var e = (new Date).getTime();
1232                 M.ajax({
1233                     type: "GET",
1234                     url: "/cap_union_new_getsig" + t,
1235                     dataType: "json",
1236                     error: function(t, e, o) {
1237                         var n = ""
1238                           , i = 0;
1239                         t && t.status && (i = t.status),
1240                         e && (n += e + ":"),
1241                         t && t.statusText && (n += t.statusText),
1242                         C.send(A.getInfo().tokenid, R.ERROR_TYPE_AJAX_GETSIG, n, i)
1243                     },
1244                     success: function(t) {
1245                         var o = (new Date).getTime();
1246                         if (D.push(26, o - e),
1247                         52 == t.ret) {
1248                             var n = {
1249                                 message: {
1250                                     type: 15
1251                                 }
1252                             };
1253                             return void K.targets.parent.send(JSON.stringify(n))
1254                         }
1255                         W = t && t.chlg ? JSON.stringify(t.chlg) : "",
1256                         t && t.vsig && (N = t.vsig,
1257                         u(t.vsig, parseInt(t.inity, 10), !1))
1258                     }
1259                 })
1260             }
1261             function l(t, e, o, n, i) {
1262                 var r = Number(new Date) + (n || 2e3);
1263                 i = i || 100,
1264                 function a() {
1265                     t() ? e() : Number(new Date) < r ? setTimeout(a, i) : o(new Error("timed out for " + t + ": " + arguments))
1266                 }()
1267             }
1268             function p(t, e) {
1269                 var o = {
1270                     tk: A.getInfo().tokenid,
1271                     capType: "9",
1272                     clientType: "2",
1273                     appid: "1253408289"
1274                 }
1275                   , n = new O;
1276                 n.set(o),
1277                 n.push(t, e),
1278                 n.send()
1279             }
1280             function u(t, e, o) {
1281                 var n = (new Date).getTime();
1282                 0 == ot && (M(".big.img, #slideBlock, #totalBlock, #tip_point, .operates").css({
1283                     visibility: "hidden"
1284                 }),
1285                 M(".network_error").hide(),
1286                 M(".loader").show());
1287                 var i;
1288                 i = "" != location.search ? location.search + "&rand=" + Math.random() : "?rand=" + Math.random();
1289                 var a = P("/cap_union_new_getcapbysig" + i + "&vsig=" + t + "&img_index=1");
1290                 r(a, function() {
1291                     var t = (new Date).getTime();
1292                     D.push(25, Math.floor(t - n)),
1293                     M(".img.big").attr("src", a),
1294                     M(".big.img, #slideBlock, #totalBlock, #tip_point, .operates").css({
1295                         visibility: "visible"
1296                     }),
1297                     o && (tt.ready(),
1298                     H = !0,
1299                     D.push(32, t),
1300                     D.send())
1301                 }, function() {
1302                     M("#capInfo").html(S.c7),
1303                     M(".img.big").attr("src", "/tx_m_fail.jpg"),
1304                     p(0, (new Date).getTime() - n),
1305                     o && tt.ready()
1306                 });
1307                 var s = P("/cap_union_new_getcapbysig" + i + "&vsig=" + t + "&img_index=2");
1308                 r(s, function(t) {
1309                     var n = (new Date).getTime();
1310                     D.push(28, n - d),
1311                     M("#slideBlock").attr("src", s),
1312                     l(function() {
1313                         return t.height > 10
1314                     }, function() {
1315                         var o = Math.floor(t.height * B);
1316                         M("#slideBlock").css({
1317                             height: o,
1318                              o,
1319                             top: e * B
1320                         }),
1321                         Y = e
1322                     }, function() {}, 5e3, 200),
1323                     o && tt.ready(),
1324                     L && c(s, M("#slideBlock")[0])
1325                 }, function() {
1326                     M("#capInfo").html(S.c7),
1327                     M("#slideBlock").attr("src", "/tx_m_fail_x.jpg"),
1328                     M("#slideBlock").css({
1329                         height: 54,
1330                          54,
1331                         top: e * B
1332                     }),
1333                     o && tt.ready(),
1334                     p(1, (new Date).getTime() - n)
1335                 });
1336                 var d = (new Date).getTime();
1337                 o && setTimeout(function() {
1338                     H || (D.push(30, 4e3),
1339                     0 >= Z && (Z = (new Date).getTime()),
1340                     D.push(32, Z),
1341                     D.send())
1342                 }, 4e3)
1343             }
1344             function h(t) {
1345                 return "string" == typeof t && -1 != t.indexOf(".") && 1 === parseFloat(t)
1346             }
1347             function g(t) {
1348                 return "string" == typeof t && -1 != t.indexOf("%")
1349             }
1350             function m(t, e) {
1351                 h(t) && (t = "100%");
1352                 var o = g(t);
1353                 return t = nt(e, it(0, parseFloat(t))),
1354                 o && (t = parseInt(t * e, 10) / 100),
1355                 Math.abs(t - e) < 1e-6 ? 1 : t % e / parseFloat(e)
1356             }
1357             function b(t, e, o) {
1358                 t = m(t, 255),
1359                 e = m(e, 255),
1360                 o = m(o, 255);
1361                 var n, i, r = it(t, e, o), a = nt(t, e, o), s = r, c = r - a;
1362                 if (i = 0 === r ? 0 : c / r,
1363                 r == a)
1364                     n = 0;
1365                 else {
1366                     switch (r) {
1367                     case t:
1368                         n = (e - o) / c + (o > e ? 6 : 0);
1369                         break;
1370                     case e:
1371                         n = (o - t) / c + 2;
1372                         break;
1373                     case o:
1374                         n = (t - e) / c + 4
1375                     }
1376                     n /= 6
1377                 }
1378                 return {
1379                     h: 360 * n,
1380                     s: 100 * i,
1381                     v: 100 * s
1382                 }
1383             }
1384             function _(t, e, o) {
1385                 t = 6 * m(t, 360),
1386                 e = m(e, 100),
1387                 o = m(o, 100);
1388                 var n = Math.floor(t)
1389                   , i = t - n
1390                   , r = o * (1 - e)
1391                   , a = o * (1 - i * e)
1392                   , s = o * (1 - (1 - i) * e)
1393                   , c = n % 6
1394                   , d = [o, a, r, r, s, o][c]
1395                   , f = [s, o, o, a, r, r][c]
1396                   , l = [r, r, s, o, o, a][c];
1397                 return {
1398                     r: 255 * d,
1399                     g: 255 * f,
1400                     b: 255 * l
1401                 }
1402             }
1403             function v() {
1404                 var t = ""
1405                   , e = "";
1406                 if ("yellow" == e ? (E = "#bea272",
1407                 I = "#bea272") : null != t && "" != t ? ((t[0] = "#" && 7 == t.length) && (t = t.substr(1)),
1408                 E = t) : E = "1a79ff",
1409                 "yellow" != e) {
1410                     var o = parseInt(E.substr(0, 2), 16)
1411                       , n = parseInt(E.substr(2, 2), 16)
1412                       , i = parseInt(E.substr(4, 2), 16)
1413                       , r = b(o, n, i)
1414                       , a = _(r.h, r.s, .48 * r.v);
1415                     I = "rgb(" + parseInt(a.r) + "," + parseInt(a.g) + "," + parseInt(a.b) + ")",
1416                     E = "#" + E
1417                 }
1418             }
1419             function w(t, e, o, n) {
1420                 var i, r = "tokenidiframe_d.js";
1421                 r && -1 == r.indexOf("tokenidiframe_d") && -1 != r.indexOf("tokenidiframe") ? l(function() {
1422                     return window && window.getFPVryData && "undefined" != typeof (i = window.getFPVryData())
1423                 }, function() {
1424                     y(t, e, o, n, i)
1425                 }, function() {
1426                     y(t, e, o, n, i),
1427                     window && window.getFPVryData ? C.send(A.getInfo().tokenid, 4, "") : C.send(A.getInfo().tokenid, 3, "")
1428                 }, 600, 100) : y(t, e, o, n, i)
1429             }
1430             function y(t, e, o, n, i) {
1431                 i = encodeURIComponent(i);
1432                 for (var r = "", s = 0; s < t.length; s++)
1433                     r += Math.floor(t[s].left) + "," + Math.floor(t[s].top) + ";";
1434                 var c;
1435                 c = "" != location.search ? location.search + "&rand=" + Math.random() : "?rand=" + Math.random();
1436                 var d = (new Date).getTime()
1437                   , l = 0;
1438                 if ("string" == typeof W && "" != W) {
1439                     W = W.replace(/&quot;/g, '"'),
1440                     W = W.replace(/&apos;/g, "'");
1441                     var p;
1442                     try {
1443                         p = JSON.parse(W)
1444                     } catch (u) {}
1445                     if ("object" == typeof p && "string" == typeof p.randstr && ("string" == typeof p.M || "number" == typeof p.M) && "string" == typeof p.ans) {
1446                         p.ans = p.ans.toLowerCase(),
1447                         p.M = parseInt(p.M);
1448                         for (var h = 0; h < p.M && 1e3 > h; h++) {
1449                             var g = p.randstr + h
1450                               , m = md5(g);
1451                             if (p.ans == m.toLowerCase()) {
1452                                 l = h;
1453                                 break
1454                             }
1455                         }
1456                     }
1457                 }
1458                 e.push([0, 0, l]),
1459                 A.setData({
1460                     trycnt: ++U,
1461                     refreshcnt: G,
1462                     slideValue: e,
1463                     dragobj: o
1464                 });
1465                 var b = A.getData(!0)
1466                   , _ = A.getEks()
1467                   , v = A.getFps()
1468                   , w = A.getTlg()
1469                   , y = a() || {}
1470                   , x = M.extend(y, {
1471                     subcapclass: "9",
1472                     vsig: N,
1473                     ans: r,
1474                     cdata: l,
1475                     "abcceb": b,
1476                     websig: "78d910fc1584a6906df37f5052b9456fde410eff2c58a633811149703c10de648cc93fc59018dd382c41d3bc18a37d87b3744ccbaaaa28474d7846d9baa4eb75",
1477                     eks: _,
1478                     fps: v,
1479                     fpinfo: i,
1480                     tlg: w
1481                 });
1482                 X = !0;
1483                 var k = M(".slide_bkg")
1484                   , O = M.ajax({
1485                     type: "POST",
1486                     url: "/cap_union_new_verify?random=" + +new Date,
1487                     timeout: 5e3,
1488                     data: x,
1489                     dataType: "json",
1490                     cache: !1,
1491                     success: function(t) {
1492                         X = !1;
1493                         var e = (new Date).getTime();
1494                         if (D.push(30, 0),
1495                         D.push(27, e - d),
1496                         D.send(),
1497                         t && 0 == t.errorCode)
1498                             T(t);
1499                         else if (51 == t.errorCode) {
1500                             var o = {
1501                                 message: {
1502                                     type: 8,
1503                                     sess: t.sess,
1504                                     subsid: P.get()
1505                                 }
1506                             };
1507                             K.targets.parent.send(JSON.stringify(o))
1508                         } else {
1509                             if (9 == t.errorCode)
1510                                 k.css({
1511                                     color: I
1512                                 }),
1513                                 k.html(S.slide2),
1514                                 f();
1515                             else if (50 == t.errorCode)
1516                                 k.css({
1517                                     color: I
1518                                 }),
1519                                 k.html(S.puzzle2);
1520                             else if (16 == t.errorCode || 20 == t.errorCode || 21 == t.errorCode) {
1521                                 var o = {
1522                                     message: {
1523                                         type: 16
1524                                     }
1525                                 };
1526                                 K.targets.parent.send(JSON.stringify(o))
1527                             } else
1528                                 f(),
1529                                 k.css({
1530                                     color: E
1531                                 }),
1532                                 k.html(S.puzzle1);
1533                             n()
1534                         }
1535                     },
1536                     complete: function(t, e) {
1537                         X = !1;
1538                         var o = ""
1539                           , i = 0;
1540                         if (t && t.status && (i = t.status),
1541                         e && (o += e + ":"),
1542                         t && t.statusText && (o += t.statusText),
1543                         "timeout" == e && (O.abort(),
1544                         f(),
1545                         k.css({
1546                             color: I
1547                         }),
1548                         k.html(S.c8),
1549                         n(),
1550                         C.send(A.getInfo().tokenid, R.ERROR_TYPE_AJAX_VERIFY, o, i)),
1551                         "abort" == e && (O.abort(),
1552                         f(),
1553                         k.css({
1554                             color: I
1555                         }),
1556                         k.html(S.slide4),
1557                         n(),
1558                         C.send(A.getInfo().tokenid, R.ERROR_TYPE_AJAX_VERIFY, o, i)),
1559                         "error" == e) {
1560                             O.abort(),
1561                             f(),
1562                             k.css({
1563                                 color: I
1564                             }),
1565                             k.html(S.c8),
1566                             n();
1567                             var r = (new Date).getTime();
1568                             D.push(30, 0),
1569                             D.push(27, r - d),
1570                             D.send(),
1571                             C.send(A.getInfo().tokenid, R.ERROR_TYPE_AJAX_VERIFY, o, i)
1572                         }
1573                     }
1574                 })
1575             }
1576             function x() {
1577                 M(".capachArea").show(),
1578                 M("#showFB, .tip").css("zoom", 1)
1579             }
1580             function k() {
1581                 M(".capachArea").hide(),
1582                 M("#showFB, .tip").css("zoom", 0)
1583             }
1584             function T(t) {
1585                 M(".network_error").hide(),
1586                 M("#bar_mask").show().animate({
1587                     left: "-100%"
1588                 }, {
1589                     duration: 800,
1590                     complete: function() {
1591                         M("#bar_success").slideDown(function() {
1592                             M(".captcha_aq_modal").show(),
1593                             setTimeout(function() {
1594                                 tt.success(t)
1595                             }, 200)
1596                         })
1597                     }
1598                 })
1599             }
1600             var E, I, P = o(2), R = o(11), D = o(12), O = o(14), C = o(15), M = o(1), q = o(24), S = o(6), $ = o(25), A = o(13), j = !!window.ActiveXObject, L = j && !window.XMLHttpRequest, X = !1, B = .5, F = "1253408289", N = "b01zG7x5Yh8IqFDvdYbv_dxhqT1JjNSxZ2rpwKG662esm_2QCh2sVmWgCQeuVtJQzjiuDz6DmwIfm94PHuz64NIucswoeWkAGW-j4hiVtbjTTCSDlWStjj08g**", Y = Number("144"), J = "embed", W = "{&quot;randstr&quot;:&quot;mvum&quot;,&quot;M&quot;:&quot;100&quot;,&quot;ans&quot;:&quot;e92970e93bdbe03bc0de0cbf0f2397bc&quot;}", V = "2", z = parseInt(""), G = 0, U = 0, H = !1, K = new TCapMsg("securityCode");
1601             K.addTarget(window.parent, "parent");
1602             var Q, Z = 0, tt = {
1603                 success: function() {},
1604                 showFeedback: function() {},
1605                 ready: function() {}
1606             }, et = "open", ot = !1;
1607             Q = {
1608                 message: {
1609                     type: 14
1610                 }
1611             },
1612             K.targets.parent.send(JSON.stringify(Q)),
1613             "inner" == et ? -1 == window.location.href.indexOf("https") ? D.set(21406, 1, 4, F) : D.set(21408, 1, 4, F) : -1 == window.location.href.indexOf("https") ? D.set(21407, 1, 4, F) : D.set(21412, 1, 4, F);
1614             var nt = (Math.round,
1615             Math.min)
1616               , it = Math.max;
1617             Math.random;
1618             t.exports = {
1619                 init: n,
1620                 show: x,
1621                 hide: k,
1622                 getVsig: function() {
1623                     return N
1624                 }
1625             }
1626         }
1627         ]);
1628     </script>
1629     <script type=text/javascript src=https://captcha.gtimg.com/open/1/ft.js></script>
1630 </html>

 好多,编辑起来都卡了,上面html代码都是我格式化的,为了查找内容方便。

现在开始说说某些加密参数(提交验证码时候,具体研究可以查看d41060624d.js与一个tdc_iframe.html这两个):

cdata:此数据在上文的1600行。内容为:"{&quot;randstr&quot;:&quot;mvum&quot;,&quot;M&quot;:&quot;100&quot;,&quot;ans&quot;:&quot;e92970e93bdbe03bc0de0cbf0f2397bc&quot;}",整理后就是{"randstr":"mvum","M":"100","ans":"e92970e93bdbe03bc0de0cbf0f2397bc"}。cdata就是根据此json获取的。js方法为为1445-1455行。

p.ans = p.ans.toLowerCase(),
                        p.M = parseInt(p.M);
                        for (var h = 0; h < p.M && 1e3 > h; h++) {
                            var g = p.randstr + h
                              , m = md5(g);
                            if (p.ans == m.toLowerCase()) {
                                l = h;
                                break
                            }
                        }

ans:这就是提交的滑动的坐标。但这个坐标很多门道。格式是x,y;  y坐标是直接给的,因为需要显示滑块的位置。在文中1600行。Y = Number("144")。虽然Y是144px,但显示的滑块从最高处到最低处明显不到144,这因为中间还有一个转换。同样此行,B = .5,这个地方看清楚,有些可能不一样。这样表示显示的滑块y是  144x0.5 =72 px。

如上图。滑块是你看到的黄色区域,但计算时候灰色区域也计算在内的。也就是滑块有一个边框。x坐标是滑块开始位置到真实图片缺口的坐标,所以真实x还是减去20px左右。图片的真实大小是560x320(以前搞其他的时候好像不是这个大小,不知道不同网站问题还是变化了)具体情况具体分析,这里经常变动。

babedc参数:每次都不同,前面测试时候是这个参数,但上文中是abcceb。所以每次要获取出来,前面提供的正则表达式是以前时候的,现在好像有些变动。具体可用根据代码修改。此参数在上面文中的1475行

至于此参数的值,是aes加密后的,模式是cbc,密钥向量都是 0123456789abcdef,所以你可用解密下你的数据,看看具体内容。我把测试数据解密下:

    {"mouseclick":[{"t":9,"x":277,"y":147}],"keyvalue":[],"user_Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36","resolutionx":1920,"resolutiony":1080,"winSize":[300,232],"url":"https://captcha.guard.qcloud.com/cap_union_new_show","refer":"https://cloud.oppo.com/login.html","begintime":1546828509,"endtime":1546828520,"platform":1,"os":"other","keyboards":0,"flash":1,"pluginNum":50,"index":1,"ptcz":"","tokenid":2785582500,"a":2785582500,"btokenid":null,"tokents":1487589456,"ips":{"in":["192.168.50.125"]},"colorDepth":24,"cookieEnabled":true,"timezone":8,"wDelta":0,"mousemove":[[268,149,8343],[-8,2,12],[-9,4,18],[-7,3,16],[-8,4,16],[-4,2,16],[-5,4,18],[-6,2,16],[-6,3,17],[-5,1,16],[-7,1,19],[-1,0,15],[-5,0,17],[-4,1,15],[-5,0,18],[-7,1,16],[-11,2,18],[-20,0,17],[-12,1,16],[-14,1,16],[-12,2,17],[-10,1,19],[-11,1,14],[-12,2,18],[-11,1,16],[-5,1,16],[-6,0,17],[-1,0,18],[-2,0,16],[-1,0,16],[-1,0,34],[-4,0,16],[-5,0,17],[-2,-1,17],[-1,0,18],[-1,0,48],[0,1,150],[0,2,17],[0,1,49],[2,0,200],[1,0,16],[2,1,18],[1,0,16],[3,1,19],[1,0,14],[3,0,19],[1,0,15],[3,0,16],[1,0,34],[2,1,18],[3,1,18],[2,0,14],[2,0,17],[2,0,17],[2,0,17],[3,1,26],[7,1,41],[2,1,15],[2,0,19],[2,0,15],[3,0,34],[1,1,15],[3,1,17],[2,0,18],[2,0,32],[3,1,34],[1,0,33],[1,0,133],[1,0,17],[1,0,16],[1,1,17],[1,0,18],[1,0,16],[1,0,268],[0,1,15],[2,0,33],[1,0,50]],"keyUpCnt":0,"keyUpValue":[],"mouseUpValue":[{"t":11,"x":111,"y":204}],"mouseUpCnt":1,"mouseDownValue":[],"mouseDownCnt":0,"orientation":[],"bSimutor":0,"focusBlur":{"in":[],"out":[],"t":[]},"fVersion":31,"charSet":"UTF-8","resizeCnt":0,"errors":[],"screenInfo":"1920-1080-1040-24-*-*-*","elapsed":1000,"ft":"qf_7P_n_H","coordinate":[10,9,0.5],"clientType":"2","trycnt":1,"refreshcnt":1,"slideValue":[[41,192,116],[1,0,15],[2,1,18],[1,0,16],[3,1,20],[1,0,13],[3,0,19],[1,0,14],[3,0,17],[1,0,34],[2,1,18],[3,1,17],[2,0,15],[2,0,17],[2,0,17],[2,0,16],[3,1,27],[7,1,41],[2,1,15],[2,0,18],[2,0,16],[3,0,34],[1,1,15],[3,1,17],[2,0,18],[2,0,32],[3,1,33],[1,0,34],[1,0,133],[1,0,17],[1,0,16],[1,1,18],[1,0,17],[1,0,16],[1,0,268],[0,1,14],[2,0,35],[1,0,49],[0,0,63]],"dragobj":0} 
mouseclick可用为空([]),这个地方你是点击滑块时候的坐标,t是上一次点击操作与此次点击操作的间隔。
keyvalue是按键,直接默认空就行
user_Agent是浏览器UA,上面很多地方都有ua参数,其实如果批量操作,随机生成一个ua,本次操作全部用这一个ua就可用
下面就是机器的一些参数了,主要的地方有begintime与endtime,这是操作滑块的时间,一百相隔2秒就可用。
tokenid这个是根据浏览器机器的一些参数生成的,后面的参数a也一样,生成js为:
 function  getToken(_0x31cex38) {
                var _0x31cex53=31; 
                var _0x31cex54, _0x31cex55, _0x31cex56, _0x31cex57, _0x31cex58, _0x31cex59, _0x31cex5a, _0x31cex3a;
                _0x31cex54 = _0x31cex38.length & 3;
                _0x31cex55 = _0x31cex38.length - _0x31cex54;
                _0x31cex56 = _0x31cex53;
                _0x31cex58 = 0xcc9e2d51;
                _0x31cex59 = 0x1b873593;
                _0x31cex3a = 0;
                while (_0x31cex3a < _0x31cex55) {
                    _0x31cex5a = ((_0x31cex38.charCodeAt(_0x31cex3a) & 0xff)) | ((_0x31cex38.charCodeAt(++_0x31cex3a) & 0xff) << 8) | ((_0x31cex38.charCodeAt(++_0x31cex3a) & 0xff) << 16) | ((_0x31cex38.charCodeAt(++_0x31cex3a) & 0xff) << 24);
                    ++_0x31cex3a;
                    _0x31cex5a = ((((_0x31cex5a & 0xffff) * _0x31cex58) + ((((_0x31cex5a >>> 16) * _0x31cex58) & 0xffff) << 16))) & 0xffffffff;
                    _0x31cex5a = (_0x31cex5a << 15) | (_0x31cex5a >>> 17);
                    _0x31cex5a = ((((_0x31cex5a & 0xffff) * _0x31cex59) + ((((_0x31cex5a >>> 16) * _0x31cex59) & 0xffff) << 16))) & 0xffffffff;
                    _0x31cex56 ^= _0x31cex5a;
                    _0x31cex56 = (_0x31cex56 << 13) | (_0x31cex56 >>> 19);
                    _0x31cex57 = ((((_0x31cex56 & 0xffff) * 5) + ((((_0x31cex56 >>> 16) * 5) & 0xffff) << 16))) & 0xffffffff;
                    _0x31cex56 = (((_0x31cex57 & 0xffff) + 0x6b64) + ((((_0x31cex57 >>> 16) + 0xe654) & 0xffff) << 16))
                }
                ;_0x31cex5a = 0;
                switch (_0x31cex54) {
                case 3:
                    _0x31cex5a ^= (_0x31cex38.charCodeAt(_0x31cex3a + 2) & 0xff) << 16;
                case 2:
                    _0x31cex5a ^= (_0x31cex38.charCodeAt(_0x31cex3a + 1) & 0xff) << 8;
                case 1:
                    _0x31cex5a ^= (_0x31cex38.charCodeAt(_0x31cex3a) & 0xff);
                    _0x31cex5a = (((_0x31cex5a & 0xffff) * _0x31cex58) + ((((_0x31cex5a >>> 16) * _0x31cex58) & 0xffff) << 16)) & 0xffffffff;
                    _0x31cex5a = (_0x31cex5a << 15) | (_0x31cex5a >>> 17);
                    _0x31cex5a = (((_0x31cex5a & 0xffff) * _0x31cex59) + ((((_0x31cex5a >>> 16) * _0x31cex59) & 0xffff) << 16)) & 0xffffffff;
                    _0x31cex56 ^= _0x31cex5a
                }
                ;_0x31cex56 ^= _0x31cex38.length;
                _0x31cex56 ^= _0x31cex56 >>> 16;
                _0x31cex56 = (((_0x31cex56 & 0xffff) * 0x85ebca6b) + ((((_0x31cex56 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & 0xffffffff;
                _0x31cex56 ^= _0x31cex56 >>> 13;
                _0x31cex56 = ((((_0x31cex56 & 0xffff) * 0xc2b2ae35) + ((((_0x31cex56 >>> 16) * 0xc2b2ae35) & 0xffff) << 16))) & 0xffffffff;
                _0x31cex56 ^= _0x31cex56 >>> 16;
                return _0x31cex56 >>> 0
                 }

传入的数据是:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36###zh-CN###24###-480###true###true###true###undefined###function######Win32#########1546827051142
只需要变动前部分的UA与最后的毫米级时间戳就可以。
tokents参数直接用当前时间减去一些时间生成时间戳就行
mousemove,这个参数很重要,记录的是鼠标的移动。里面数组的第一个是记录坐标与时间,后面的是对比前面的相差值。计算好开始坐标与缺口坐标位置,再随机生成。
slideValue也是一样的。是滑块移动的x,y轴变动的距离与时间

这些具体研究可以参照https://captcha.gtimg.com/open/1/d41060624d.js 格式化后的1710行

其他一些参数默认或随机生成就可以了。

至此,一些参数的解密就都说完了,这个东西经常变动,所以要经常更新


 总结

  其实东西很简单,复杂的是js加密。只要慢慢研究,相信很多人都可以搞出来。

  文中语言表达很多地方不流畅,凑合着看吧,不懂的可以留言,我有时间会回复。当我突然不回复消失时候别问我干啥了,肯定是孩子又哭了。因为这个,朋友从来不带我玩王者或吃鸡

2019,祝大家挣更多钱!

原文地址:https://www.cnblogs.com/cnflysoft/p/10231578.html