├── README.md ├── _dsign.js ├── autohome.js ├── autohome.py ├── changde.py ├── get_dsign.py ├── ixigua_video.py ├── jschl_answer.html ├── jschl_answer.py ├── test_down_douban.py └── test_down_tianyancha.py /README.md: -------------------------------------------------------------------------------- 1 | # antispider 2 | ## 记录一下碰到过的反爬虫措施和解决办法,欢迎交流!!! 3 | ### 第二级目录无限制 4 | - [http://www.sdstc.gov.cn/1/1000008990.htm](http://www.sdstc.gov.cn/1/1000008990.htm) 5 | 6 | *** 7 | 8 | ### 首次访问会出现js中间页跳转 估计是验证ip 9 | - [http://www.qzfz.gov.cn/fzyw/index.html](http://www.qzfz.gov.cn/fzyw/index.html) 10 | 11 | *** 12 | 13 | ### 页面加载时间特长 14 | - [http://www.hnprec.com/list.jsp?channelid=148](http://www.hnprec.com/list.jsp?channelid=148) 3分钟 15 | 16 | *** 17 | ### discuz论坛板块接口 18 | - [http://bbs.rednet.cn/forum.php?mod=ajax&action=forumjump&jfid=undefined&inajax=1&ajaxtarget=fjump_menu](http://bbs.rednet.cn/forum.php?mod=ajax&action=forumjump&jfid=undefined&inajax=1&ajaxtarget=fjump_menu) 19 | 20 | *** 21 | ### 需要验证referer 22 | - [http://www.mxwz.com/pingyi/wlhyr/py_list.aspx?type=ly](http://www.mxwz.com/pingyi/wlhyr/py_list.aspx?type=ly) 23 | - [http://www.mxwz.com/pingyi/py_view.aspx?ID=491892](http://www.mxwz.com/pingyi/py_view.aspx?ID=491892) 24 | - [http://weixin.sogou.com/weixin?type=2&ie=utf8&query=%E5%85%A8%E5%9B%BD%E9%93%81%E8%B7%AF%E8%BF%8E%E5%A4%A7%E8%B0%83%E5%9B%BE&tsn=1&ft=&et=&interation=&wxid=&usip=](http://weixin.sogou.com/weixin?type=2&ie=utf8&query=%E5%85%A8%E5%9B%BD%E9%93%81%E8%B7%AF%E8%BF%8E%E5%A4%A7%E8%B0%83%E5%9B%BE&tsn=1&ft=&et=&interation=&wxid=&usip=) 25 | *** 26 | ### js跳转 [changde.py](https://github.com/duanyifei/antispider/blob/master/changde.py) 27 | - [http://bbs.changde.gov.cn/](http://bbs.changde.gov.cn/) 28 | 29 | *** 30 | ### cookie加密验证天眼查 [test_down_tianyancha.py](https://github.com/duanyifei/antispider/blob/master/test_down_tianyancha.py) 31 | - [http://tianyancha.com/company/3976673](http://tianyancha.com/company/3976673) 32 | - [http://tianyancha.com/tongji/3976673.json?random=1470990214043](http://tianyancha.com/tongji/3976673.json?random=1470990214043) 33 | - [http://tianyancha.com/company/3976673.json](http://tianyancha.com/company/3976673.json) 34 | 35 | *** 36 | ### 逗比验证码+%99验证失败 37 | http://xygs.gsaic.gov.cn/gsxygs/pub!list.do 38 | 39 | *** 40 | ### 豆瓣FM及其他豆瓣网站 https 不严密的cookie参数 [test_down_douban.py](https://github.com/duanyifei/antispider/blob/master/test_down_douban.py) 41 | - [https://douban.fm/](https://douban.fm/) 42 | - [https://douban.fm/j/explore/genre?gid=%s&start=0&limit=1000](https://douban.fm/j/explore/genre?gid=%s&start=0&limit=1000) 43 | - [http://douban.fm/j/explore/channel_detail?channel_id=9](http://douban.fm/j/explore/channel_detail?channel_id=9) 44 | 45 | ### js执行后url增加_dsign参数 [get_dsign.py](https://github.com/duanyifei/antispider/blob/master/get_dsign.py) 46 | - [http://bbs.auto.ifeng.com/thread-2758815-1-1.html](http://bbs.auto.ifeng.com/thread-2758815-1-1.html) 47 | - [http://wj.scdaily.scol.com.cn/thread-1754575-1-1.html](http://wj.scdaily.scol.com.cn/thread-1754575-1-1.html) 48 | -js代码 49 | 50 | ### 访问显示安全检查中... 5秒后经过js跳转到正常页面 51 | - [http://hwsqnews.com/index.html](http://hwsqnews.com/index.html) 52 | - js代码见 [jschl_answer.html](https://github.com/duanyifei/antispider/blob/master/jschl_answer.html) 53 | - 破解代码见 [jschl_answer.py](https://github.com/duanyifei/antispider/blob/master/jschl_answer.py) 54 | 55 | ### 文字使用css样式代替 56 | - [http://club.autohome.com.cn/bbs/thread-a-100024-62404423-1.html](http://club.autohome.com.cn/bbs/thread-a-100024-62404423-1.html) 57 | - js代码见 [autohome.js](https://github.com/duanyifei/antispider/blob/master/autohome.js) 58 | - 破解代码 见[autohome.py](https://github.com/duanyifei/antispider/blob/master/autohome.py) 59 | 60 | ### 限制访问频率以及代理类型 61 | 62 | - [https://m.guazi.com/bj/dazhong/](https://m.guazi.com/bj/dazhong/) 63 | - 访问频率要小于 0.5次/s 64 | - 如果使用代理的话 http协议要用http协议的代理 https要用https的代理,混用的话相当于没加代理 65 | 66 | ### 巧妙使用\r在不同平台的差异让爬虫开发者头疼 67 | 68 | - \r在linux下会被解释为回车,如果使用\r当做换行符,在网页和windows上显示都没有问题,但在linux下输出的时候测绘覆盖\r之前的字符,导致输出结果和网页上看到的少很多。。,如果不太明白\r含义的话,想必要调试很久很久很久很久吧。。。 69 | 70 | ### 爬虫技巧-西瓜视频MP4下载地址获取 71 | - [https://www.ixigua.com/](https://www.ixigua.com/) 72 | -------------------------------------------------------------------------------- /_dsign.js: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /autohome.js: -------------------------------------------------------------------------------- 1 | (function(kb_) { 2 | var Ze_ = 'r'; 3 | var yq_ = '0;2'; 4 | var yG_ = 'i'; 5 | var XW_ = '9'; 6 | var UA_ = 'B'; 7 | var Sm_ = '6'; 8 | var RY_ = '40,'; 9 | var ry_ = '%'; 10 | var pw_ = 't'; 11 | var pf_ = 'B'; 12 | var op_ = 'p'; 13 | var Nv_ = '4_1'; 14 | var na_ = '%'; 15 | var ko_ = '3;18;'; 16 | 17 | function UT_() { 18 | for (EK_ = 0; EK_ < it_.length; EK_++) { 19 | var xF_ = Jl_(it_[EK_], ','); 20 | var sG_ = ''; 21 | for (mc_ = 0; mc_ < xF_.length; mc_++) { 22 | sG_ += Ym_(xF_[mc_]) + ''; 23 | } 24 | Df_(EK_, sG_); 25 | } 26 | } 27 | var KK_ = '%'; 28 | var Jw_ = '%'; 29 | var Jp_ = '11_'; 30 | var hZ_ = '65,10'; 31 | var Hz_ = '%'; 32 | var hw_ = '6'; 33 | var Hs_ = 'o'; 34 | var gg_ = '1,2'; 35 | var bw_ = 'n'; 36 | var bI_ = '10_'; 37 | var Aa_ = '8'; 38 | 39 | function aA_(EK_) { 40 | return '.hs_kw' + EK_ + '_mainsf'; 41 | } 42 | 43 | function VX_() { 44 | return '::before { content:' 45 | } 46 | 47 | function zR_() { 48 | function _z() { 49 | return 'zR_'; 50 | }; 51 | if (_z() == 'zR__') { 52 | return _z(); 53 | } else { 54 | return '%8'; 55 | } 56 | } 57 | 58 | function ZP_() { 59 | 'return ZP_'; 60 | return 'E'; 61 | } 62 | 63 | function Zn_() { 64 | function _Z() { 65 | return 'Zn__'; 66 | }; 67 | if (_Z() == 'Zn__') { 68 | return 'A'; 69 | } else { 70 | return _Z(); 71 | } 72 | } 73 | 74 | function ZL_() { 75 | function _Z() { 76 | return 'ZL__'; 77 | }; 78 | if (_Z() == 'ZL__') { 79 | return '3'; 80 | } else { 81 | return _Z(); 82 | } 83 | } 84 | 85 | function zL_() { 86 | function _z() { 87 | return '6_468'; 88 | }; 89 | if (_z() == '6_468,') { 90 | return 'zL_'; 91 | } else { 92 | return _z(); 93 | } 94 | } 95 | 96 | function Zk_() { 97 | 'return Zk_'; 98 | return 'B8'; 99 | } 100 | 101 | function zh_() { 102 | 'return zh_'; 103 | return 'A4'; 104 | } 105 | 106 | function za_() { 107 | function _z() { 108 | return '98,7_'; 109 | }; 110 | if (_z() == '98,7_') { 111 | return '98,7_'; 112 | } else { 113 | return _z(); 114 | } 115 | } 116 | 117 | function yV_() { 118 | function _y() { 119 | return 'yV_'; 120 | }; 121 | if (_y() == 'yV__') { 122 | return _y(); 123 | } else { 124 | return '%E'; 125 | } 126 | } 127 | 128 | function yO_() { 129 | function _y() { 130 | return 'yO_'; 131 | }; 132 | if (_y() == 'yO__') { 133 | return _y(); 134 | } else { 135 | return '_270'; 136 | } 137 | } 138 | 139 | function yE_() { 140 | function _y() { 141 | return 'yE_'; 142 | }; 143 | if (_y() == 'yE__') { 144 | return _y(); 145 | } else { 146 | return 'AD'; 147 | } 148 | } 149 | 150 | function YE_() { 151 | function _Y() { 152 | return 'YE_'; 153 | }; 154 | if (_Y() == 'YE__') { 155 | return _Y(); 156 | } else { 157 | return '%E'; 158 | } 159 | } 160 | 161 | function Ya_() { 162 | function _Y() { 163 | return 'Ya_'; 164 | }; 165 | if (_Y() == 'Ya__') { 166 | return _Y(); 167 | } else { 168 | return '4%'; 169 | } 170 | } 171 | 172 | function xw_() { 173 | 'return xw_'; 174 | return '9'; 175 | } 176 | 177 | function Su_() { 178 | var HK_ = Gj_(); 179 | for (EK_ = 0; EK_ < ev_.length; EK_++) { 180 | var xF_ = Jl_(ev_[EK_], ','); 181 | var sG_ = ''; 182 | for (mc_ = 0; mc_ < xF_.length; mc_++) { 183 | var ZQ_ = Jl_(xF_[mc_], '_'); 184 | sG_ += ''; 185 | } 186 | sG_ += ''; 187 | Ea_(EK_, sG_); 188 | } 189 | } 190 | 191 | function xL_() { 192 | var HK_ = Gj_(); 193 | for (EK_ = 0; EK_ < ev_.length; EK_++) { 194 | if (EK_ % 2 == 0) { 195 | var xF_ = Jl_(ev_[EK_], ','); 196 | var sG_ = ''; 197 | for (mc_ = 0; mc_ < xF_.length; mc_++) { 198 | var ZQ_ = Jl_(xF_[mc_], '_'); 199 | sG_ += ''; 200 | } 201 | sG_ += ''; 202 | Ea_(EK_, sG_); 203 | } else { 204 | var xF_ = Jl_(it_[EK_], ','); 205 | var sG_ = ''; 206 | for (mc_ = 0; mc_ < xF_.length; mc_++) { 207 | sG_ += Ym_(xF_[mc_]) + ''; 208 | } 209 | Df_(EK_, sG_); 210 | } 211 | } 212 | } 213 | 214 | function XV_() { 215 | function _X() { 216 | return 'XV__'; 217 | }; 218 | if (_X() == 'XV__') { 219 | return 'A'; 220 | } else { 221 | return _X(); 222 | } 223 | } 224 | 225 | function xT_() { 226 | 'return xT_'; 227 | return '5,16_3'; 228 | } 229 | 230 | function XP_() { 231 | function _X() { 232 | return '9'; 233 | }; 234 | if (_X() == '9') { 235 | return '9'; 236 | } else { 237 | return _X(); 238 | } 239 | } 240 | 241 | function Xn_() { 242 | function _X() { 243 | return 'BC'; 244 | }; 245 | if (_X() == 'BC,') { 246 | return 'Xn_'; 247 | } else { 248 | return _X(); 249 | } 250 | } 251 | 252 | function Xk_() { 253 | 'return Xk_'; 254 | return '11'; 255 | } 256 | 257 | function Ah_() { 258 | return kb_['' + Gw_() + (function(tr__) { 259 | 'return tr_'; 260 | return tr__; 261 | })('ef') + dP_('au') + dF_() + Ke_() + Pm_() + hJ_()]; 262 | } 263 | var ev_ = ''; 264 | 265 | function XE_() { 266 | 'return XE_'; 267 | return 'm'; 268 | } 269 | 270 | function Wv_() { 271 | function _W() { 272 | return 'Wv__'; 273 | }; 274 | if (_W() == 'Wv__') { 275 | return '44,'; 276 | } else { 277 | return _W(); 278 | } 279 | } 280 | 281 | function wV_() { 282 | function _w() { 283 | return ';2'; 284 | }; 285 | if (_w() == ';2,') { 286 | return 'wV_'; 287 | } else { 288 | return _w(); 289 | } 290 | } 291 | 292 | function WH_() { 293 | function _W() { 294 | return '432;4_'; 295 | }; 296 | if (_W() == '432;4_,') { 297 | return 'WH_'; 298 | } else { 299 | return _W(); 300 | } 301 | } 302 | 303 | function wF_() { 304 | 'return wF_'; 305 | return '98'; 306 | } 307 | 308 | function Wf_() { 309 | function _W() { 310 | return 'E'; 311 | }; 312 | if (_W() == 'E') { 313 | return 'E'; 314 | } else { 315 | return _W(); 316 | } 317 | } 318 | 319 | function Wc_() { 320 | function _W() { 321 | return 'Wc__'; 322 | }; 323 | if (_W() == 'Wc__') { 324 | return '%'; 325 | } else { 326 | return _W(); 327 | } 328 | } 329 | 330 | function Vo_() { 331 | 'return Vo_'; 332 | return '9A'; 333 | } 334 | 335 | function Xw_() { 336 | LC_ = PB_()['' + Al_() + PC_() + dY_() + UV_() + (function(Ut__) { 337 | 'return Ut_'; 338 | return Ut__; 339 | })('eU') + 'RI' + 'Co' + XE_() + gj_() + (function(Yb__) { 340 | 'return Yb_'; 341 | return Yb__; 342 | })('on') + Jj_() + hU_()]('' + NC_() + '3%' + sT_('80') + ux_() + hT_() + tL_() + sX_() + FK_() + qx_() + kS_() + OC_() + eT_() + yV_() + Ra_() + Hh_() + Wc_() + Rd_() + (function() { 343 | 'return uZ_'; 344 | return '0' 345 | })() + nn_() + Kj_() + Zk_() + JK_('%8') + Zn_() + GM_() + hV_() + JL_() + UA_ + bQ_() + zR_() + JD_() + Wf_() + gs_() + pf_ + Ia_() + Hz_ + Ix_() + fV_() + 'E4' + CE_() + (function() { 346 | 'return fN_'; 347 | return 'A' 348 | })() + DG_() + JZ_('6%') + uk_() + (function(jW__) { 349 | 'return jW_'; 350 | return jW__; 351 | })('%8') + Hu_() + Jw_ + nP_() + ZL_() + '%E' + iH_() + Ct_() + Ap_() + XV_() + (function(GP__) { 352 | 'return GP_'; 353 | return GP__; 354 | })('2%') + BJ_('E5') + fB_() + iz_() + (function(Mn__) { 355 | 'return Mn_'; 356 | return Mn__; 357 | })('2%') + BP_('8C') + Ni_('%E') + '5%' + qg_() + KK_ + cT_('B0') + YE_() + MR_() + zh_() + Tb_() + Vo_() + uA_() + 'E5' + ak_('%A') + Ya_() + Ki_() + Rm_() + sf_() + aY_() + kJ_() + (function(VZ__) { 358 | 'return VZ_'; 359 | return VZ__; 360 | })('BD') + Bf_() + (function(UF__) { 361 | 'return UF_'; 362 | return UF__; 363 | })('E5') + '%B' + nx_() + ry_ + XP_() + '1%' + ue_() + Kp_() + Ka_() + Lw_() + rI_() + hw_ + MU_() + jn_() + Dg_() + iu_() + ht_() + (function(Sc__) { 364 | 'return Sc_'; 365 | return Sc__; 366 | })('88') + '%E' + FC_('5%') + (function(UU__) { 367 | 'return UU_'; 368 | return UU__; 369 | })('BE') + gA_() + Qg_() + Ec_() + ZP_() + Sm_ + aT_() + wF_() + (function() { 370 | 'return nv_'; 371 | return '%' 372 | })() + 'AF' + (function(aJ__) { 373 | 'return aJ_'; 374 | return aJ__; 375 | })('%E') + '7%' + '9A' + (function(NZ__) { 376 | 'return NZ_'; 377 | return NZ__; 378 | })('%8') + (function() { 379 | 'return oX_'; 380 | return '4' 381 | })() + sy_() + hz_() + Kc_() + (function(CC__) { 382 | 'return CC_'; 383 | return CC__; 384 | })('%9') + pX_() + nK_('80') + qm_('%E') + Ie_() + (function(zw__) { 385 | 'return zw_'; 386 | return zw__; 387 | })('9F') + Nw_() + yE_() + JO_() + mI_() + 'BF' + lx_() + KD_('1%') + RJ_() + (function() { 388 | 'return XF_'; 389 | return '9' 390 | })() + Uh_('%9') + qo_() + Ul_('%B') + az_() + (function(zc__) { 391 | 'return zc_'; 392 | return zc__; 393 | })('%E') + xw_() + Nl_('%A') + vb_() + na_ + me_() + Aa_ + (function() { 394 | 'return zH_'; 395 | return '%' 396 | })() + OD_() + Gd_('F%') + Xn_() + (function(iJ__) { 397 | 'return iJ_'; 398 | return iJ__; 399 | })('%8') + (function() { 400 | 'return bN_'; 401 | return 'C' 402 | })() + vY_() + (function() { 403 | 'return PG_'; 404 | return 'E' 405 | })() + FG_() + uV_() + (function() { 406 | 'return lI_'; 407 | return 'C' 408 | })() + Ge_('%9') + (function(ks__) { 409 | 'return ks_'; 410 | return ks__; 411 | })('F') + uT_('')); 412 | it_ = Jl_((uT_('') + '' + ko_ + uN_() + uD_() + ';12;19' + cs_() + Xk_() + KG_() + ';1' + ';2' + (function() { 413 | 'return XJ_'; 414 | return '6' 415 | })() + ';4;5;8' + Ib_() + wV_() + yq_ + mt_() + Ei_() + LN_() + (function(Mp__) { 416 | 'return Mp_'; 417 | return Mp__; 418 | })('24;1') + (function() { 419 | 'return KT_'; 420 | return '3' 421 | })() + jL_() + ';0;9' + LI_() + lV_(';7')), aS_(';')); 422 | ev_ = Jl_(('' + Nv_ + AV_() + ',1' + IC_() + '0;6_29' + ',10_' + Rr_('18') + Nn_() + vn_() + yC_('36;6') + Nx_() + hZ_ + tI_() + Ha_() + cX_() + (function() { 423 | 'return kt_'; 424 | return '_72;9' 425 | })() + zF_() + za_() + lt_() + qD_() + Ln_() + IK_('2,') + RE_() + be_() + dX_() + MZ_() + Bk_() + '1,16_1' + OZ_() + (function() { 426 | 'return Ja_'; 427 | return '172' 428 | })() + cI_() + ui_() + cx_() + Rw_('14_180') + Pn_() + Gx_() + sd_() + gg_ + NH_() + bg_('198;') + '10_223' + lq_() + KN_() + '11_2' + RY_ + mS_() + Kh_('34;0') + (function(rF__) { 429 | 'return rF_'; 430 | return rF__; 431 | })('_269,1') + BQ_() + om_() + wt_('0_') + '287,16' + yO_() + TY_(';1') + (function() { 432 | 'return yz_'; 433 | return '2_2' 434 | })() + (function() { 435 | 'return iq_'; 436 | return '93,' 437 | })() + (function() { 438 | 'return qY_'; 439 | return '4_288' 440 | })() + (function(Hi__) { 441 | 'return Hi_'; 442 | return Hi__; 443 | })(';1_3') + (function(as__) { 444 | 'return as_'; 445 | return as__; 446 | })('22,1') + cz_() + oR_() + kP_('6;6_33') + (function() { 447 | 'return EE_'; 448 | return '5,1' 449 | })() + Fg_() + Qw_() + aD_() + rz_() + jU_() + bI_ + Iv_() + MA_() + qj_() + Uc_() + '_360;0' + cN_() + XW_ + xT_() + PS_() + pI_() + Se_() + NB_() + (function() { 450 | 'return df_'; 451 | return '_41' 452 | })() + (function(hO__) { 453 | 'return hO_'; 454 | return hO__; 455 | })('8,') + (function() { 456 | 'return zg_'; 457 | return '3_414' 458 | })() + (function(CB__) { 459 | 'return CB_'; 460 | return CB__; 461 | })(';5_4') + Wv_() + Jp_ + WH_() + '463,12' + Qa_() + dQ_() + OT_() + zL_() + aS_(';')), uT_(';')); 462 | QA_(); 463 | return ';'; 464 | } 465 | 466 | function vn_() { 467 | function _v() { 468 | return '47,10_'; 469 | }; 470 | if (_v() == '47,10_,') { 471 | return 'vn_'; 472 | } else { 473 | return _v(); 474 | } 475 | } 476 | 477 | function vF_() { 478 | function _v() { 479 | return 'vF__'; 480 | }; 481 | if (_v() == 'vF__') { 482 | return 't'; 483 | } else { 484 | return _v(); 485 | } 486 | } 487 | 488 | function vb_() { 489 | function _v() { 490 | return 'vb__'; 491 | }; 492 | if (_v() == 'vb__') { 493 | return 'B'; 494 | } else { 495 | return _v(); 496 | } 497 | } 498 | 499 | function uV_() { 500 | function _u() { 501 | return 'B'; 502 | }; 503 | if (_u() == 'B') { 504 | return 'B'; 505 | } else { 506 | return _u(); 507 | } 508 | } 509 | 510 | function uP_() { 511 | 'return uP_'; 512 | return 'l'; 513 | } 514 | 515 | function uN_() { 516 | 'return uN_'; 517 | return '6;2'; 518 | } 519 | 520 | function uk_() { 521 | function _u() { 522 | return 'E5'; 523 | }; 524 | if (_u() == 'E5,') { 525 | return 'uk_'; 526 | } else { 527 | return _u(); 528 | } 529 | } 530 | 531 | function UJ_() { 532 | 'return UJ_'; 533 | return 'hr'; 534 | } 535 | var rK_ = kb_.createElement('style'); 536 | if (kb_.head) { 537 | kb_.head.appendChild(rK_); 538 | } else { 539 | kb_.getElementsByTagName('head')[0].appendChild(rK_); 540 | } 541 | var yJ_ = rK_.sheet; 542 | 543 | function ui_() { 544 | function _u() { 545 | return 'ui_'; 546 | }; 547 | if (_u() == 'ui__') { 548 | return _u(); 549 | } else { 550 | return '9_162;'; 551 | } 552 | } 553 | 554 | function ue_() { 555 | function _u() { 556 | return 'ue_'; 557 | }; 558 | if (_u() == 'ue__') { 559 | return _u(); 560 | } else { 561 | return 'E5'; 562 | } 563 | } 564 | 565 | function uD_() { 566 | 'return uD_'; 567 | return '5;16'; 568 | } 569 | 570 | function Uc_() { 571 | 'return Uc_'; 572 | return '6,5'; 573 | } 574 | 575 | function uA_() { 576 | function _u() { 577 | return 'uA__'; 578 | }; 579 | if (_u() == 'uA__') { 580 | return '%'; 581 | } else { 582 | return _u(); 583 | } 584 | } 585 | 586 | function tI_() { 587 | function _t() { 588 | return 'tI_'; 589 | }; 590 | if (_t() == 'tI__') { 591 | return _t(); 592 | } else { 593 | return '_54;'; 594 | } 595 | } 596 | 597 | function Sy_() { 598 | 'return Sy_'; 599 | return 'io'; 600 | } 601 | 602 | function sy_() { 603 | function _s() { 604 | return 'sy__'; 605 | }; 606 | if (_s() == 'sy__') { 607 | return '%'; 608 | } else { 609 | return _s(); 610 | } 611 | } 612 | 613 | function Ea_(Zy_, EK_) { 614 | var xF_ = jz_(aA_(Zy_)); 615 | for (x in xF_) { 616 | xF_[x].innerHTML = EK_; 617 | try { 618 | xF_[x].currentStyle = ''; 619 | } catch (e) {} 620 | } 621 | } 622 | 623 | function sX_() { 624 | 'return sX_'; 625 | return '%E'; 626 | } 627 | 628 | function Si_() { 629 | 'return Si_'; 630 | return 'n'; 631 | } 632 | 633 | function sI_() { 634 | function _s() { 635 | return 'sI_'; 636 | }; 637 | if (_s() == 'sI__') { 638 | return _s(); 639 | } else { 640 | return 'At'; 641 | } 642 | } 643 | 644 | function sf_() { 645 | function _s() { 646 | return '5'; 647 | }; 648 | if (_s() == '5') { 649 | return '5'; 650 | } else { 651 | return _s(); 652 | } 653 | } 654 | 655 | function Se_() { 656 | 'return Se_'; 657 | return '8,11_3'; 658 | } 659 | 660 | function sd_() { 661 | function _s() { 662 | return '20'; 663 | }; 664 | if (_s() == '20,') { 665 | return 'sd_'; 666 | } else { 667 | return _s(); 668 | } 669 | } 670 | 671 | function rz_() { 672 | function _r() { 673 | return '353'; 674 | }; 675 | if (_r() == '353') { 676 | return '353'; 677 | } else { 678 | return _r(); 679 | } 680 | } 681 | 682 | function Rm_() { 683 | 'return Rm_'; 684 | return '%E'; 685 | } 686 | 687 | function rI_() { 688 | function _r() { 689 | return 'rI__'; 690 | }; 691 | if (_r() == 'rI__') { 692 | return 'A'; 693 | } else { 694 | return _r(); 695 | } 696 | } 697 | 698 | function RE_() { 699 | 'return RE_'; 700 | return '3_'; 701 | } 702 | 703 | function Rd_() { 704 | function _R() { 705 | return 'Rd__'; 706 | }; 707 | if (_R() == 'Rd__') { 708 | return '8'; 709 | } else { 710 | return _R(); 711 | } 712 | } 713 | 714 | function Ra_() { 715 | 'return Ra_'; 716 | return '4%'; 717 | } 718 | 719 | function qx_() { 720 | function _q() { 721 | return 'qx__'; 722 | }; 723 | if (_q() == 'qx__') { 724 | return '8'; 725 | } else { 726 | return _q(); 727 | } 728 | } 729 | 730 | function Qw_() { 731 | function _Q() { 732 | return 'Qw__'; 733 | }; 734 | if (_Q() == 'Qw__') { 735 | return '3'; 736 | } else { 737 | return _Q(); 738 | } 739 | } 740 | 741 | function qo_() { 742 | function _q() { 743 | return 'qo__'; 744 | }; 745 | if (_q() == 'qo__') { 746 | return '5'; 747 | } else { 748 | return _q(); 749 | } 750 | } 751 | 752 | function qj_() { 753 | function _q() { 754 | return 'qj__'; 755 | }; 756 | if (_q() == 'qj__') { 757 | return '6'; 758 | } else { 759 | return _q(); 760 | } 761 | } 762 | 763 | function qg_() { 764 | 'return qg_'; 765 | return '9C'; 766 | } 767 | 768 | function Qg_() { 769 | 'return Qg_'; 770 | return '7'; 771 | } 772 | 773 | function qC_() { 774 | function _q() { 775 | return 'qC_'; 776 | }; 777 | if (_q() == 'qC__') { 778 | return _q(); 779 | } else { 780 | return 'e'; 781 | } 782 | } 783 | 784 | function Qa_() { 785 | function _Q() { 786 | return '_450;'; 787 | }; 788 | if (_Q() == '_450;') { 789 | return '_450;'; 790 | } else { 791 | return _Q(); 792 | } 793 | } 794 | 795 | function pX_() { 796 | function _p() { 797 | return 'pX_'; 798 | }; 799 | if (_p() == 'pX__') { 800 | return _p(); 801 | } else { 802 | return 'D%'; 803 | } 804 | } 805 | 806 | function PS_() { 807 | function _P() { 808 | return '78;5_'; 809 | }; 810 | if (_P() == '78;5_') { 811 | return '78;5_'; 812 | } else { 813 | return _P(); 814 | } 815 | } 816 | 817 | function Pn_() { 818 | function _P() { 819 | return 'Pn_'; 820 | }; 821 | if (_P() == 'Pn__') { 822 | return _P(); 823 | } else { 824 | return ';1'; 825 | } 826 | } 827 | 828 | function Pm_() { 829 | 'return Pm_'; 830 | return 'Vi'; 831 | } 832 | 833 | function pj_() { 834 | function _p() { 835 | return 'pj__'; 836 | }; 837 | if (_p() == 'pj__') { 838 | return 'i'; 839 | } else { 840 | return _p(); 841 | } 842 | } 843 | 844 | function pI_() { 845 | function _p() { 846 | return 'pI_'; 847 | }; 848 | if (_p() == 'pI__') { 849 | return _p(); 850 | } else { 851 | return '40'; 852 | } 853 | } 854 | 855 | function PC_() { 856 | 'return PC_'; 857 | return 'ec'; 858 | } 859 | 860 | function PA_() { 861 | 'return PA_'; 862 | return 'et'; 863 | } 864 | 865 | function OZ_() { 866 | 'return OZ_'; 867 | return '44;7_'; 868 | } 869 | 870 | function OU_() { 871 | function _O() { 872 | return 'OU_'; 873 | }; 874 | if (_O() == 'OU__') { 875 | return _O(); 876 | } else { 877 | return 'ty'; 878 | } 879 | } 880 | 881 | function OT_() { 882 | function _O() { 883 | return '_485,1'; 884 | }; 885 | if (_O() == '_485,1,') { 886 | return 'OT_'; 887 | } else { 888 | return _O(); 889 | } 890 | } 891 | 892 | function om_() { 893 | function _o() { 894 | return '52;'; 895 | }; 896 | if (_o() == '52;') { 897 | return '52;'; 898 | } else { 899 | return _o(); 900 | } 901 | } 902 | 903 | function OC_() { 904 | function _O() { 905 | return '%'; 906 | }; 907 | if (_O() == '%') { 908 | return '%'; 909 | } else { 910 | return _O(); 911 | } 912 | } 913 | 914 | function aS_(Zy_) { 915 | ba_(); 916 | if (Ah_()) { 917 | Ah_()['' + (function() { 918 | 'return uJ_'; 919 | return 'g' 920 | })() + PA_() + bs_('Co') + gv_() + (function(Pe__) { 921 | 'return Pe_'; 922 | return Pe__; 923 | })('pu') + pw_ + GH_() + hB_() + OU_() + Fh_() + qC_()] = function(element, pseudoElt) { 924 | if (pseudoElt != undefined && typeof(pseudoElt) == 'string' && pseudoElt.toLowerCase().indexOf(':before') > -1) { 925 | var obj = {}; 926 | obj.getPropertyValue = function(x) { 927 | return x; 928 | }; 929 | return obj; 930 | } else { 931 | return window.hs_fuckyou_dd(element, pseudoElt); 932 | } 933 | }; 934 | } 935 | return Zy_; 936 | } 937 | 938 | function uT_(Zy_) { 939 | ba_(); 940 | PB_()['' + (function() { 941 | 'return uJ_'; 942 | return 'g' 943 | })() + PA_() + bs_('Co') + gv_() + (function(Pe__) { 944 | 'return Pe_'; 945 | return Pe__; 946 | })('pu') + pw_ + GH_() + hB_() + OU_() + Fh_() + qC_()] = function(element, pseudoElt) { 947 | if (pseudoElt != undefined && typeof(pseudoElt) == 'string' && pseudoElt.toLowerCase().indexOf(':before') > -1) { 948 | var obj = {}; 949 | obj.getPropertyValue = function(x) { 950 | return x; 951 | }; 952 | return obj; 953 | } else { 954 | return window.hs_fuckyou(element, pseudoElt); 955 | } 956 | }; 957 | return Zy_; 958 | } 959 | 960 | function nx_() { 961 | 'return nx_'; 962 | return '0'; 963 | } 964 | 965 | function Nx_() { 966 | function _N() { 967 | return '_'; 968 | }; 969 | if (_N() == '_') { 970 | return '_'; 971 | } else { 972 | return _N(); 973 | } 974 | } 975 | 976 | function Nw_() { 977 | 'return Nw_'; 978 | return '%'; 979 | } 980 | 981 | function nP_() { 982 | function _n() { 983 | return 'nP__'; 984 | }; 985 | if (_n() == 'nP__') { 986 | return 'B'; 987 | } else { 988 | return _n(); 989 | } 990 | } 991 | 992 | function QA_() { 993 | if (PP_()) { 994 | if (uT_('yJ_') == 'yJ_') { 995 | UT_(); 996 | } 997 | } 998 | if (!PP_()) { 999 | if (uT_('EK_') != 'rK_') { 1000 | Su_(); 1001 | } 1002 | } 1003 | } 1004 | 1005 | function nn_() { 1006 | function _n() { 1007 | return 'nn_'; 1008 | }; 1009 | if (_n() == 'nn__') { 1010 | return _n(); 1011 | } else { 1012 | return '%E'; 1013 | } 1014 | } 1015 | 1016 | function Nn_() { 1017 | function _N() { 1018 | return ';6_'; 1019 | }; 1020 | if (_N() == ';6_') { 1021 | return ';6_'; 1022 | } else { 1023 | return _N(); 1024 | } 1025 | } 1026 | 1027 | function NH_() { 1028 | function _N() { 1029 | return 'NH__'; 1030 | }; 1031 | if (_N() == 'NH__') { 1032 | return '_'; 1033 | } else { 1034 | return _N(); 1035 | } 1036 | } 1037 | 1038 | function NC_() { 1039 | function _N() { 1040 | return '%E'; 1041 | }; 1042 | if (_N() == '%E,') { 1043 | return 'NC_'; 1044 | } else { 1045 | return _N(); 1046 | } 1047 | } 1048 | 1049 | function NB_() { 1050 | 'return NB_'; 1051 | return '96;13'; 1052 | } 1053 | 1054 | function Nb_() { 1055 | function _N() { 1056 | return 'w'; 1057 | }; 1058 | if (_N() == 'w,') { 1059 | return 'Nb_'; 1060 | } else { 1061 | return _N(); 1062 | } 1063 | } 1064 | 1065 | function MZ_() { 1066 | function _M() { 1067 | return 'MZ__'; 1068 | }; 1069 | if (_M() == 'MZ__') { 1070 | return '10_12'; 1071 | } else { 1072 | return _M(); 1073 | } 1074 | } 1075 | 1076 | function mt_() { 1077 | function _m() { 1078 | return 'mt__'; 1079 | }; 1080 | if (_m() == 'mt__') { 1081 | return '3'; 1082 | } else { 1083 | return _m(); 1084 | } 1085 | } 1086 | 1087 | function MR_() { 1088 | function _M() { 1089 | return 'MR_'; 1090 | }; 1091 | if (_M() == 'MR__') { 1092 | return _M(); 1093 | } else { 1094 | return '5%'; 1095 | } 1096 | } 1097 | 1098 | function mI_() { 1099 | 'return mI_'; 1100 | return '8%'; 1101 | } 1102 | 1103 | function MD_() { 1104 | function _M() { 1105 | return 'MD_'; 1106 | }; 1107 | if (_M() == 'MD__') { 1108 | return _M(); 1109 | } else { 1110 | return 'ef'; 1111 | } 1112 | } 1113 | 1114 | function MA_() { 1115 | function _M() { 1116 | return '1_3'; 1117 | }; 1118 | if (_M() == '1_3') { 1119 | return '1_3'; 1120 | } else { 1121 | return _M(); 1122 | } 1123 | } 1124 | 1125 | function lx_() { 1126 | 'return lx_'; 1127 | return '%9'; 1128 | } 1129 | 1130 | function Lw_() { 1131 | 'return Lw_'; 1132 | return '%'; 1133 | } 1134 | 1135 | function lt_() { 1136 | function _l() { 1137 | return '90'; 1138 | }; 1139 | if (_l() == '90,') { 1140 | return 'lt_'; 1141 | } else { 1142 | return _l(); 1143 | } 1144 | } 1145 | 1146 | function LN_() { 1147 | function _L() { 1148 | return 'LN__'; 1149 | }; 1150 | if (_L() == 'LN__') { 1151 | return '21;'; 1152 | } else { 1153 | return _L(); 1154 | } 1155 | } 1156 | 1157 | function Ln_() { 1158 | function _L() { 1159 | return '1'; 1160 | }; 1161 | if (_L() == '1') { 1162 | return '1'; 1163 | } else { 1164 | return _L(); 1165 | } 1166 | } 1167 | 1168 | function LI_() { 1169 | function _L() { 1170 | return ';10;15'; 1171 | }; 1172 | if (_L() == ';10;15,') { 1173 | return 'LI_'; 1174 | } else { 1175 | return _L(); 1176 | } 1177 | } 1178 | 1179 | function kS_() { 1180 | function _k() { 1181 | return '0'; 1182 | }; 1183 | if (_k() == '0') { 1184 | return '0'; 1185 | } else { 1186 | return _k(); 1187 | } 1188 | } 1189 | var LC_ = ''; 1190 | 1191 | function KN_() { 1192 | 'return KN_'; 1193 | return '216;'; 1194 | } 1195 | 1196 | function kJ_() { 1197 | function _k() { 1198 | return 'kJ_'; 1199 | }; 1200 | if (_k() == 'kJ__') { 1201 | return _k(); 1202 | } else { 1203 | return '5%'; 1204 | } 1205 | } 1206 | 1207 | function Kj_() { 1208 | function _K() { 1209 | return '4%'; 1210 | }; 1211 | if (_K() == '4%,') { 1212 | return 'Kj_'; 1213 | } else { 1214 | return _K(); 1215 | } 1216 | } 1217 | 1218 | function Ki_() { 1219 | 'return Ki_'; 1220 | return 'A7'; 1221 | } 1222 | 1223 | function GO_() { 1224 | return PB_()['' + JR_() + Hs_ + 'ca' + ke_() + Sy_() + bw_]['' + UJ_() + MD_()]; 1225 | } 1226 | 1227 | function KG_() { 1228 | function _K() { 1229 | return ';17'; 1230 | }; 1231 | if (_K() == ';17') { 1232 | return ';17'; 1233 | } else { 1234 | return _K(); 1235 | } 1236 | } 1237 | 1238 | function ke_() { 1239 | 'return ke_'; 1240 | return 't'; 1241 | } 1242 | 1243 | function Kc_() { 1244 | function _K() { 1245 | return '7'; 1246 | }; 1247 | if (_K() == '7') { 1248 | return '7'; 1249 | } else { 1250 | return _K(); 1251 | } 1252 | } 1253 | 1254 | function Ka_() { 1255 | function _K() { 1256 | return 'B7'; 1257 | }; 1258 | if (_K() == 'B7,') { 1259 | return 'Ka_'; 1260 | } else { 1261 | return _K(); 1262 | } 1263 | } 1264 | 1265 | function jZ_() { 1266 | function _j() { 1267 | return 'jZ_'; 1268 | }; 1269 | if (_j() == 'jZ__') { 1270 | return _j(); 1271 | } else { 1272 | return 'tR'; 1273 | } 1274 | } 1275 | 1276 | function JR_() { 1277 | 'return JR_'; 1278 | return 'l'; 1279 | } 1280 | 1281 | function JO_() { 1282 | function _J() { 1283 | return '%E'; 1284 | }; 1285 | if (_J() == '%E,') { 1286 | return 'JO_'; 1287 | } else { 1288 | return _J(); 1289 | } 1290 | } 1291 | 1292 | function jn_() { 1293 | function _j() { 1294 | return 'E5'; 1295 | }; 1296 | if (_j() == 'E5,') { 1297 | return 'jn_'; 1298 | } else { 1299 | return _j(); 1300 | } 1301 | } 1302 | 1303 | function Jj_() { 1304 | function _J() { 1305 | return 'e'; 1306 | }; 1307 | if (_J() == 'e') { 1308 | return 'e'; 1309 | } else { 1310 | return _J(); 1311 | } 1312 | } 1313 | 1314 | function JF_() { 1315 | function _J() { 1316 | return 'JF__'; 1317 | }; 1318 | if (_J() == 'JF__') { 1319 | return 't'; 1320 | } else { 1321 | return _J(); 1322 | } 1323 | } 1324 | 1325 | function JD_() { 1326 | 'return JD_'; 1327 | return 'B%'; 1328 | } 1329 | 1330 | function iz_() { 1331 | function _i() { 1332 | return '9'; 1333 | }; 1334 | if (_i() == '9') { 1335 | return '9'; 1336 | } else { 1337 | return _i(); 1338 | } 1339 | } 1340 | 1341 | function Ix_() { 1342 | 'return Ix_'; 1343 | return '8D'; 1344 | } 1345 | 1346 | function IT_() { 1347 | function _I() { 1348 | return 'y'; 1349 | }; 1350 | if (_I() == 'y') { 1351 | return 'y'; 1352 | } else { 1353 | return _I(); 1354 | } 1355 | } 1356 | 1357 | function PB_() { 1358 | return this['' + cb_() + pj_() + (function(rZ__) { 1359 | 'return rZ_'; 1360 | return rZ__; 1361 | })('nd') + TD_() + Nb_()]; 1362 | } 1363 | 1364 | function iH_() { 1365 | 'return iH_'; 1366 | return '5%'; 1367 | } 1368 | 1369 | function Ie_() { 1370 | function _I() { 1371 | return 'Ie_'; 1372 | }; 1373 | if (_I() == 'Ie__') { 1374 | return _I(); 1375 | } else { 1376 | return '7%'; 1377 | } 1378 | } 1379 | 1380 | function IC_() { 1381 | function _I() { 1382 | return '2_'; 1383 | }; 1384 | if (_I() == '2_,') { 1385 | return 'IC_'; 1386 | } else { 1387 | return _I(); 1388 | } 1389 | } 1390 | 1391 | function Ib_() { 1392 | function _I() { 1393 | return ';2;14'; 1394 | }; 1395 | if (_I() == ';2;14') { 1396 | return ';2;14'; 1397 | } else { 1398 | return _I(); 1399 | } 1400 | } 1401 | 1402 | function Ia_() { 1403 | function _I() { 1404 | return '8'; 1405 | }; 1406 | if (_I() == '8') { 1407 | return '8'; 1408 | } else { 1409 | return _I(); 1410 | } 1411 | } 1412 | 1413 | function hz_() { 1414 | 'return hz_'; 1415 | return 'E'; 1416 | } 1417 | 1418 | function Hu_() { 1419 | 'return Hu_'; 1420 | return 'F'; 1421 | } 1422 | 1423 | function hU_() { 1424 | function _h() { 1425 | return 'nt'; 1426 | }; 1427 | if (_h() == 'nt,') { 1428 | return 'hU_'; 1429 | } else { 1430 | return _h(); 1431 | } 1432 | } 1433 | 1434 | function ht_() { 1435 | function _h() { 1436 | return '%'; 1437 | }; 1438 | if (_h() == '%') { 1439 | return '%'; 1440 | } else { 1441 | return _h(); 1442 | } 1443 | } 1444 | 1445 | function hJ_() { 1446 | function _h() { 1447 | return 'hJ_'; 1448 | }; 1449 | if (_h() == 'hJ__') { 1450 | return _h(); 1451 | } else { 1452 | return 'ew'; 1453 | } 1454 | } 1455 | 1456 | function Hh_() { 1457 | 'return Hh_'; 1458 | return 'B8'; 1459 | } 1460 | 1461 | function HC_() { 1462 | function _H() { 1463 | return 'HC__'; 1464 | }; 1465 | if (_H() == 'HC__') { 1466 | return 'a'; 1467 | } else { 1468 | return _H(); 1469 | } 1470 | } 1471 | 1472 | function hB_() { 1473 | 'return hB_'; 1474 | return 'dS'; 1475 | } 1476 | 1477 | function Ha_() { 1478 | 'return Ha_'; 1479 | return '11'; 1480 | } 1481 | 1482 | function Gx_() { 1483 | function _G() { 1484 | return '4_'; 1485 | }; 1486 | if (_G() == '4_,') { 1487 | return 'Gx_'; 1488 | } else { 1489 | return _G(); 1490 | } 1491 | } 1492 | 1493 | function gv_() { 1494 | function _g() { 1495 | return 'gv__'; 1496 | }; 1497 | if (_g() == 'gv__') { 1498 | return 'm'; 1499 | } else { 1500 | return _g(); 1501 | } 1502 | } 1503 | 1504 | function gs_() { 1505 | 'return gs_'; 1506 | return '4%'; 1507 | } 1508 | 1509 | function GM_() { 1510 | 'return GM_'; 1511 | return '%E'; 1512 | } 1513 | 1514 | function GH_() { 1515 | function _G() { 1516 | return 'e'; 1517 | }; 1518 | if (_G() == 'e') { 1519 | return 'e'; 1520 | } else { 1521 | return _G(); 1522 | } 1523 | } 1524 | 1525 | function gA_() { 1526 | 'return gA_'; 1527 | return '%9'; 1528 | } 1529 | 1530 | function FK_() { 1531 | 'return FK_'; 1532 | return '3%'; 1533 | } 1534 | 1535 | function FG_() { 1536 | function _F() { 1537 | return 'FG_'; 1538 | }; 1539 | if (_F() == 'FG__') { 1540 | return _F(); 1541 | } else { 1542 | return 'F%'; 1543 | } 1544 | } 1545 | 1546 | function Fg_() { 1547 | function _F() { 1548 | return '0_'; 1549 | }; 1550 | if (_F() == '0_,') { 1551 | return 'Fg_'; 1552 | } else { 1553 | return _F(); 1554 | } 1555 | } 1556 | 1557 | function fB_() { 1558 | function _f() { 1559 | return 'fB__'; 1560 | }; 1561 | if (_f() == 'fB__') { 1562 | return '%'; 1563 | } else { 1564 | return _f(); 1565 | } 1566 | } 1567 | 1568 | function eT_() { 1569 | function _e() { 1570 | return 'eT_'; 1571 | }; 1572 | if (_e() == 'eT__') { 1573 | return _e(); 1574 | } else { 1575 | return '82'; 1576 | } 1577 | } 1578 | 1579 | function Jl_(Zy_, EK_) { 1580 | if (Zy_) { 1581 | return Zy_['' + dN_() + op_ + uP_() + yG_ + vF_()](EK_); 1582 | } else { 1583 | return ''; 1584 | } 1585 | } 1586 | 1587 | function Ef_() { 1588 | function _E() { 1589 | return 'Va'; 1590 | }; 1591 | if (_E() == 'Va,') { 1592 | return 'Ef_'; 1593 | } else { 1594 | return _E(); 1595 | } 1596 | } 1597 | 1598 | function Ec_() { 1599 | 'return Ec_'; 1600 | return '%'; 1601 | } 1602 | 1603 | function eA_() { 1604 | function _e() { 1605 | return 'e'; 1606 | }; 1607 | if (_e() == 'e') { 1608 | return 'e'; 1609 | } else { 1610 | return _e(); 1611 | } 1612 | } 1613 | 1614 | function dX_() { 1615 | function _d() { 1616 | return 'dX_'; 1617 | }; 1618 | if (_d() == 'dX__') { 1619 | return _d(); 1620 | } else { 1621 | return '137,'; 1622 | } 1623 | } 1624 | 1625 | function dQ_() { 1626 | function _d() { 1627 | return '0'; 1628 | }; 1629 | if (_d() == '0') { 1630 | return '0'; 1631 | } else { 1632 | return _d(); 1633 | } 1634 | } 1635 | 1636 | function dN_() { 1637 | function _d() { 1638 | return 'dN__'; 1639 | }; 1640 | if (_d() == 'dN__') { 1641 | return 's'; 1642 | } else { 1643 | return _d(); 1644 | } 1645 | } 1646 | 1647 | function Dg_() { 1648 | function _D() { 1649 | return 'Dg_'; 1650 | }; 1651 | if (_D() == 'Dg__') { 1652 | return _D(); 1653 | } else { 1654 | return '%B'; 1655 | } 1656 | } 1657 | 1658 | function DG_() { 1659 | function _D() { 1660 | return 'DG_'; 1661 | }; 1662 | if (_D() == 'DG__') { 1663 | return _D(); 1664 | } else { 1665 | return '%8'; 1666 | } 1667 | } 1668 | 1669 | function dF_() { 1670 | function _d() { 1671 | return 'l'; 1672 | }; 1673 | if (_d() == 'l') { 1674 | return 'l'; 1675 | } else { 1676 | return _d(); 1677 | } 1678 | } 1679 | 1680 | function cX_() { 1681 | 'return cX_'; 1682 | return '_78,5'; 1683 | } 1684 | 1685 | function cx_() { 1686 | function _c() { 1687 | return '2_195,'; 1688 | }; 1689 | if (_c() == '2_195,,') { 1690 | return 'cx_'; 1691 | } else { 1692 | return _c(); 1693 | } 1694 | } 1695 | 1696 | function Ct_() { 1697 | function _C() { 1698 | return 'Ct_'; 1699 | }; 1700 | if (_C() == 'Ct__') { 1701 | return _C(); 1702 | } else { 1703 | return '91'; 1704 | } 1705 | } 1706 | 1707 | function cN_() { 1708 | 'return cN_'; 1709 | return '_3'; 1710 | } 1711 | 1712 | function CE_() { 1713 | function _C() { 1714 | return '%B'; 1715 | }; 1716 | if (_C() == '%B,') { 1717 | return 'CE_'; 1718 | } else { 1719 | return _C(); 1720 | } 1721 | } 1722 | 1723 | function cb_() { 1724 | function _c() { 1725 | return 'cb__'; 1726 | }; 1727 | if (_c() == 'cb__') { 1728 | return 'w'; 1729 | } else { 1730 | return _c(); 1731 | } 1732 | } 1733 | 1734 | function bQ_() { 1735 | 'return bQ_'; 1736 | return '8'; 1737 | } 1738 | 1739 | function BQ_() { 1740 | function _B() { 1741 | return '6_2'; 1742 | }; 1743 | if (_B() == '6_2') { 1744 | return '6_2'; 1745 | } else { 1746 | return _B(); 1747 | } 1748 | } 1749 | 1750 | function Bk_() { 1751 | 'return Bk_'; 1752 | return '6;0_16'; 1753 | } 1754 | 1755 | function Bf_() { 1756 | function _B() { 1757 | return 'Bf__'; 1758 | }; 1759 | if (_B() == 'Bf__') { 1760 | return '%'; 1761 | } else { 1762 | return _B(); 1763 | } 1764 | } 1765 | 1766 | function be_() { 1767 | 'return be_'; 1768 | return '108;6_'; 1769 | } 1770 | 1771 | function aY_() { 1772 | 'return aY_'; 1773 | return '%A'; 1774 | } 1775 | 1776 | function AV_() { 1777 | function _A() { 1778 | return '3'; 1779 | }; 1780 | if (_A() == '3') { 1781 | return '3'; 1782 | } else { 1783 | return _A(); 1784 | } 1785 | } 1786 | 1787 | function aT_() { 1788 | 'return aT_'; 1789 | return '%'; 1790 | } 1791 | 1792 | function Al_() { 1793 | function _A() { 1794 | return 'd'; 1795 | }; 1796 | if (_A() == 'd') { 1797 | return 'd'; 1798 | } else { 1799 | return _A(); 1800 | } 1801 | } 1802 | 1803 | function aD_() { 1804 | function _a() { 1805 | return 'aD__'; 1806 | }; 1807 | if (_a() == 'aD__') { 1808 | return '24;6_'; 1809 | } else { 1810 | return _a(); 1811 | } 1812 | } 1813 | var zF_ = function() { 1814 | 'return zF_'; 1815 | return '_'; 1816 | }; 1817 | var yC_ = function(yC__) { 1818 | 'return yC_'; 1819 | return yC__; 1820 | }; 1821 | var wt_ = function(wt__) { 1822 | 'return wt_'; 1823 | return wt__; 1824 | }; 1825 | 1826 | function Df_(EK_, Zy_) { 1827 | yJ_['' + nm_() + Si_() + 'se' + BF_() + jZ_() + 'ul' + eA_()](aA_(EK_) + VX_() + '"' + Zy_ + '" }', 0); 1828 | var xF_ = jz_(aA_(EK_)); 1829 | for (x in xF_) { 1830 | try { 1831 | xF_[x].currentStyle = ''; 1832 | } catch (e) {} 1833 | } 1834 | } 1835 | var vY_ = function() { 1836 | 'return vY_'; 1837 | return '%'; 1838 | }; 1839 | var ux_ = function() { 1840 | 'return ux_'; 1841 | return '%'; 1842 | }; 1843 | var UV_ = function() { 1844 | 'return UV_'; 1845 | return 'd'; 1846 | }; 1847 | var Ul_ = function(Ul__) { 1848 | 'return Ul_'; 1849 | return Ul__; 1850 | }; 1851 | var Uh_ = function(Uh__) { 1852 | 'return Uh_'; 1853 | return Uh__; 1854 | }; 1855 | var TY_ = function(TY__) { 1856 | 'return TY_'; 1857 | return TY__; 1858 | }; 1859 | var tL_ = function() { 1860 | 'return tL_'; 1861 | return '1'; 1862 | }; 1863 | var TD_ = function() { 1864 | 'return TD_'; 1865 | return 'o'; 1866 | }; 1867 | var Tb_ = function() { 1868 | 'return Tb_'; 1869 | return '%'; 1870 | }; 1871 | var sT_ = function(sT__) { 1872 | 'return sT_'; 1873 | return sT__; 1874 | }; 1875 | 1876 | function Gj_() { 1877 | var HK_ = ''; 1878 | try { 1879 | if (HS_GetCustomStyle) { 1880 | HK_ = HS_GetCustomStyle(); 1881 | } else { 1882 | if (navigator.userAgent.indexOf('Windows NT 5') != -1) { 1883 | HK_ = 'margin-bottom:-4.8px;'; 1884 | } else { 1885 | HK_ = 'margin-bottom:-5px;'; 1886 | } 1887 | } 1888 | } catch (e) {} 1889 | return HK_; 1890 | } 1891 | var Rw_ = function(Rw__) { 1892 | 'return Rw_'; 1893 | return Rw__; 1894 | }; 1895 | var Rr_ = function(Rr__) { 1896 | 'return Rr_'; 1897 | return Rr__; 1898 | }; 1899 | var RJ_ = function() { 1900 | 'return RJ_'; 1901 | return 'E'; 1902 | }; 1903 | var qm_ = function(qm__) { 1904 | 'return qm_'; 1905 | return qm__; 1906 | }; 1907 | var qD_ = function() { 1908 | 'return qD_'; 1909 | return ';13_1'; 1910 | }; 1911 | var oR_ = function() { 1912 | 'return oR_'; 1913 | return '0'; 1914 | }; 1915 | var OD_ = function() { 1916 | 'return OD_'; 1917 | return 'E'; 1918 | }; 1919 | var nm_ = function() { 1920 | 'return nm_'; 1921 | return 'i'; 1922 | }; 1923 | var Nl_ = function(Nl__) { 1924 | 'return Nl_'; 1925 | return Nl__; 1926 | }; 1927 | var nK_ = function(nK__) { 1928 | 'return nK_'; 1929 | return nK__; 1930 | }; 1931 | var Ni_ = function(Ni__) { 1932 | 'return Ni_'; 1933 | return Ni__; 1934 | }; 1935 | var MU_ = function() { 1936 | 'return MU_'; 1937 | return '%'; 1938 | }; 1939 | var mS_ = function() { 1940 | 'return mS_'; 1941 | return '5_2'; 1942 | }; 1943 | var mf_ = function(mf__) { 1944 | 'return mf_'; 1945 | return mf__; 1946 | }; 1947 | var me_ = function() { 1948 | 'return me_'; 1949 | return '9'; 1950 | }; 1951 | var lV_ = function(lV__) { 1952 | 'return lV_'; 1953 | return lV__; 1954 | }; 1955 | var lq_ = function() { 1956 | 'return lq_'; 1957 | return ',6_'; 1958 | }; 1959 | var kP_ = function(kP__) { 1960 | 'return kP_'; 1961 | return kP__; 1962 | }; 1963 | var Kp_ = function() { 1964 | 'return Kp_'; 1965 | return '%'; 1966 | }; 1967 | var Kh_ = function(Kh__) { 1968 | 'return Kh_'; 1969 | return Kh__; 1970 | }; 1971 | var Ke_ = function() { 1972 | 'return Ke_'; 1973 | return 't'; 1974 | }; 1975 | var KD_ = function(KD__) { 1976 | 'return KD_'; 1977 | return KD__; 1978 | }; 1979 | var JZ_ = function(JZ__) { 1980 | 'return JZ_'; 1981 | return JZ__; 1982 | }; 1983 | var jU_ = function() { 1984 | 'return jU_'; 1985 | return ','; 1986 | }; 1987 | var jL_ = function() { 1988 | 'return jL_'; 1989 | return ';22'; 1990 | }; 1991 | var JL_ = function() { 1992 | 'return JL_'; 1993 | return '%'; 1994 | }; 1995 | var JK_ = function(JK__) { 1996 | 'return JK_'; 1997 | return JK__; 1998 | }; 1999 | var Iv_ = function() { 2000 | 'return Iv_'; 2001 | return '342;1'; 2002 | }; 2003 | var iu_ = function() { 2004 | 'return iu_'; 2005 | return 'E'; 2006 | }; 2007 | var IK_ = function(IK__) { 2008 | 'return IK_'; 2009 | return IK__; 2010 | }; 2011 | var hV_ = function() { 2012 | 'return hV_'; 2013 | return '4'; 2014 | }; 2015 | var hT_ = function() { 2016 | 'return hT_'; 2017 | return '8'; 2018 | }; 2019 | var Gw_ = function() { 2020 | 'return Gw_'; 2021 | return 'd'; 2022 | }; 2023 | var gj_ = function() { 2024 | 'return gj_'; 2025 | return 'p'; 2026 | }; 2027 | var Ge_ = function(Ge__) { 2028 | 'return Ge_'; 2029 | return Ge__; 2030 | }; 2031 | var Gd_ = function(Gd__) { 2032 | 'return Gd_'; 2033 | return Gd__; 2034 | }; 2035 | 2036 | function PP_() { 2037 | if (yJ_ !== undefined && yJ_['' + nm_() + Si_() + 'se' + BF_() + jZ_() + 'ul' + eA_()]) { 2038 | return true; 2039 | } else { 2040 | return false; 2041 | } 2042 | } 2043 | var fV_ = function() { 2044 | 'return fV_'; 2045 | return '%'; 2046 | }; 2047 | var Fh_ = function() { 2048 | 'return Fh_'; 2049 | return 'l'; 2050 | }; 2051 | var FC_ = function(FC__) { 2052 | 'return FC_'; 2053 | return FC__; 2054 | }; 2055 | var Ei_ = function() { 2056 | 'return Ei_'; 2057 | return ';'; 2058 | }; 2059 | var dY_ = function() { 2060 | 'return dY_'; 2061 | return 'o'; 2062 | }; 2063 | var dP_ = function(dP__) { 2064 | 'return dP_'; 2065 | return dP__; 2066 | }; 2067 | var cz_ = function() { 2068 | 'return cz_'; 2069 | return '5_3'; 2070 | }; 2071 | var cT_ = function(cT__) { 2072 | 'return cT_'; 2073 | return cT__; 2074 | }; 2075 | var cs_ = function() { 2076 | 'return cs_'; 2077 | return ';'; 2078 | }; 2079 | var cI_ = function() { 2080 | 'return cI_'; 2081 | return ','; 2082 | }; 2083 | var bs_ = function(bs__) { 2084 | 'return bs_'; 2085 | return bs__; 2086 | }; 2087 | var BP_ = function(BP__) { 2088 | 'return BP_'; 2089 | return BP__; 2090 | }; 2091 | var BJ_ = function(BJ__) { 2092 | 'return BJ_'; 2093 | return BJ__; 2094 | }; 2095 | var bg_ = function(bg__) { 2096 | 'return bg_'; 2097 | return bg__; 2098 | }; 2099 | var BF_ = function() { 2100 | 'return BF_'; 2101 | return 'r'; 2102 | }; 2103 | var az_ = function() { 2104 | 'return az_'; 2105 | return 'F'; 2106 | }; 2107 | var Ap_ = function() { 2108 | 'return Ap_'; 2109 | return '%'; 2110 | }; 2111 | var ak_ = function(ak__) { 2112 | 'return ak_'; 2113 | return ak__; 2114 | }; 2115 | 2116 | function ba_() { 2117 | if (window.hs_fuckyou == undefined) { 2118 | window.hs_fuckyou = PB_()['' + (function() { 2119 | 'return uJ_'; 2120 | return 'g' 2121 | })() + PA_() + bs_('Co') + gv_() + (function(Pe__) { 2122 | 'return Pe_'; 2123 | return Pe__; 2124 | })('pu') + pw_ + GH_() + hB_() + OU_() + Fh_() + qC_()]; 2125 | } 2126 | if (Ah_()) { 2127 | if (window.hs_fuckyou_dd == undefined) { 2128 | window.hs_fuckyou_dd = Ah_()['' + (function() { 2129 | 'return uJ_'; 2130 | return 'g' 2131 | })() + PA_() + bs_('Co') + gv_() + (function(Pe__) { 2132 | 'return Pe_'; 2133 | return Pe__; 2134 | })('pu') + pw_ + GH_() + hB_() + OU_() + Fh_() + qC_()]; 2135 | } 2136 | } 2137 | } 2138 | 2139 | function do_() { 2140 | return ''; 2141 | } 2142 | 2143 | function Ym_(Zy_) { 2144 | return LC_['' + 'ch' + HC_() + (function() { 2145 | 'return js_'; 2146 | return 'r' 2147 | })() + sI_()](parseInt(Zy_)); 2148 | } 2149 | var it_ = ''; 2150 | 2151 | function jz_(Zy_) { 2152 | return document.querySelectorAll(Zy_); 2153 | } 2154 | var cE_ = Xw_('Qn_'); 2155 | 2156 | function IH_() { 2157 | 'return IH_'; 2158 | return '3'; 2159 | } 2160 | 2161 | function ws_() { 2162 | 'return ws_'; 2163 | return '_3'; 2164 | } 2165 | var aC_ = function(aC__) { 2166 | 'return aC_'; 2167 | return aC__; 2168 | }; 2169 | 2170 | function bx_() { 2171 | function _b() { 2172 | return 'bx__'; 2173 | }; 2174 | if (_b() == 'bx__') { 2175 | return '0'; 2176 | } else { 2177 | return _b(); 2178 | } 2179 | } 2180 | 2181 | function Zu_() { 2182 | function _Z() { 2183 | return 'Zu__'; 2184 | }; 2185 | if (_Z() == 'Zu__') { 2186 | return '8'; 2187 | } else { 2188 | return _Z(); 2189 | } 2190 | } 2191 | var Qh_ = function() { 2192 | 'return Qh_'; 2193 | return ';'; 2194 | }; 2195 | 2196 | function zX_() { 2197 | function _z() { 2198 | return '09'; 2199 | }; 2200 | if (_z() == '09,') { 2201 | return 'zX_'; 2202 | } else { 2203 | return _z(); 2204 | } 2205 | } 2206 | var wk_ = '3'; 2207 | var NX_ = function(NX__) { 2208 | 'return NX_'; 2209 | return NX__; 2210 | }; 2211 | var ZA_ = function(ZA__) { 2212 | 'return ZA_'; 2213 | return ZA__; 2214 | }; 2215 | })(document); 2216 | -------------------------------------------------------------------------------- /autohome.py: -------------------------------------------------------------------------------- 1 | #coding:utf8 2 | import re 3 | import string 4 | import urllib 5 | import requests 6 | import traceback 7 | from collections import defaultdict 8 | 9 | def get_char(js, replace_count): 10 | all_var = {} 11 | # 判断混淆 无参数 返回常量 函数 12 | if_else_no_args_return_constant_function_functions = [] 13 | """ 14 | function zX_() { 15 | function _z() { 16 | return '09'; 17 | }; 18 | if (_z() == '09,') { 19 | return 'zX_'; 20 | } else { 21 | return _z(); 22 | } 23 | } 24 | """ 25 | constant_function_regex4 = re.compile(""" 26 | function\s+\w+\(\)\s*\{\s* 27 | function\s+\w+\(\)\s*\{\s* 28 | return\s+[\'\"][^\'\"]+[\'\"];\s* 29 | \};\s* 30 | if\s*\(\w+\(\)\s*==\s*[\'\"][^\'\"]+[\'\"]\)\s*\{\s* 31 | return\s*[\'\"][^\'\"]+[\'\"];\s* 32 | \}\s*else\s*\{\s* 33 | return\s*\w+\(\);\s* 34 | \}\s* 35 | \} 36 | """, 37 | re.X) 38 | l = constant_function_regex4.findall(js) 39 | for i in l: 40 | function_name = re.search(""" 41 | function\s+(\w+)\(\)\s*\{\s* 42 | function\s+\w+\(\)\s*\{\s* 43 | return\s+[\'\"]([^\'\"]+)[\'\"];\s* 44 | \};\s* 45 | if\s*\(\w+\(\)\s*==\s*[\'\"]([^\'\"]+)[\'\"]\)\s*\{\s* 46 | return\s*[\'\"]([^\'\"]+)[\'\"];\s* 47 | \}\s*else\s*\{\s* 48 | return\s*\w+\(\);\s* 49 | \}\s* 50 | \} 51 | """, i, 52 | re.X) 53 | if_else_no_args_return_constant_function_functions.append(function_name.groups()) 54 | js = js.replace(i, "") 55 | # 替换全文 56 | a,b,c,d = function_name.groups() 57 | all_var["%s()"%a] = d if b == c else b 58 | 59 | 60 | # 判断混淆 无参数 返回函数 常量 61 | if_else_no_args_return_function_constant_functions = [] 62 | """ 63 | function wu_() { 64 | function _w() { 65 | return 'wu_'; 66 | }; 67 | if (_w() == 'wu__') { 68 | return _w(); 69 | } else { 70 | return '5%'; 71 | } 72 | } 73 | """ 74 | constant_function_regex5 = re.compile(""" 75 | function\s+\w+\(\)\s*\{\s* 76 | function\s+\w+\(\)\s*\{\s* 77 | return\s+[\'\"][^\'\"]+[\'\"];\s* 78 | \};\s* 79 | if\s*\(\w+\(\)\s*==\s*[\'\"][^\'\"]+[\'\"]\)\s*\{\s* 80 | return\s*\w+\(\);\s* 81 | \}\s*else\s*\{\s* 82 | return\s*[\'\"][^\'\"]+[\'\"];\s* 83 | \}\s* 84 | \} 85 | """, 86 | re.X) 87 | l = constant_function_regex5.findall(js) 88 | for i in l: 89 | function_name = re.search(""" 90 | function\s+(\w+)\(\)\s*\{\s* 91 | function\s+\w+\(\)\s*\{\s* 92 | return\s+[\'\"]([^\'\"]+)[\'\"];\s* 93 | \};\s* 94 | if\s*\(\w+\(\)\s*==\s*[\'\"]([^\'\"]+)[\'\"]\)\s*\{\s* 95 | return\s*\w+\(\);\s* 96 | \}\s*else\s*\{\s* 97 | return\s*[\'\"]([^\'\"]+)[\'\"];\s* 98 | \}\s* 99 | \} 100 | """, i, 101 | re.X) 102 | if_else_no_args_return_function_constant_functions.append(function_name.groups()) 103 | js = js.replace(i, "") 104 | # 替换全文 105 | a,b,c,d = function_name.groups() 106 | all_var["%s()"%a] = b if b == c else d 107 | 108 | 109 | # var 参数等于返回值函数 110 | var_args_equal_value_functions = [] 111 | """ 112 | var ZA_ = function(ZA__) { 113 | 'return ZA_'; 114 | return ZA__; 115 | }; 116 | """ 117 | constant_function_regex1 = re.compile("var\s+[^=]+=\s*function\(\w+\)\{\s*[\'\"]return\s*\w+\s*[\'\"];\s*return\s+\w+;\s*\};") 118 | l = constant_function_regex1.findall(js) 119 | for i in l: 120 | function_name = re.search("var\s+([^=]+)", i).group(1) 121 | var_args_equal_value_functions.append(function_name) 122 | js = js.replace(i, "") 123 | # 替换全文 124 | a = function_name 125 | js = re.sub("%s\(([^\)]+)\)"%a, r"\1", js) 126 | 127 | # var 无参数 返回常量 函数 128 | var_no_args_return_constant_functions = [] 129 | """ 130 | var Qh_ = function() { 131 | 'return Qh_'; 132 | return ';'; 133 | }; 134 | """ 135 | constant_function_regex2 = re.compile(""" 136 | var\s+[^=]+=\s*function\(\)\{\s* 137 | [\'\"]return\s*\w+\s*[\'\"];\s* 138 | return\s+[\'\"][^\'\"]+[\'\"];\s* 139 | \}; 140 | """, 141 | re.X) 142 | l = constant_function_regex2.findall(js) 143 | for i in l: 144 | function_name = re.search(""" 145 | var\s+([^=]+)=\s*function\(\)\{\s* 146 | [\'\"]return\s*\w+\s*[\'\"];\s* 147 | return\s+[\'\"]([^\'\"]+)[\'\"];\s* 148 | \}; 149 | """, 150 | i, 151 | re.X) 152 | var_no_args_return_constant_functions.append(function_name.groups()) 153 | js = js.replace(i, "") 154 | # 替换全文 155 | a,b = function_name.groups() 156 | all_var["%s()"%a] = b 157 | 158 | # 无参数 返回常量 函数 159 | no_args_return_constant_functions = [] 160 | """ 161 | function ZP_() { 162 | 'return ZP_'; 163 | return 'E'; 164 | } 165 | """ 166 | constant_function_regex3 = re.compile(""" 167 | function\s*\w+\(\)\s*\{\s* 168 | [\'\"]return\s*[^\'\"]+[\'\"];\s* 169 | return\s*[\'\"][^\'\"]+[\'\"];\s* 170 | \}\s* 171 | """, 172 | re.X) 173 | l = constant_function_regex3.findall(js) 174 | for i in l: 175 | function_name = re.search(""" 176 | function\s*(\w+)\(\)\s*\{\s* 177 | [\'\"]return\s*[^\'\"]+[\'\"];\s* 178 | return\s*[\'\"]([^\'\"]+)[\'\"];\s* 179 | \}\s* 180 | """, 181 | i, 182 | re.X) 183 | no_args_return_constant_functions.append(function_name.groups()) 184 | js = js.replace(i, "") 185 | # 替换全文 186 | a,b = function_name.groups() 187 | all_var["%s()"%a] = b 188 | 189 | 190 | # 无参数 返回常量 函数 中间无混淆代码 191 | no_args_return_constant_sample_functions = [] 192 | """ 193 | function do_() { 194 | return ''; 195 | } 196 | """ 197 | constant_function_regex3 = re.compile(""" 198 | function\s*\w+\(\)\s*\{\s* 199 | return\s*[\'\"][^\'\"]*[\'\"];\s* 200 | \}\s* 201 | """, 202 | re.X) 203 | l = constant_function_regex3.findall(js) 204 | for i in l: 205 | function_name = re.search(""" 206 | function\s*(\w+)\(\)\s*\{\s* 207 | return\s*[\'\"]([^\'\"]*)[\'\"];\s* 208 | \}\s* 209 | """, 210 | i, 211 | re.X) 212 | no_args_return_constant_sample_functions.append(function_name.groups()) 213 | js = js.replace(i, "") 214 | # 替换全文 215 | a,b = function_name.groups() 216 | all_var["%s()"%a] = b 217 | 218 | # 字符串拼接时使无参常量函数 219 | """ 220 | (function() { 221 | 'return sZ_'; 222 | return '1' 223 | })() 224 | """ 225 | constant_function_regex6 = re.compile(""" 226 | \(function\(\)\s*\{\s* 227 | [\'\"]return[^\'\"]+[\'\"];\s* 228 | return\s*[\'\"][^\'\"]*[\'\"];? 229 | \}\)\(\) 230 | """, 231 | re.X) 232 | l = constant_function_regex6.findall(js) 233 | for i in l: 234 | function_name = re.search(""" 235 | \(function\(\)\s*\{\s* 236 | [\'\"]return[^\'\"]+[\'\"];\s* 237 | return\s*([\'\"][^\'\"]*[\'\"]);? 238 | \}\)\(\) 239 | """, 240 | i, 241 | re.X) 242 | js = js.replace(i, function_name.group(1)) 243 | 244 | # 字符串拼接时使用返回参数的函数 245 | """ 246 | (function(iU__) { 247 | 'return iU_'; 248 | return iU__; 249 | })('9F') 250 | """ 251 | constant_function_regex6 = re.compile(""" 252 | \(function\(\w+\)\s*\{\s* 253 | [\'\"]return[^\'\"]+[\'\"];\s* 254 | return\s*\w+; 255 | \}\)\([\'\"][^\'\"]*[\'\"]\) 256 | """, 257 | re.X) 258 | 259 | l = constant_function_regex6.findall(js) 260 | for i in l: 261 | function_name = re.search(""" 262 | \(function\(\w+\)\s*\{\s* 263 | [\'\"]return[^\'\"]+[\'\"];\s* 264 | return\s*\w+; 265 | \}\)\(([\'\"][^\'\"]*[\'\"])\) 266 | """, 267 | i, 268 | re.X) 269 | js = js.replace(i, function_name.group(1)) 270 | 271 | # 获取所有变量 272 | var_regex = "var\s+(\w+)\s*=\s*([\'\"].*?[\'\"]);\s" 273 | 274 | for var_name, var_value in re.findall(var_regex, js): 275 | var_value = re.sub("\s", "", var_value).strip("\'\" ") 276 | if "(" in var_value: 277 | var_value = ";" 278 | all_var[var_name] = var_value 279 | 280 | # 注释掉 此正则可能会把关键js语句删除掉 281 | #js = re.sub(var_regex, "", js) 282 | 283 | for var_name, var_value in all_var.items(): 284 | js = js.replace(var_name, var_value) 285 | 286 | js = re.sub("[\s+']", "", js) 287 | 288 | # 寻找%E4%B8%AD%E5%80%92%E 密集区域 289 | #string_region = re.findall("((?:%\w\w)+)", js) 290 | string_region = re.findall("((?:%\w\w|[A-Za-z\d])+)", js) 291 | # 去重 292 | string_region = set(string_region) 293 | # 判断是否存在汉字 294 | chinese_flag = 0 295 | for string_ in string_region: 296 | if re.search("%\w\w", string_): 297 | chinese_flag = 1 298 | if not chinese_flag: 299 | # 可能混淆字符为纯英文 。。。尚未解决 300 | return [] 301 | string_str = "" 302 | for string_ in string_region: 303 | if not re.search("%\w\w", string_): 304 | continue 305 | # 过滤 306 | utf8_string = urllib.unquote(string_) 307 | if not utf8_string.isalpha(): 308 | # 去掉可能匹配到的多余字符 \w+ 建立在混淆字符串是排好序的 字母在汉字前 309 | utf8_string = utf8_string.rstrip(string.letters + string.digits + "_") 310 | try: 311 | unicode_string = utf8_string.decode("utf8") 312 | except: 313 | continue 314 | if len(unicode_string) < replace_count: 315 | continue 316 | if len(string_) > len(string_str): 317 | string_str = string_ 318 | 319 | utf8_string = urllib.unquote(string_str) 320 | if not utf8_string.isalpha(): 321 | # 去掉可能匹配到的多余字符 \w+ 建立在混淆字符串是排好序的 字母在汉字前 322 | utf8_string = utf8_string.rstrip(string.letters + string.digits + "_") 323 | 324 | unicode_string = utf8_string.decode("utf8") 325 | 326 | # 当只有一个替换字符时 下面正则寻找失败 此时也不用寻找了 327 | if len(unicode_string) == 1: 328 | return [unicode_string] 329 | 330 | # 从 字符串密集区域后面开始寻找索引区域 331 | index_m = re.search("([\d,]+(;[\d,]+)+)", js[js.find(string_str) + len(string_str):]) 332 | 333 | string_list = list(unicode_string) 334 | index_list = index_m.group(1).split(";") 335 | 336 | _word_list = [] 337 | for word_index_list in index_list: 338 | _word = "" 339 | if "," in word_index_list: 340 | word_index_list = word_index_list.split(",") 341 | word_index_list = [int(x) for x in word_index_list] 342 | else: 343 | word_index_list = [int(word_index_list)] 344 | for word_index in word_index_list: 345 | _word += string_list[word_index] 346 | _word_list.append(_word) 347 | return _word_list 348 | 349 | def get_complete_text_autohome(text): 350 | _types_info = defaultdict(list) 351 | types = re.findall('hs_kw(\d+_[^\'\"]+)', text) 352 | for item in types: 353 | idx, type = item.split("_") 354 | _types_info[type].append(idx) 355 | # 获取混淆字符个数 356 | types = {type: len(set(value)) for type, value in _types_info.items()} 357 | 358 | js_list = re.findall("", text.encode("utf8")) 359 | type_charlist = {} 360 | for js in js_list: 361 | for _type in types: 362 | if _type in js: 363 | break 364 | else: 365 | continue 366 | if not js: 367 | continue 368 | try: 369 | char_list = get_char(js, types[_type]) 370 | except Exception as e: 371 | traceback.print_exc() 372 | continue 373 | type_charlist.update({_type: char_list}) 374 | 375 | def char_replace(m): 376 | index = int(m.group(1)) 377 | typ = m.group(2) 378 | char_list = type_charlist.get(typ, []) 379 | if not char_list: 380 | return m.group() 381 | char = char_list[index] 382 | return char 383 | text = re.sub("", char_replace, text) 384 | return text 385 | 386 | debug_flag = 1 387 | 388 | if 0 or debug_flag: 389 | # 论坛 390 | url = "http://club.autohome.com.cn/bbs/thread-c-3788-62403429-1.html" 391 | url = "http://club.autohome.com.cn/bbs/thread-c-2561-64686945-1.html" 392 | headers = {"User-Agent": "Mozilla/6.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"} 393 | resp = requests.get(url, headers=headers) 394 | text = resp.content.decode("gbk") 395 | text = get_complete_text_autohome(text) 396 | data = re.search("([\s\S]+?)", text).group(1) 397 | if debug_flag: 398 | if "hs_kw" not in data: 399 | print("%s ok !!" % url) 400 | 401 | if 0 or debug_flag: 402 | # 口碑 403 | url = "http://k.autohome.com.cn/spec/27507/view_1524661_1.html?st=2&piap=1|27507|0|0|1|0|0|0|0|0|1" 404 | headers = {"User-Agent": "Mozilla/6.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"} 405 | resp = requests.get(url, headers=headers) 406 | text = resp.content.decode("gbk") 407 | text = get_complete_text_autohome(text) 408 | text = re.sub("]+?>[\s\S]+?", "", text) 409 | text = re.sub("]?>[\s\S]+?", "", text) 410 | data = re.search("]*>([\s\S]+?)", text).group(1) 411 | if debug_flag: 412 | if "hs_kw" not in data: 413 | print("%s ok !!" % url) 414 | 415 | 416 | if 0 or debug_flag: 417 | # 参数配置 418 | url = "http://car.autohome.com.cn/config/spec/1001360.html" 419 | url = "http://car.autohome.com.cn/config/spec/1646.html" # 混淆字符存在英文 420 | headers = {"User-Agent": "Mozilla/6.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"} 421 | resp = requests.get(url, headers=headers) 422 | text = resp.content.decode("gbk") 423 | text = get_complete_text_autohome(text) 424 | data = re.search('var config = (.*?);\r', text, re.DOTALL).group(1) 425 | if debug_flag: 426 | if "hs_kw" not in data: 427 | print("%s ok !!" % url) 428 | -------------------------------------------------------------------------------- /changde.py: -------------------------------------------------------------------------------- 1 | #coding:utf8 2 | import re 3 | import requests 4 | 5 | def everySystem(number, system): 6 | ''' 7 | 实现数字向任意进制的转换 8 | base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 9 | ''' 10 | base = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 11 | base = base[:system] 12 | chars = [] 13 | while 1: 14 | number, mod = divmod(number, system) 15 | if number < system: 16 | chars.append(base[mod]) 17 | chars.append(base[number]) 18 | break 19 | else: 20 | chars.append(base[mod]) 21 | chars.reverse() 22 | chars = [str(x) for x in chars] 23 | return "".join(chars) 24 | 25 | def packed(p, a, c, k, e, d): 26 | def e(c): 27 | c_1 = '' 28 | if c >= a: 29 | c_1 = e(int(c / a)) 30 | c = c % a 31 | c_2 = chr(c+32) if c > 32 else everySystem(c, 33) 32 | return c_1.lstrip('0') + c_2.lstrip('0') 33 | 34 | k += [0] * 1000 35 | while c > 0: 36 | d[e(c)] = k[c] or e(c) 37 | c -= 1 38 | def kk(e): 39 | return d.get(e.group(), "") 40 | p = re.sub("\\b\\w+\\b", kk, p) 41 | return p 42 | 43 | #wzwschallenge="RANDOMSTR9819"; 44 | #wzwschallengex="STRRANDOM9819"; 45 | #template=3; 46 | #encoderchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 47 | 48 | def KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU(s, encoderchars): 49 | le = len(s) 50 | i = 0 51 | out = '' 52 | while i < le: 53 | c1 = ord(s[i]) & 0xff 54 | i += 1 55 | if i == le: 56 | out += encoderchars[c1 >> 2] 57 | out += encoderchars[(c1 & 0x3) << 4] 58 | out += "==" 59 | break 60 | c2 = ord(s[i]) 61 | i += 1 62 | if i == le: 63 | out += encoderchars[c1>>2] 64 | out += encoderchars[((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)] 65 | out += encoderchars[(c2 & 0xf) << 2] 66 | out += "=" 67 | break 68 | c3 = ord(s[i]) 69 | i += 1 70 | out += encoderchars[c1 >> 2] 71 | out += encoderchars[((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4)] 72 | out += encoderchars[((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6)] 73 | out += encoderchars[c3 & 0x3f] 74 | return out 75 | 76 | def QWERTASDFGXYSF(wzwschallenge, wzwschallengex, hc, CONFIRM_PREFIX): 77 | tmp = wzwschallenge + wzwschallengex 78 | hash = 0 79 | for i in range(len(tmp)): 80 | hash += ord(tmp[i]) 81 | hash *= hc 82 | hash += 111111 83 | return CONFIRM_PREFIX + str(hash) 84 | 85 | def HXXTTKKLLPPP5(wzwschallenge, wzwschallengex, template, encoderchars, hc, CONFIRM_PREFIX): 86 | cookieString = "" 87 | cookieString += "wzwstemplate=" + KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU(str(template), encoderchars) + ";"; 88 | confirm = QWERTASDFGXYSF(wzwschallenge, wzwschallengex, hc, CONFIRM_PREFIX) 89 | cookieString += "wzwschallenge=" + KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU(str(confirm), encoderchars) + ";"; 90 | return cookieString 91 | 92 | 93 | def parse_script(text): 94 | m = re.search("p\}\(\'(?P

[^\']+)\',(?P\d+),(?P\d+),\'(?P[^\']+)\'\.split\(\'\|'\)", text) 95 | if not m: 96 | print u"解析js失败" 97 | return "" 98 | p = m.group('p') 99 | a = int(m.group('a')) 100 | c = int(m.group('c')) 101 | k = m.group('k').split('|') 102 | e = 0 103 | d = {} 104 | eval_p = packed(p,a,c,k,e,d) 105 | #eval_p = 'var dynamicurl="/";var wzwschallenge="RANDOMSTR2556";var wzwschallengex="STRRANDOM2556";var template=8;var encoderchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU() {var out, i, len;var c1, c2, c3;len = .length;i = ;out = "";while (i < len) {c1 = .charCodeAt(i++) & 0xff;if (i == len) {out += encoderchars.charAt(c1 >> 2);out += encoderchars.charAt((c1 & 0x3) << 4);out += "==";break;}c2 = .charCodeAt(i++);if (i == len) {out += encoderchars.charAt(c1 >> 2);out += encoderchars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));out += encoderchars.charAt((c2 & 0xf) << 2);out += "=";break;}c3 = .charCodeAt(i++);out += encoderchars.charAt(c1 >> 2);out += encoderchars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xf0) >> 4));out += encoderchars.charAt(((c2 & 0xf) << 2) | ((c3 & 0xc0) >> 6));out += encoderchars.charAt(c3 & 0x3f);}return out;}function findDimensions(){var w= window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;var h= window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;if (w*h <= 120000) {return true;}var x = window.screenX;var y = window.screenY;if (x + w <= || y + h <= || x >= window.screen.width || y >= window.screen.height) {return true;}return false;}function QWERTASDFGXYSF(){var tmp = wzwschallenge+wzwschallengex;var hash = ;var i = ;for(i = ; i < tmp.length; i++) {hash += tmp.charCodeAt(i);}hash *= 23;hash += 111111;return "WZWS_CONFIRM_PREFIX_LABEL8"+hash;}function HXXTTKKLLPPP5(){if(findDimensions()) {} else {var cookieString = ""; cookieString = "wzwstemplate="+KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU(template.toString()) + "; path=/";document.cookie = cookieString; var confirm = QWERTASDFGXYSF();cookieString = "wzwschallenge="+KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU(confirm.toString()) + "; path=/";document.cookie = cookieString; window.location=dynamicurl;}}HXXTTKKLLPPP5();' 106 | #print eval_p 107 | wzwschallenge = re.search("wzwschallenge=[\'\"]([^\'\"]+)", eval_p).group(1) 108 | wzwschallengex = re.search("wzwschallengex=[\'\"]([^\'\"]+)", eval_p).group(1) 109 | template = re.search("=(\d+);var encoderchar", eval_p).group(1) 110 | encoderchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 111 | hc = int(re.search("hash \*= (\d+)", eval_p).group(1)) 112 | CONFIRM_PREFIX = re.search("(WZWS_CONFIRM_PREFIX_LABEL\d+)", eval_p).group(1) 113 | #print wzwschallenge, wzwschallengex, template, encoderchars, hc, CONFIRM_PREFIX 114 | 115 | cookie = HXXTTKKLLPPP5(wzwschallenge, wzwschallengex, template, encoderchars, hc, CONFIRM_PREFIX) 116 | return cookie 117 | 118 | def main(): 119 | url = 'http://bbs.changde.gov.cn/' 120 | resp = requests.get(url) 121 | text = resp.text 122 | print text 123 | cookie = parse_script(text) 124 | cookie += "wzwsconfirm=%s;"%resp.cookies.get("wzwsconfirm") 125 | #print cookie 126 | resp = requests.get(url, headers={"Cookie":cookie}) 127 | print resp.text 128 | #print resp.cookies 129 | #print resp.headers 130 | #"V1pXU19DT05GSVJNX1BSRUZJWF9MQUJFTDUxMzYwNDU=" 131 | return 132 | 133 | 134 | if __name__ == "__main__": 135 | p = '''15 D="k";15 1a="i";15 1b="l";15 11=d;15 F = "e+/=";J g(10) {15 U, N, R;15 o, p, q;R = 10.S;N = 0;U = "";17 (N < R) {o = 10.s(N++) & 6;O (N == R) {U += F.r(o >> a);U += F.r((o & 1) << b);U += "==";n;}p = 10.s(N++);O (N == R) {U += F.r(o >> a);U += F.r(((o & 1) << b) | ((p & 5) >> b));U += F.r((p & 4) << a);U += "=";n;}q = 10.s(N++);U += F.r(o >> a);U += F.r(((o & 1) << b) | ((p &5) >> b));U += F.r(((p & 4) << a) | ((q & 3) >> c));U += F.r(q & 2);}W U;}J H(){15 16= 19.Q||B.C.u||B.m.u;15 K= 19.P||B.C.t||B.m.t;O (16*K <= 8) {W 14;}15 1d = 19.Y;15 1e = 19.Z;O (1d + 16 <= 0 || 1e+ K <= 0 || 1d >= 19.X.18 || 1e >= 19.X.M) {W 14;}W G;}J h(){15 12 = 1a+1b;15 L = 0;15 N = 0;I(N= 0; N < 12.S; N++) {L += 12.s(N);}L *= 9;L += 7;W "j"+L;}J f(){O(H()) {} E {15 A = ""; A = "1c="+g(11.13()) + "; V=/";B.w = A; 15 v = h();A = "1a="+g(v.13()) + "; V=/";B.w = A; 19.T=D;}}f();''' 136 | a = 59 137 | c = 74 138 | k = '''0|0x3|0x3f|0xc0|0xf|0xf0|0xff|111111|120000|19|2|4|6|7|ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789|HXXTTKKLLPPP5|KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU|QWERTASDFGXYSF|RANDOMSTR870|WZWS_CONFIRM_PREFIX_LABEL7|/|STRRANDOM870|body|break|c1|c2|c3|charAt|charCodeAt|clientHeight|clientWidth|confirm|cookie|cookieString|document|documentElement|dynamicurl|else|encoderchars|false|findDimensions|for|function|h|hash|height|i|if|innerHeight|innerWidth|len|length|location|out|path|return|screen|screenX|screenY|str|template|tmp|toString|true|var|w|while|width|window|wzwschallenge|wzwschallengex|wzwstemplate|x|y'''.split('|') 139 | e = 0 140 | d = {} 141 | #print packed(p,a,c,k,e,d) 142 | #print KTKY2RBD9NHPBCIHV9ZMEQQDARSLVFDU('3') 143 | #print HXXTTKKLLPPP5() 144 | main() 145 | #print QWERTASDFGXYSF("RANDOMSTR6093", "STRRANDOM6093", 29) 146 | -------------------------------------------------------------------------------- /get_dsign.py: -------------------------------------------------------------------------------- 1 | #coding:utf8 2 | import re 3 | def get_dsign(js): 4 | #去标签 5 | js = re.sub('<[^>]+>', '', js) 6 | #去getName 7 | js = js.replace("function getName(){var caller=getName.caller;if(caller.name){return caller.name} var str=caller.toString().replace(/[\s]*/g,\"\");var name=str.match(/^function([^\(]+?)\(/);if(name && name[1]){return name[1];} else {return '';}}", "") 8 | #处理常量函数 9 | constant_function_regex1 = re.compile("\(function\(\)\{'return [^\']+';return '[^\']+'\}\)\(\)") 10 | l = constant_function_regex1.findall(js) 11 | for i in l: 12 | js = js.replace(i, "'%s'"%(re.search("'return [^\']+';return '([^\']+)'", i).group(1))) 13 | # 14 | constant_function_regex2 = re.compile("function \w+\(\)\{'[^\']+';function [^\']+\(\)\{return '[^\']+'\}; return \w+\(\);\}") 15 | l = constant_function_regex2.findall(js) 16 | for i in l: 17 | a = re.search("function (\w+)\(\)\{'[^\']+';function [^\']+\(\)\{return '([^\']+)'\}; return \w+\(\);\}", i) 18 | js = js.replace(i, "%s='%s';"%(a.group(1), a.group(2))) 19 | # 20 | constant_function_regex3 = re.compile("\w+=function\(\)\{'return \w+';return '[^\']+';\};") 21 | l = constant_function_regex3.findall(js) 22 | for i in l: 23 | a = re.search("(\w+)=function\(\)\{'return \w+';return '([^\']+)';\};", i) 24 | js = js.replace(i, "%s='%s';"%(a.group(1), a.group(2))) 25 | # 26 | constant_function_regex4 = re.compile("\w+=function\(\)\{'\w+';var \w+=function\(\)\{return '[^\']+'\}; return \w+\(\);\};") 27 | l = constant_function_regex4.findall(js) 28 | for i in l: 29 | a = re.search("(\w+)=function\(\)\{'\w+';var \w+=function\(\)\{return '([^\']+)'\}; return \w+\(\);\};", i) 30 | js = js.replace(i, "%s='%s';"%(a.group(1), a.group(2))) 31 | # 32 | constant_function_regex5 = re.compile("((?:function \w+\(\w+\)\{)+function \w+\(\)\{return getName\(\);\}.*?return.*?return.*?\})") 33 | l = constant_function_regex5.findall(js) 34 | for i in l: 35 | a = re.search("^function (\w+)\(\w+\)", i) 36 | b = re.search("function (\w+)\(\)\{return getName", i) 37 | js = js.replace(i, "%s='%s';"%(a.group(1), b.group(1))) 38 | # 39 | constant_function_regex6 = re.compile("\(function\([^\)]+\)\{'return [^\']+';return [^\}]+\}\)\('[^\']+'\)") 40 | l = constant_function_regex6.findall(js) 41 | for i in l: 42 | a = re.search("\(function\([^\)]+\)\{'return [^\']+';return [^\}]+\}\)\('([^\']+)'\)", i) 43 | js = js.replace(i, "'%s'"%(a.group(1))) 44 | # 45 | constant_function_regex6 = re.compile("\(function\(\w+\)\{return \(function\(\w+\)\{return \w+;\}\)\(\w+\);\}\)\('[^\']+'\)") 46 | l = constant_function_regex6.findall(js) 47 | for i in l: 48 | a = re.search("\(function\(\w+\)\{return \(function\(\w+\)\{return \w+;\}\)\(\w+\);\}\)\('([^\']+)'\)", i) 49 | js = js.replace(i, "'%s'"%(a.group(1))) 50 | # 51 | constant_function_regex7 = re.compile("\(function\(\)\{'return [^\']+';return \(function\(\)\{return '[^\']+';\}\)\(\);\}\)\(\)") 52 | l = constant_function_regex7.findall(js) 53 | for i in l: 54 | a = re.search("\(function\(\)\{'return [^\']+';return \(function\(\)\{return '([^\']+)';\}\)\(\);\}\)\(\)", i) 55 | js = js.replace(i, "'%s'"%(a.group(1))) 56 | # 57 | constant_function_regex9 = re.compile("\w+=function\(\w+\)\{var \w+=function\(\w+\)\{'return \w+';return \w+;\}; return \w+\(\w+\);\};") 58 | l = constant_function_regex9.findall(js) 59 | for i in l: 60 | a = re.search("(\w+)=function\(\w+\)\{var \w+=function\(\w+\)\{'return \w+';return \w+;\}; return \w+\(\w+\);\};", i) 61 | js = js.replace(i, "%s='*';"%(a.group(1))) 62 | # 63 | constant_function_regex8 = re.compile("\w+=function\(\w+\)\{'return \w+';return \w+;\};") 64 | l = constant_function_regex8.findall(js) 65 | for i in l: 66 | a = re.search("(\w+)=function\(\w+\)\{'return \w+';return \w+;\};", i) 67 | js = js.replace(i, "%s='*';"%(a.group(1))) 68 | # 69 | constant_function_regex9 = re.compile("function \w+\(\)\{'return \w+';return '[^\']+'\}") 70 | l = constant_function_regex9.findall(js) 71 | for i in l: 72 | a = re.search("function (\w+)\(\)\{'return \w+';return '([^\']+)'\}", i) 73 | js = js.replace(i, "%s='%s';"%(a.group(1), a.group(2))) 74 | # 75 | js = re.sub('\s*=\s*', '=', js) 76 | #变量处理 77 | var_regex = re.compile("(\w+='[^\']+')") 78 | var_list = var_regex.findall(js) 79 | t_var_list = [] 80 | 81 | for var in var_list: 82 | i = var.find('=') 83 | k,v = var[0:i], var[i+1:] 84 | t_var_list.append((k,v)) 85 | 86 | t_var_list.sort(key=lambda x:len(x[0])) 87 | t_var_list.reverse() 88 | 89 | for k,v in t_var_list: 90 | if v == "'*'": 91 | js = re.sub("%s\(('[^\']+')\)?"%k, "\\1", js) 92 | else: 93 | js = re.sub('%s\(\'[^\']+\'\)'%k, v, js) 94 | js = re.sub('%s\(\)'%k, v, js) 95 | js = re.sub('%s'%k, v, js) 96 | 97 | js = ''.join([x for x in js.split(';') if '+' in x]) 98 | #js = re.sub("\([^\)]+\)", "", js) 99 | js = re.sub("'\+[^\']*'", "", js) 100 | 101 | _dsign = re.findall('ign=([a-z\d]+)', js) 102 | if _dsign: 103 | _dsign = _dsign[-1] 104 | else: 105 | _dsign = '' 106 | return _dsign 107 | 108 | with open('_dsign.js') as f: 109 | js = f.read() 110 | 111 | print get_dsign(js) 112 | -------------------------------------------------------------------------------- /ixigua_video.py: -------------------------------------------------------------------------------- 1 | # coding:utf8 2 | import re 3 | import requests 4 | import random 5 | from zlib import crc32 6 | from base64 import b64decode 7 | 8 | 9 | def get_video_url_api(video_id): 10 | """获取视频地址所在包的url""" 11 | r = str(random.random())[2:] 12 | url_part = "/video/urls/v/1/toutiao/mp4/{}?r={}".format(video_id, r) 13 | s = crc32(url_part.encode()) 14 | url = "https://ib.365yg.com{}&s={}".format(url_part, s) 15 | return url 16 | 17 | 18 | def get_video_url(url): 19 | """获取视频地址""" 20 | headers = { 21 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36", 22 | } 23 | resp = requests.get(url, headers=headers) 24 | j_resp = resp.json() 25 | video_url = j_resp['data']['video_list']['video_1']['main_url'] 26 | video_url = b64decode(video_url.encode()).decode() 27 | return video_url 28 | 29 | 30 | def get_video_id(url): 31 | """获取视频id""" 32 | headers = { 33 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36", 34 | } 35 | resp = requests.get(url, headers=headers) 36 | # 获取video_id 37 | return re.search("videoId: '([^\']+)'", resp.text).group(1) 38 | 39 | 40 | def main(): 41 | url = "https://www.ixigua.com/a6562763969642103303/" 42 | url = "https://www.ixigua.com/a6562393171530088967/#mid=5577050366" 43 | # 44 | video_id = get_video_id(url) 45 | # 46 | video_url_api = get_video_url_api(video_id) 47 | # 48 | video_url = get_video_url(video_url_api) 49 | print(video_url) 50 | return 51 | 52 | 53 | if __name__ == '__main__': 54 | main() 55 | -------------------------------------------------------------------------------- /jschl_answer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 安全检查中... 10 | 18 | 19 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 77 | 78 |
53 |
54 | 56 | 66 |
67 | 68 | 69 | 70 |
71 |
72 | 73 | 74 |
76 |
79 | 80 | 81 | -------------------------------------------------------------------------------- /jschl_answer.py: -------------------------------------------------------------------------------- 1 | #coding:utf8 2 | import re 3 | import time 4 | import urlparse 5 | 6 | url = 'http://hwsqnews.com/index.html' 7 | 8 | js_template = ''' 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 安全检查中... 18 | 26 | 27 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 82 | 83 |
58 |
59 | 61 | 71 |
72 | 73 | 74 | 75 |
76 |
77 | 78 | 79 |
81 |
84 | 85 | 86 | ''' 87 | 88 | def get_answer(js, url): 89 | # js规则转换 90 | # !+[] == 1 91 | # !![] == 1 92 | # [] == '0' 93 | 94 | js_convert_dict = [ 95 | (re.compile('\!\+\[\]'),'1'), 96 | (re.compile('\!\!\[\]'),'1'), 97 | (re.compile('\[\]'),'0'), 98 | ] 99 | 100 | # 计算代码规律 有 +()![] 组成 101 | cal_pattern = '[\+\(\)\!\[\]]+' 102 | 103 | js = re.sub('\s*', '', js) 104 | 105 | # 寻找变量名 106 | obj = re.search('var(?:\w,)+(?P\w+)\=\{\"(?P\w+)\"\:(?P%s)\};'%cal_pattern, js) 107 | #print obj.groupdict() 108 | 109 | # 替换掉 替换掉对象名和属性名为 answer 110 | js = js.replace(obj.group('obj_name') + '.' + obj.group('obj_attr'), 'answer') 111 | 112 | # 寻找计算代码 113 | new_cal_pattern = re.compile('answer([\*\+\-]\=%s)'%cal_pattern) 114 | cal_list = new_cal_pattern.findall(js) 115 | 116 | # 加入初值 117 | cal_list = [obj.group('obj_value')] + cal_list 118 | 119 | # 对计算代码进行化简 使用 js_convert_dict 120 | def convert(cal_str): 121 | for pattern,repl in js_convert_dict: 122 | cal_str = re.sub(pattern, repl, cal_str) 123 | return cal_str 124 | 125 | cal_list = [convert(x) for x in cal_list] 126 | 127 | # 转换后一般为一下两种格式 128 | # *=+1 这种可替换掉第一个 + 号后 使用 eval 直接执行 129 | # +=+((1+1+0)+(1+1+1+1+1+1+1+1+1)) 这种需要先计算前后两个括号中的数字 然后使用字符串加法,再使用 eval 执行 130 | # 类型分辨 使用 算式最后一位是否为 0 来区分 131 | 132 | # 先替换掉 = 号后的 + 号 133 | cal_list = [x.replace('=+', '=') for x in cal_list] 134 | 135 | # 第二次化简 136 | def convert_2(cal_str): 137 | # 寻找子算式 138 | sub_cal_list = re.findall('(\([\+\d]+\))', cal_str) 139 | # 140 | for sub_cal in sub_cal_list: 141 | if '0)' in sub_cal: 142 | cal_str = cal_str.replace(sub_cal, '"' + str(eval(sub_cal)) + '"') 143 | else: 144 | cal_str = cal_str.replace(sub_cal, str(eval(sub_cal))) 145 | # 化简 将存在字符串类型的按照字符串相加 146 | # 由于仅出现了 字符串 + 数字类型的 所以我就不考虑 数字 + 数字 + 字符串 等更复杂的情况了 147 | if '"' in cal_str: 148 | cal_str = cal_str.replace('"+', '') 149 | cal_str = cal_str.replace('"', '') 150 | return cal_str 151 | cal_list = [convert_2(x) for x in cal_list] 152 | 153 | # 开始 计算 154 | scope = {} 155 | for cal_str in cal_list: 156 | if '=' not in cal_str: 157 | cal_str = "=" + cal_str 158 | cal_str = 'answer' + cal_str 159 | exec(cal_str, scope) 160 | 161 | answer = scope['answer'] 162 | 163 | 164 | # js代码中还增加了一个 t.length 其实就是当前页面的url的域名部分的长度 hwsqnews.com 165 | answer += len(urlparse.urlparse(url).netloc) 166 | return answer 167 | 168 | def get_direct_url(html, answer): 169 | u'''从js页面获取跳转需要的参数''' 170 | jschl_vc = re.search('name="jschl_vc"\s*value="([^\"]+)"', html).group(1) 171 | pass_str = re.search('name="pass"\s*value="([^\"]+)"', html).group(1) 172 | direct_url = 'http://hwsqnews.com/cdn-cgi/l/chk_jschl?jschl_vc=%s&pass=%s&jschl_answer=%s'%( 173 | jschl_vc, pass_str, answer 174 | ) 175 | return direct_url 176 | 177 | 178 | def test(): 179 | import requests 180 | cookie = '' 181 | # 最好把头部写全 182 | headers = { 183 | "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0", 184 | 'Cookie':cookie, 185 | "Host":urlparse.urlparse(url).netloc, 186 | "Referer":url, 187 | "Connection":"keep-alive", 188 | "Upgrade-Insecure-Requests":"1", 189 | "Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 190 | "Accept-Encoding":"gzip, deflate", 191 | "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 192 | } 193 | resp = requests.get(url, headers=headers) 194 | resp.encoding = 'utf8' 195 | print re.search('([^<]+)', resp.text, re.I).group(1) 196 | print u'首次访问返回 %s'%resp 197 | cookie += '__cfduid=%s;'%resp.cookies['__cfduid'] 198 | answer = get_answer(resp.content, url) 199 | direct_url = get_direct_url(resp.content, answer) 200 | print u"跳转 url: %s"%direct_url 201 | headers.update({ 202 | "Cookie":cookie, 203 | "Referer":url, 204 | }) 205 | # 这很重要 必须等待 4 秒以上 206 | print u'等待 5 秒...' 207 | time.sleep(5) 208 | # 209 | print u'开始访问跳转页面' 210 | direct_resp = requests.get(direct_url, headers=headers) 211 | # 此处直接跳转到 正常页面 212 | # 打印跳转历史 213 | print u'跳转历史: %s'%direct_resp.history 214 | # 跳转后 返回码 215 | print u'跳转结束后回到正常页面: %s, url: %s'%(direct_resp, direct_resp.url) 216 | direct_resp.encoding = 'gbk' 217 | print re.search('<title>([^<]+)', direct_resp.text, re.I).group(1) 218 | return direct_resp 219 | 220 | 221 | if __name__ == "__main__": 222 | test() 223 | #print get_answer(js_template, url) 224 | -------------------------------------------------------------------------------- /test_down_douban.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | import os 3 | import re 4 | import time 5 | import random 6 | import json 7 | import requests 8 | 9 | def get_cookie(): 10 | import string 11 | import random 12 | import time 13 | base = string.letters + string.digits + "_" 14 | bid = "".join(random.sample(base, 11)) 15 | cookie = 'bid=%s; ac="%s"'%(bid, int(time.time())) 16 | return cookie 17 | 18 | proxies = {"http":"http://175.151.205.202:808"} 19 | LOGINURL = 'http://www.pss-system.gov.cn/sipopublicsearch/search/executeGeneralSearch-returnResultOnly.shtml' 20 | LOGINURL = 'https://www.douban.com/location/world/' 21 | #assert 1==2 22 | headers = { 23 | "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0", 24 | "Cookie":get_cookie(), 25 | "Host":"douban.com", 26 | "Connection":"keep-alive", 27 | "Accept-Encoding":"gzip, deflate, br", 28 | "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 29 | "Cache-Control":"max-age=0", 30 | #"Cache-Control":"max-age=0", 31 | #"X-Forward-For":"222.130.132.163", 32 | } 33 | 34 | 35 | session = requests.Session() 36 | resp = session.get(LOGINURL, headers=headers) 37 | print resp.headers 38 | print resp 39 | print session.cookies 40 | resp.encoding = 'utf8' 41 | text = resp.text 42 | 43 | if re.search("window\.location\.href=\"https", text): 44 | url = re.search("window\.location\.href=\"([^;]+);", text).group(1) 45 | print url 46 | url = url.replace('"+d+"', 'navigator.platform|navigator.userAgent|navigator.vendor') 47 | #print text 48 | print len(text) 49 | 50 | with open("aaa.html",'w') as f: 51 | f.write(text.encode('utf8')) 52 | 53 | print resp.url 54 | -------------------------------------------------------------------------------- /test_down_tianyancha.py: -------------------------------------------------------------------------------- 1 | #coding:utf-8 2 | import os 3 | import re 4 | import time 5 | import zlib 6 | import random 7 | import urllib 8 | import urllib2 9 | import cookielib 10 | import json 11 | import requests 12 | 13 | sogou = ["6", "b", "t", "f", "l", "5", "w", "h", "q", "i", "s", "e", "c", "p", "m", "u", "9", "8", "y", "2", "z", "k", "j", "r", "x", "n", "-", "0", "3", "4", "d", "1", "a", "o", "7", "v", "g"] 14 | v= '33,102,117,110,99,116,105,111,110,40,110,41,123,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,61,39,116,111,107,101,110,61,97,57,51,98,98,56,50,50,57,101,57,50,52,55,102,49,57,56,48,97,98,54,100,97,52,55,101,54,55,55,101,55,59,112,97,116,104,61,47,59,39,59,110,46,119,116,102,61,102,117,110,99,116,105,111,110,40,41,123,114,101,116,117,114,110,39,51,44,50,57,44,49,44,51,49,44,48,44,49,50,44,48,44,49,55,44,51,48,44,48,44,49,57,44,50,55,44,50,57,44,49,55,44,49,54,44,53,44,49,54,44,49,55,44,50,55,44,53,44,51,44,51,50,44,51,48,44,51,44,50,55,44,49,44,49,54,44,51,52,44,50,55,44,51,52,44,53,44,49,50,39,125,125,40,119,105,110,100,111,119,41,59' 15 | s = ''.join([chr(int(x)) for x in v.split(',')]) 16 | utm = re.search("return'([\d,]+)", s).group(1) 17 | utm = "".join([sogou[int(x)] for x in utm.split(',')]) 18 | 19 | def get_token(data, company_id): 20 | sogou_list = [ 21 | ["6", "b", "t", "f", "l", "5", "w", "h", "q", "i", "s", "e", "c", "p", "m", "u", "9", "8", "y", "2", "z", "k", "j", "r", "x", "n", "-", "0", "3", "4", "d", "1", "a", "o", "7", "v", "g"], 22 | ["1", "8", "o", "s", "z", "m", "b", "9", "f", "d", "7", "h", "c", "u", "n", "v", "p", "y", "2", "0", "3", "j", "-", "i", "l", "k", "t", "q", "4", "6", "r", "a", "w", "5", "e", "x", "g"], 23 | ["g", "a", "c", "t", "h", "u", "p", "f", "6", "x", "7", "0", "d", "i", "v", "e", "q", "4", "b", "5", "k", "w", "9", "s", "-", "j", "l", "y", "3", "o", "n", "z", "m", "2", "1", "r", "8"], 24 | ["s", "6", "h", "0", "y", "l", "d", "x", "e", "a", "k", "z", "u", "f", "4", "r", "b", "-", "p", "g", "3", "n", "m", "7", "o", "c", "i", "8", "v", "2", "1", "9", "q", "w", "t", "j", "5"], 25 | ["d", "4", "9", "m", "o", "i", "5", "k", "q", "n", "c", "s", "6", "b", "j", "y", "x", "l", "a", "v", "3", "t", "u", "h", "-", "r", "z", "2", "0", "7", "g", "p", "8", "f", "1", "w", "e"], 26 | ["z", "5", "g", "c", "h", "7", "o", "t", "2", "k", "a", "-", "e", "x", "y", "j", "3", "l", "1", "u", "s", "4", "b", "n", "8", "i", "6", "q", "p", "0", "d", "r", "v", "m", "w", "f", "9"], 27 | ["p", "x", "3", "d", "6", "5", "8", "k", "t", "l", "z", "b", "4", "n", "r", "v", "y", "m", "g", "a", "0", "1", "c", "9", "-", "2", "7", "q", "j", "h", "e", "w", "u", "s", "f", "o", "i"], 28 | ["q", "-", "u", "d", "k", "7", "t", "z", "4", "8", "x", "f", "v", "w", "p", "2", "e", "9", "o", "m", "5", "g", "1", "j", "i", "n", "6", "3", "r", "l", "b", "h", "y", "c", "a", "s", "0"], 29 | ["7", "-", "g", "x", "6", "5", "n", "u", "q", "z", "w", "t", "m", "0", "h", "o", "y", "p", "i", "f", "k", "s", "9", "l", "r", "1", "2", "v", "4", "e", "8", "c", "b", "a", "d", "j", "3"], 30 | ["1", "t", "8", "z", "o", "f", "l", "5", "2", "y", "q", "9", "p", "g", "r", "x", "e", "s", "d", "4", "n", "b", "u", "a", "m", "c", "h", "j", "3", "v", "i", "0", "-", "w", "7", "k", "6"] 31 | ] 32 | sogou = sogou_list[int(str(ord(str(company_id).decode('utf8')[0]))[1])] 33 | #print sogou 34 | v = data.get('data', {}).get('v') 35 | s = ''.join([chr(int(x)) for x in v.split(',')]) 36 | #print s 37 | token = re.search("token=([^;]+)", s).group(1) 38 | utm = re.search("return'([\d,]+)", s).group(1) 39 | utm = "".join([sogou[int(x)] for x in utm.split(',')]) 40 | #print token, ' ', utm 41 | return token, utm 42 | 43 | company_id = "25696030" 44 | proxies = {"http":"http://175.150.25.50:808"} 45 | proxies = None 46 | ts = time.time() 47 | LOGINURL = 'http://www.tianyancha.com/tongji/%s.json?random=%s'%(company_id, int(ts * 1000)) 48 | headers = { 49 | "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0", 50 | "Host":"www.tianyancha.com", 51 | "Connection":"keep-alive", 52 | "Accept-Language":"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 53 | "Accept-Encoding":"gzip, deflate", 54 | "Accept":"application/json, text/plain, */*", 55 | "Cache-Control":"no-cache", 56 | "Tyc-From":"normal", 57 | "CheckError":"check", 58 | } 59 | 60 | 61 | session = requests.Session() 62 | resp1 = session.get(LOGINURL, headers=headers) 63 | token, utm = get_token(resp1.json(), company_id) 64 | print session.cookies 65 | TYCID = session.cookies.get('TYCID') 66 | tnet = session.cookies.get('tnet') 67 | time.sleep(2) 68 | cookie = 'token=%s; _utm=%s; TYCID=%s; tnet=%s;'%(token, utm, TYCID, tnet) 69 | 70 | 71 | headers.update({ 72 | "Cookie":cookie, 73 | "Referer":"http://www.tianyancha.com/company/%s"%company_id, 74 | }) 75 | 76 | resp = session.get('http://www.tianyancha.com/company/%s.json'%company_id, 77 | headers=headers, proxies=proxies) 78 | 79 | print resp 80 | print resp.headers 81 | print resp.history 82 | print session.cookies 83 | print resp.json().get("data").get("baseInfo").get("name") 84 | --------------------------------------------------------------------------------