├── .gitattributes ├── .github └── workflows │ └── sync.yml ├── .gitignore ├── LICENSE ├── README.md ├── geetest_crack ├── __init__.py ├── config.py ├── geetest_session.py ├── js │ ├── encrypt.js │ ├── fullpage_t1.js │ ├── fullpage_w1.js │ ├── fullpage_w2.js │ ├── login_pwd_encrypt.js │ ├── slide_a.js │ └── u_params.js ├── param.py └── utils │ ├── __init__.py │ ├── captcha.py │ ├── fetch.py │ ├── logger.py │ ├── response.py │ └── times.py ├── images ├── ajax-php-for-validate-param.png ├── ajax-php-for-validate.png ├── bind-code-restore.png ├── captcha-1.png ├── captcha-2.png ├── captcha.gif ├── code-chaos-restore-2.png ├── code-chaos-restore.png ├── code-chaos.png ├── e44c02efd.jpg ├── get_a.png ├── login-demo.jpg └── xx-login-demo.gif └── requirements.txt /.gitattributes: -------------------------------------------------------------------------------- 1 | geetest_crack/js/encrypt.js linguist-vendored -------------------------------------------------------------------------------- /.github/workflows/sync.yml: -------------------------------------------------------------------------------- 1 | name: Sync 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | 7 | jobs: 8 | sync: 9 | runs-on: ubuntu-latest 10 | if: github.repository == 'yanglbme/geetest-crack' 11 | steps: 12 | - name: Sync to gitee.com 13 | uses: wearerequired/git-mirror-action@master 14 | env: 15 | SSH_PRIVATE_KEY: ${{ secrets.RSA_PRIVATE_KEY }} 16 | with: 17 | source-repo: git@github.com:yanglbme/geetest-crack.git 18 | destination-repo: git@gitee.com:yanglbme/geetest-crack.git 19 | 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | 131 | # idea 132 | *.iml 133 | .idea/ 134 | *.ipr 135 | *.iws -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Yang Libin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 极验验证码破解 2 | 3 | 无须使用 Selenium、Webdriver 等,直接通过解密 JavaScript 参数破解。 4 | 5 | 温馨提醒,运行代码前,请: 6 | 7 | - 安装 [requirements.txt](./requirements.txt) 中的库; 8 | - 安装 Node 环境、Redis 数据库。 9 | 10 | ## 什么是“极验”? 11 | 12 | 或许你没听说过[极验](https://www.geetest.com/),但你很大可能使用过极验的产品。极验是首家「行为式验证」​ 安全技术服务提供商,并以提供验证码服务而闻名。我们日常会登录一些网站,有的网站登录前需要校验验证码,而这个验证码服务很可能就是极验提供的。 13 | 14 | ## 示例官网 15 | 16 | 我以“[XX](https://httpbin.org/get?code=0&msg=Sorry,%20the%20real%20url%20has%20been%20hidden&author=bingo)”官网为例,来说明如何破解极验验证码。 17 | 18 | ![](./images/xx-login-demo.gif) 19 | 20 | ## 破解思路 21 | 22 | 目前,对于这一类的滑动验证码,业界里常见的一个破解方法就是**计算缺口位置,使用 Selenium 自动化测试工具,模拟人类手动拖动滑块的过程**。这种方法实现较为简单,但存在着两个缺点:一是模拟滑动,容易被极验检测到我们使用的是自动化软件,从而导致滑动操作失败;二是每一次登录任务都需要驱动浏览器,登录耗时较长,这对于实时性要求较高的数据采集任务来说,几乎是不可接受的。 23 | 24 | 所以,我决定走一条比较艰难的道路:**死磕 JavaScript 代码,破解每个请求中的加密参数,之后在程序中发送请求得到正确响应。** 这是最直接且最高效的方式,它无需等待浏览器对页面进行渲染,只要解出加密的请求参数,发送请求获取响应即可。 25 | 26 | > 我们必须知道的一个事实是,用户在浏览器中的操作,如点击验证码、拖动滑块等动作,最终都会转化为请求发送到服务端,服务端对请求参数进行合法性校验,并响应结果。 27 | 28 | 之所以说比较艰难,一是因为我并非从事前端开发工作,对于 JavaScript 代码的调用栈分析不如前端同学熟练;二是因为极验的 JavaScript 代码实在混淆得特别难懂,如何从上万行混淆的 JavaScript 代码中抽离出关键的加密代码,也是一项很大的挑战。可以毫无夸张地说,没有足够的毅力和耐心,很难实现破解。 29 | 30 | ## 动手破解 31 | 32 | 接下来我会大致描述整个破解流程,对于过于细节化的东西,就不在这里赘述了。 33 | 34 | ### 1. 请求参数分析 35 | 36 | 我以最终的登录方法作为分析入口。输入一个错误的账号密码,然后点击滑动并拖动到正确的位置。此后页面会提示“**账户名或密码错误!**”。观察浏览器 Network 栏,其实登录这个动作是发出了 Name 为 accLoginPC.do 这个请求。 37 | 38 | ![](./images/login-demo.jpg) 39 | 40 | 请求的 URL 是:https://xxx.xxx/webapi/accLoginPC.do (已脱敏)。 41 | 42 | 请求参数 Form Data 有多个,包括:`appId`、`loginName`、`loginPwd`、`geetest_challenge` 等。可以看到,密码被加密成 `CN-S513...` 这一长段,另外还有三个以 `geetest_` 开头的加密参数,分别是: 43 | 44 | - geetest_challenge: 102f7d723ad76e387ad6000f87ff91f8j3 45 | - geetest_validate: 651ecdf62cb1e940e5ea999b6af7fc10 46 | - geetest_seccode: 651ecdf62cb1e940e5ea999b6af7fc10|jordan 47 | 48 | 从参数命名上,我们能够很清晰地看出,这是极验滑动验证码的加密参数。也即是说,**我们点击验证码,拖动滑块这些动作,最终转换为这三个加密参数**。我们的主要工作,也在于破解这三个参数。细心的同学可能发现了,其中 `geetest_validate` 与 `geetest_seccode` 参数基本相同,只不过 `geetest_seccode` 多了 `|jordan` 的字符串后缀。那么,最主要的工作就是解出 challenge/validate 两个参数。 49 | 50 | > 对于其他非极验加密参数,如 `loginPwd`、`jtSafeKey`、`token` 等,均属于 XX 官网自身的加密逻辑,破解难度不大,因此,文章里,我们主要聚焦于极验参数的破解。 51 | 52 | 我们再往上找,发现了 `ajax.php?` 这个请求,这个请求里的响应信息是一个类似 json 串的东西,里面包着 validate 参数。震惊,这不就是我们前文的 `geetest_validate` 参数吗? 53 | 54 | ![](./images/ajax-php-for-validate.png) 55 | 56 | 观察其请求参数,发现是 gt、challenge、lang、w 和 callback。其中 w 加密成了一长串。 57 | 58 | ![](./images/ajax-php-for-validate-param.png) 59 | 60 | 如此分析,我们逐渐捋清思路,得知每一个请求都需要解出哪些加密参数,我就不在这里花费大量篇幅做细致描述了。 61 | 62 | 之后针对这些参数名,查看 JavaScript 代码中是如何加密的,一步步... 63 | 64 | ### 2. 代码反混淆 65 | 66 | 我们点击 `slide.xxx.js` 文件,跳转到 Chrome Sources 菜单栏,查看 JavaScript 代码。 67 | 68 | 想查看 JavaScript 代码对请求参数的加密逻辑可没那么容易,极验做了大量的混淆工作,为的是提高我们的破解难度。 69 | 70 | ![](./images/code-chaos.png) 71 | 72 | 可以看到,代码基本不是我们凡人所能看懂的。它对代码进行了 Unicode 编码,并且加上了大量的混淆代码。这导致我们直接搜 `challenge` 这些关键参数名,是找不到相关代码的。 73 | 74 | 那么,我们首先将完整的 JavaScript 代码 copy 出来,先到网上找一个 Unicode 编码还原工具,对代码进行 Unicode 解码。解码之后,复制到编辑器中,搜索 `challenge`,发现了几个关键的参数。 75 | 76 | ![](./images/code-chaos-restore.png) 77 | 78 | 此时的代码依然难以阅读,因为极验对每个关键参数都进行了混淆,混淆的逻辑就是使用类似这种 `UtTS` 的代码进行替换,逻辑也藏在 JavaScript 代码中,具体就不展开了。我们对其进一步还原。还原之后,代码如下: 79 | 80 | ![](./images/code-chaos-restore-2.png) 81 | 82 | 明显感觉到代码清晰了不少,还有一个问题是:怎么还有很多这种 `var xow_list = uklgT.xow` 莫名其妙的代码。我们研究发现,这其实是极验加入的冗余代码,主要目的是为了混淆视听。 83 | 84 | 比如,对于这样的冗余代码: 85 | 86 | ```javascript 87 | function tPcX(e) { 88 | var SkB = uklgT.yaA()[0][22]; 89 | for (; SkB !== uklgT.yaA()[16][19]; ) { 90 | switch (SkB) { 91 | case uklgT.yaA()[0][22]: 92 | var t = this; 93 | var r = e["DxJq"]; 94 | SkB = uklgT.yaA()[0][21]; 95 | break; 96 | case uklgT.yaA()[16][21]: 97 | r["height"] = r["width"] = 0; 98 | t["vjyG"] = r["getContext"]("2d"); 99 | SkB = uklgT.yaA()[4][20]; 100 | break; 101 | case uklgT.yaA()[4][20]: 102 | t["wOTb"] = t["xmDd"] = t["yZRm"] = t["AZ_O"] = 0; 103 | t["BnKG"] = r; 104 | SkB = uklgT.yaA()[4][19]; 105 | break; 106 | } 107 | } 108 | } 109 | ``` 110 | 111 | 我们还原之后,就变成了以下精简且易读的代码: 112 | 113 | ```javascript 114 | function tPcX(e) { 115 | var t = this; 116 | var r = e["DxJq"]; 117 | r["height"] = r["width"] = 0; 118 | t["vjyG"] = r["getContext"]("2d"); 119 | t["wOTb"] = t["xmDd"] = t["yZRm"] = t["AZ_O"] = 0; 120 | t["BnKG"] = r; 121 | } 122 | ``` 123 | 124 | 通过对多个 JavaScript 文件,如 slide.js/fullpage.js 等进行反混淆,我们对 JavaScript 的调用逻辑清晰了很多。 125 | 126 | ### 3. 代码解绑定 127 | 128 | 完成了代码反混淆,还有一个重要的工作,就是如何从 JavaScript 代码中抽离出关键的 JavaScript 代码,这些代码就是请求参数的加密逻辑。我将此过程称为“代码解绑定”。 129 | 130 | 这个过程并不需要什么技巧,需要的只是耐心,耐心,耐心。跟着 Chrome 浏览器,打断点分析请求的入口与出口,一步步将关键代码剥离出来。 131 | 132 | ![](./images/bind-code-restore.png) 133 | 134 | 比如,我们需要解出参数 a,那么就抽离出加密参数 a 的代码,封装成一个 `get_a()` 的函数。 135 | 136 | ![](./images/get_a.png) 137 | 138 | 封装了几个需要的 JavaScript 函数,我们可以在 Python 程序中,使用 PyExecJS 库,方便地执行 JavaScript 代码拿到加密参数。以下为一些示例代码: 139 | 140 | ```python 141 | def get_js_object(js_file_path): 142 | """获取js可执行对象""" 143 | with open(os.path.dirname(__file__) + js_file_path, encoding='GBK') as f: 144 | js_file = f.read() 145 | return execjs.compile(js_file) 146 | 147 | 148 | pwd_encrypt_js = get_js_object(pwd_encrypt_js_path) 149 | full_page_t1_js = get_js_object(full_page_t1_js_path) 150 | full_page_w1_js = get_js_object(full_page_w1_js_path) 151 | full_page_w2_js = get_js_object(full_page_w2_js_path) 152 | u_js = get_js_object(u_js_path) 153 | slide_u_js = get_js_object(slide_u_js_path) 154 | slide_a_js = get_js_object(slide_a_js_path) 155 | 156 | 157 | def get_encrypt_pwd(pwd): 158 | """获取加密后的密码""" 159 | return pwd_encrypt_js.call('pwdEncrypt', pwd) 160 | 161 | 162 | def get_full_page_t1(s): 163 | """获取fullpage的t1参数""" 164 | return full_page_t1_js.call('get_t', s) 165 | 166 | 167 | def get_full_page_w1(gt, challenge, s): 168 | """获取fullpage的w1参数""" 169 | t = get_full_page_t1(s) 170 | return full_page_w1_js.call('get_w', gt, challenge, s, t) 171 | 172 | 173 | def get_full_page_w2(gt, challenge, s): 174 | """获取fullpage的w2参数""" 175 | return full_page_w2_js.call('get_w', gt, challenge, s) 176 | 177 | 178 | def get_slide_w(gt, challenge, s, offset, track): 179 | """获取slide的w参数""" 180 | u = { 181 | 'lang': 'zh-cn', 182 | 'userresponse': u_js.call('getUserResponse', offset - 1, challenge), 183 | 'passtime': track[-1][-1], 184 | 'imgload': random.randint(110, 180), 185 | 'a': u_js.call("mouse_encrypt", track), 186 | 'ep': {"v": "1.2", "f": u_js.call("lmWn", gt + challenge)}, 187 | 'rp': u_js.call("lmWn", gt + challenge[0:32] + str(track[-1][-1])) 188 | } 189 | u = slide_u_js.call('_encrypt', u, s) 190 | a = slide_a_js.call('get_a', s) 191 | return u + a 192 | ``` 193 | 194 | ### 4. 滑动轨迹采集 195 | 196 | 代码解绑定之后,还没完,你可以看到,上面的 `get_slide_w()` 函数中,有偏移量 offset 和 track 轨迹。需要我们要拿到验证码带缺口和不带缺口的图片,对比像素之后才能计算出 offset。 197 | 198 | 而对于验证码,还需要做些处理,因为我们通过 URL 拿到的两张验证码图片,都是被打乱的。需要根据极验的 JavaScript 代码,对两张打乱的图片进行还原。具体的还原逻辑就不在此赘述了。 199 | 200 | ![](./images/captcha-1.png) 201 | 202 | ![](./images/captcha-2.png) 203 | 204 | 而对于滑动轨迹,若使用自动化工具模拟人类拖动滑块,容易被识别为机器行为而导致滑动失败。本项目里,我们采用人为手动拖动验证码的方式(人为拖动,是正常的行为),收集一批轨迹,构成轨迹库。之后,只要算出滑动验证码缺口的偏移量,从轨迹库中找到与偏移量相近的轨迹即可。虽然有一定的错误率,比如,轨迹库不够丰富而导致取不到偏移量对应的轨迹,但是我们可以在接下来的程序里,采用一种**特殊的方式**对其进行优化,可以保证每次登录 100% 成功。 205 | 206 | ### 5. 小结 207 | 208 | 以上便是整个极验破解的过程,再简单总结一下: 209 | 210 | 1. 请求参数分析 211 | 2. 代码反混淆 212 | 3. 代码解绑定 213 | 4. 滑动轨迹采集 214 | 215 | 其中,还包括验证码图片的还原,图片缺口的计算等等。 216 | 217 | ## 特殊的优化方式是什么? 218 | 219 | 上文还提到一种特殊的优化方式,其实就是**极验 Session 验证码池的设计**。我们通过测试发现,并非需要在每个登录任务来的时候,再去解密参数,进而滑动验证码。我们其实可以预先滑动好验证码(其实就是发请求),然后把得到成功响应的 Session 存起来,放在一个池子中。这样做的好处主要有 2 点: 220 | 221 | 1. 提高登录效率,缩减耗时; 222 | 2. 提高数据采集程序的健壮性。 223 | 224 | 当有登录任务过来的时候,我们从池子中取出一个极验 Session,加上登录任务中的用户名/密码(按照 XX 官网,密码还需做加密)直接去登录,是不是既简单又高效呢? 225 | 226 | 验证码池子的设计就很重要了,考虑一个问题:验证码池子如何实现自动更新与过期删除?之所以要考虑这个问题,是因为滑动验证码并非长期有效,已经无效的验证码不应该堆积在池子上,否则会极大地浪费存储空间。我们希望实现的效果是: 227 | 228 | - 每一次都从池子中拿出最新请求到的一个验证码(这样可以 100% 保证验证码有效); 229 | - 可以定期清除池子中一批比较旧的验证码。 230 | 231 | 基于以上分析,我采用 Redis Sorted Sets (以下简称 zset)这种数据类型来存储极验 Session。zset 是一个有序的集合,在请求到验证码并存储到池子的时候,可以使用当前时间戳作为元素的 score,zset 会根据 score 对插入元素进行排序。好处就是:我们可以方便地使用 `zrevrange` 命令获取到最新的一个验证码 session,同时我们又可以使用 `zremrangebyscore` 移除某个时间范围内的验证码,从而达到自动过期删除的目的。 232 | 233 | 代码见 [geetest_session.py](/geetest_crack/geetest_session.py) 234 | 235 | 运行日志如下: 236 | 237 | ``` 238 | 2020-04-01 15:38:57 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/bg/0acfd4d64.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/1e6ca4d3f.jpg 239 | 2020-04-01 15:39:00 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 240 | 2020-04-01 15:39:00 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 241 | 2020-04-01 15:39:01 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 242 | 2020-04-01 15:39:01 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '49bf36f101312f382b66670af7a6061f', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 243 | 2020-04-01 15:39:03 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/61ffa98e8/bg/8627cc65f.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/61ffa98e8/61ffa98e8.jpg 244 | 2020-04-01 15:39:04 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '2241ffcb990425fd1f4d93a06dd1ffb1', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 245 | 2020-04-01 15:39:05 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '8f6168ebdfd8561d6f14d2d8973dcaa3', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 246 | 2020-04-01 15:39:05 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '9926b4297f6ed6df614e68dafafa58e6', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 247 | 2020-04-01 15:39:06 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/d49a453dc/bg/fc62c5927.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/d49a453dc/d49a453dc.jpg 248 | 2020-04-01 15:39:06 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 249 | 2020-04-01 15:39:06 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/cac640dea/bg/ec34f0e13.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/cac640dea/cac640dea.jpg 250 | 2020-04-01 15:39:06 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/ebc5e54b4/bg/ca96d4224.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/ebc5e54b4/ebc5e54b4.jpg 251 | 2020-04-01 15:39:11 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 252 | 2020-04-01 15:39:11 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 253 | 2020-04-01 15:39:11 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '61556a44d32a9786b61ab8afbea3989b', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 254 | 2020-04-01 15:39:11 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 255 | 2020-04-01 15:39:12 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/cd0bbb6fe/bg/2f991caf7.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/cd0bbb6fe/cd0bbb6fe.jpg 256 | 2020-04-01 15:39:15 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '0df340035700753080348c13eadacbd4', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 257 | 2020-04-01 15:39:15 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 258 | 2020-04-01 15:39:15 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '5c192a8d548da735c393fce93df17b00', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 259 | 2020-04-01 15:39:15 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '9389c0cefacfca69e39ab2aee20b4fda', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 260 | 2020-04-01 15:39:17 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/bg/2a98c1588.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/1e6ca4d3f.jpg 261 | 2020-04-01 15:39:17 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/bg/5283e2318.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/1e6ca4d3f.jpg 262 | 2020-04-01 15:39:17 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/9264fff13/bg/2e0bb3330.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/9264fff13/9264fff13.jpg 263 | 2020-04-01 15:39:20 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '9e532863e31fc59138438fba5d19b6ea', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 264 | 2020-04-01 15:39:21 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 265 | 2020-04-01 15:39:22 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 266 | 2020-04-01 15:39:22 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 267 | 2020-04-01 15:39:22 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/bg/b0dbbc9c5.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/1e6ca4d3f.jpg 268 | 2020-04-01 15:39:25 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 269 | 2020-04-01 15:39:26 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '2e5da172682aade75ac8482b74a7a074', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 270 | 2020-04-01 15:39:26 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '280aaee468f6e344c72e2e4408062405', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 271 | 2020-04-01 15:39:27 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '9d5e8bfe23eeec059dd79d890c83d6d7', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 272 | 2020-04-01 15:39:28 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/61ffa98e8/bg/285b1330f.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/61ffa98e8/61ffa98e8.jpg 273 | 2020-04-01 15:39:28 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/e840d69cc/bg/6c86e0ad3.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/e840d69cc/e840d69cc.jpg 274 | 2020-04-01 15:39:28 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/e44c02efd/bg/de65f3a21.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/e44c02efd/e44c02efd.jpg 275 | 2020-04-01 15:39:30 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': 'd6062fc656baa01571ee5245831e4496', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 276 | 2020-04-01 15:39:32 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.TRACK_ERR 277 | 2020-04-01 15:39:32 geetest_session.py [line:167] ERROR: 获取极验session请求出错 278 | 2020-04-01 15:39:32 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 279 | 2020-04-01 15:39:32 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/bg/90861c73f.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/1e6ca4d3f/1e6ca4d3f.jpg 280 | 2020-04-01 15:39:33 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 281 | 2020-04-01 15:39:35 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 282 | 2020-04-01 15:39:36 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '0b0ac922cf5fe2d5b9060dd423dc4e23', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 283 | 2020-04-01 15:39:36 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': '9c2c6c18f9adbb8db92b3ecc644f2f9e', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 284 | 2020-04-01 15:39:37 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': 'ac1a20b54708caf252eb28a236da7ce8', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 285 | 2020-04-01 15:39:38 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/cd0bbb6fe/bg/723c2109a.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/cd0bbb6fe/cd0bbb6fe.jpg 286 | 2020-04-01 15:39:39 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/e44c02efd/bg/f95abf82a.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/e44c02efd/e44c02efd.jpg 287 | 2020-04-01 15:39:39 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/9264fff13/bg/0e2c237a6.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/9264fff13/9264fff13.jpg 288 | 2020-04-01 15:39:40 geetest_session.py [line:46] INFO: gt/challenge请求结果:{'challenge': 'b0366c16750ccaef2366d07806e643ca', 'gt': '29414567350546096e14bb2bc6319ae1', 'success': 1} 289 | 2020-04-01 15:39:43 geetest_session.py [line:116] INFO: 滑动验证码图片,bg_url:https://captcha-static.pingan.com/pictures/gt/e840d69cc/bg/a310a9fa0.jpg, full_bg_url:https://captcha-static.pingan.com/pictures/gt/e840d69cc/e840d69cc.jpg 290 | 2020-04-01 15:39:43 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 291 | 2020-04-01 15:39:43 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 292 | 2020-04-01 15:39:44 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 293 | 2020-04-01 15:39:46 geetest_session.py [line:154] INFO: 获取极验session结果:Resp.SUCCESS 294 | ``` 295 | 296 | 以上,全篇完! 297 | 298 | 299 | ## 声明 300 | 301 | 本项目仅供学习交流使用,请勿用于非法用途! -------------------------------------------------------------------------------- /geetest_crack/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/geetest_crack/__init__.py -------------------------------------------------------------------------------- /geetest_crack/geetest_session.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pickle 3 | import re 4 | import threading 5 | import time 6 | from io import BytesIO 7 | from threading import Thread 8 | 9 | from PIL import Image 10 | from redis import Redis 11 | from requests import session 12 | 13 | from config import gt_register_url, common_login_headers, get_php_url, ajax_php_url, prefix_url, geetest_session_key, \ 14 | min_threshold, max_sleep_time, min_sleep_time 15 | from param import get_full_page_w1, get_full_page_w2, get_track, get_slide_w, get_s 16 | from utils.captcha import calculate_offset 17 | from utils.fetch import fetch 18 | from utils.logger import logger 19 | from utils.response import Resp 20 | from utils.times import now_str 21 | 22 | # 请在机器上安装redis,再使用 23 | client = Redis() 24 | 25 | 26 | class GSession: 27 | """获取极验Session""" 28 | 29 | def __init__(self): 30 | self.session = session() 31 | self.res = Resp.SUCCESS 32 | self.gt = str() 33 | self.challenge = str() 34 | self.s = get_s() 35 | self.validate = str() 36 | self.sec_code = str() 37 | self.bg_url = str() 38 | self.full_bg_url = str() 39 | self.offset = 0 40 | self.track = list() 41 | 42 | def set_gt_challenge(self) -> bool: 43 | """发送网络请求,拿到gt和challenge""" 44 | params = dict(t=now_str()) 45 | resp = fetch(self.session, url=gt_register_url, headers=common_login_headers, params=params) 46 | if resp is None: 47 | logger.warning('无法获取gt/challenge...') 48 | self.res = Resp.TIMEOUT 49 | return False 50 | res = resp.json() 51 | logger.info(f'gt/challenge请求结果:{res}') 52 | self.gt, self.challenge = res['gt'], res['challenge'] 53 | return True 54 | 55 | def get_php(self): 56 | """注册参数s:s经过多层加密拼接成w""" 57 | params = { 58 | 'gt': self.gt, 59 | 'challenge': self.challenge, 60 | 'lang': 'zh-cn', 61 | 'w': get_full_page_w1(self.gt, self.challenge, self.s), 62 | 'callback': 'geetest_' + now_str() 63 | } 64 | resp = fetch(self.session, url=get_php_url, headers=common_login_headers, params=params) 65 | if resp is None: 66 | logger.warning('无法注册参数s...') 67 | self.res = Resp.TIMEOUT 68 | return resp is not None 69 | 70 | def ajax_php(self, step=1, params=None): 71 | """ 72 | step=1:发送请求,校验参数w 73 | step=2:滑动滑块 74 | """ 75 | if step == 1: 76 | params = { 77 | 'gt': self.gt, 78 | 'challenge': self.challenge, 79 | 'lang': 'zh-cn', 80 | 'w': get_full_page_w2(self.gt, self.challenge, self.s) + '1', 81 | 'callback': 'geetest_' + now_str() 82 | } 83 | resp = fetch(self.session, url=ajax_php_url, headers=common_login_headers, params=params) 84 | if resp is None: 85 | self.res = Resp.TIMEOUT 86 | return False 87 | if step != 1: 88 | res = json.loads(re.search(r'\((.*?)\)', resp.text, re.S).group(1)) 89 | if res['data']['result'] != 'success': 90 | self.res = Resp.SLIDE_ERR 91 | return False 92 | self.validate = res['data']['validate'] 93 | self.sec_code = self.validate + '|jordan' 94 | return True 95 | 96 | def get_slide_images(self): 97 | """获取验证码图片的地址""" 98 | params = { 99 | 'is_next': 'true', 100 | 'type': 'slide3', 101 | 'gt': self.gt, 102 | 'challenge': self.challenge, 103 | 'lang': 'zh-cn', 104 | 'https': 'true', 105 | 'protocol': 'https://', 106 | 'offline': 'false', 107 | 'product': 'popup', 108 | 'api_server': 'captcha-api.com', 109 | 'width': '100%', 110 | 'callback': 'geetest_' + now_str() 111 | } 112 | resp = fetch(self.session, url=get_php_url, headers=common_login_headers, params=params) 113 | if resp is None: 114 | self.res = Resp.TIMEOUT 115 | return False 116 | res = json.loads(re.search(r'\((.*?)\)', resp.text, re.S).group(1)) 117 | 118 | # 获得滑动验证码图片的URL(带缺口+不带缺口) 119 | self.bg_url = prefix_url + res['data']['bg'] 120 | self.full_bg_url = prefix_url + res['data']['fullbg'] 121 | logger.info(f'滑动验证码图片,bg_url:{self.bg_url}, full_bg_url:{self.full_bg_url}') 122 | # 更新gt/challenge 123 | self.gt = res['data']['gt'] 124 | self.challenge = res['data']['challenge'] 125 | return True 126 | 127 | def get_track(self): 128 | """获取滑动轨迹""" 129 | resp1 = fetch(self.session, url=self.bg_url, headers=common_login_headers) 130 | resp2 = fetch(self.session, url=self.full_bg_url, headers=common_login_headers) 131 | if not (resp1 and resp2): 132 | self.res = Resp.TIMEOUT 133 | return False 134 | img1 = Image.open(BytesIO(resp1.content)) 135 | img2 = Image.open(BytesIO(resp2.content)) 136 | 137 | # 计算偏移量 138 | self.offset = calculate_offset(img1, img2) 139 | 140 | # 根据偏移量获取轨迹 141 | self.track = get_track(self.offset) 142 | if self.track is None: 143 | self.res = Resp.TRACK_ERR 144 | return self.track is not None 145 | 146 | def slide(self): 147 | """滑动滑块""" 148 | params = { 149 | 'gt': self.gt, 150 | 'challenge': self.challenge, 151 | 'lang': 'zh-cn', 152 | 'w': get_slide_w(self.gt, self.challenge, get_s(), self.offset, self.track), 153 | 'callback': 'geetest_' + now_str() 154 | } 155 | return self.ajax_php(step=2, params=params) 156 | 157 | def run(self): 158 | # 此处使用and操作符,当有某个请求返回false时,直接终止当前请求链 159 | self.set_gt_challenge() and self.get_php() and self.ajax_php() and self.get_slide_images() and self.get_track() and self.slide() 160 | logger.info(f'获取极验session结果:{self.res}') 161 | return self.res == Resp.SUCCESS 162 | 163 | 164 | def produce_session(): 165 | """生产极验session""" 166 | while True: 167 | gs = GSession() 168 | try: 169 | if gs.run(): 170 | res = pickle.dumps(gs.session) 171 | client.zadd(geetest_session_key, {res: time.time()}) 172 | num = client.zcard(geetest_session_key) 173 | logger.info(f'保存极验session到池子中,当前个数:{num}') 174 | else: 175 | logger.error('获取极验session请求出错') 176 | except Exception as e: 177 | logger.error(f'获取极验session失败,错误信息:{e}') 178 | time.sleep(4) 179 | 180 | 181 | def pop_session(): 182 | """从池子中弹出极验session""" 183 | res = client.zrevrange(geetest_session_key, 0, 0, withscores=True) 184 | if res: 185 | g_session, score = res[0] 186 | g_session = pickle.loads(g_session) 187 | client.zremrangebyscore(geetest_session_key, min=score, max=score) 188 | return g_session 189 | return None 190 | 191 | 192 | def expire_schedule(): 193 | """定期删除1小时前的session,达到过期效果""" 194 | client.zremrangebyscore(geetest_session_key, 0, time.time() - 3600) 195 | timer = threading.Timer(2, expire_schedule) 196 | timer.start() 197 | 198 | 199 | def check_session_pool(): 200 | """检查session池子""" 201 | while True: 202 | num = client.zcard(geetest_session_key) 203 | if num < min_threshold: 204 | # 此处可以自行设置告警,及时通知开发人员 205 | logger.error(f'极验Session池数量不足{min_threshold}个,请关注,当前数量:{num}') 206 | time.sleep(max_sleep_time) 207 | time.sleep(min_sleep_time) 208 | 209 | 210 | if __name__ == '__main__': 211 | threads = [Thread(target=produce_session) for _ in range(4)] + [Thread(target=expire_schedule)] + [ 212 | Thread(target=check_session_pool)] 213 | for thread in threads: 214 | thread.start() 215 | -------------------------------------------------------------------------------- /geetest_crack/js/encrypt.js: -------------------------------------------------------------------------------- 1 | const window = {}; 2 | var vwBb = function () { 3 | function wQsQ() { 4 | this["i"] = 0; 5 | this["j"] = 0; 6 | this["S"] = []; 7 | } 8 | function xkoz(e) { 9 | var t, r, n; 10 | for (t = 0; t < 256; ++t) 11 | this["S"][t] = t; 12 | r = 0; 13 | for (t = 0; t < 256; ++t) { 14 | r = r + this["S"][t] + e[t % e["length"]] & 255; 15 | n = this["S"][t]; 16 | this["S"][t] = this["S"][r]; 17 | this["S"][r] = n; 18 | } 19 | this["i"] = 0; 20 | this["j"] = 0; 21 | } 22 | function yozv() { 23 | var e; 24 | this["i"] = this["i"] + 1 & 255; 25 | this["j"] = this["j"] + this["S"][this["i"]] & 255; 26 | e = this["S"][this["i"]]; 27 | this["S"][this["i"]] = this["S"][this["j"]]; 28 | this["S"][this["j"]] = e; 29 | return this["S"][e + this["S"][this["i"]] & 255]; 30 | } 31 | wQsQ["prototype"]["init"] = xkoz; 32 | wQsQ["prototype"]["next"] = yozv; 33 | function AxEu() { 34 | return new wQsQ(); 35 | } 36 | var n = 256; 37 | var t; 38 | var i; 39 | var a; 40 | if (i == null) { 41 | i = []; 42 | a = 0; 43 | var e; 44 | if (window["crypto"] && window["crypto"]["getRandomValues"]) { 45 | var r = new Uint32Array(256); 46 | window["crypto"]["getRandomValues"](r); 47 | for (e = 0; e < r["length"]; ++e) 48 | i[a++] = r[e] & 255; 49 | } 50 | var o = 0; 51 | function s(e) { 52 | o = o || 0; 53 | if (o >= 256 || a >= n) { 54 | if (window["removeEventListener"]) { 55 | o = 0; 56 | window["removeEventListener"]("mousemove", s, false); 57 | } else if (window["detachEvent"]) { 58 | o = 0; 59 | window["detachEvent"]("onmousemove", s); 60 | } 61 | return; 62 | } 63 | try { 64 | var t = e["x"] + e["y"]; 65 | i[a++] = t & 255; 66 | o += 1; 67 | } catch (r) { } 68 | } 69 | if (window["addEventListener"]) 70 | window["addEventListener"]("mousemove", s, false); 71 | else if (window["attachEvent"]) 72 | window["attachEvent"]("onmousemove", s); 73 | } 74 | function Bxpm() { 75 | if (t == null) { 76 | t = AxEu(); 77 | while (a < n) { 78 | var e = Math["floor"](65536 * Math["random"]()); 79 | i[a++] = e & 255; 80 | } 81 | t["init"](i); 82 | for (a = 0; a < i["length"]; ++a) 83 | i[a] = 0; 84 | a = 0; 85 | } 86 | return t["next"](); 87 | } 88 | function CQvy(e) { 89 | var t; 90 | for (t = 0; t < e["length"]; ++t) 91 | e[t] = Bxpm(); 92 | } 93 | function DZdA() { 94 | } 95 | DZdA["prototype"]["nextBytes"] = CQvy; 96 | var c; 97 | var u = 0xdeadbeefcafe; 98 | var l = (u & 16777215) == 15715070; 99 | function ECgw(e, t, r) { 100 | if (e != null) 101 | if ("number" == typeof e) 102 | this["fromNumber"](e, t, r); 103 | else if (t == null && "string" != typeof e) 104 | this["fromString"](e, 256); 105 | else 106 | this["fromString"](e, t); 107 | } 108 | function FfCQ() { 109 | return new ECgw(null); 110 | } 111 | function GfOf(e, t, r, n, i, a) { 112 | while (--a >= 0) { 113 | var o = t * this[e++] + r[n] + i; 114 | i = Math["floor"](o / 67108864); 115 | r[n++] = o & 67108863; 116 | } 117 | return i; 118 | } 119 | function HspZ(e, t, r, n, i, a) { 120 | var o = t & 32767 121 | , s = t >> 15; 122 | while (--a >= 0) { 123 | var c = this[e] & 32767; 124 | var u = this[e++] >> 15; 125 | var l = s * c + u * o; 126 | c = o * c + ((l & 32767) << 15) + r[n] + (i & 1073741823); 127 | i = (c >>> 30) + (l >>> 15) + s * u + (i >>> 30); 128 | r[n++] = c & 1073741823; 129 | } 130 | return i; 131 | } 132 | function IgTQ(e, t, r, n, i, a) { 133 | var o = t & 16383 134 | , s = t >> 14; 135 | while (--a >= 0) { 136 | var c = this[e] & 16383; 137 | var u = this[e++] >> 14; 138 | var l = s * c + u * o; 139 | c = o * c + ((l & 16383) << 14) + r[n] + i; 140 | i = (c >> 28) + (l >> 14) + s * u; 141 | r[n++] = c & 268435455; 142 | } 143 | return i; 144 | } 145 | // if (l && navigator["appName"] == "Microsoft Internet Explorer") { 146 | // ECgw["prototype"]["am"] = HspZ; 147 | // c = 30; 148 | // } else if (l && navigator["appName"] != "Netscape") { 149 | // ECgw["prototype"]["am"] = GfOf; 150 | // c = 26; 151 | // } else { 152 | // ECgw["prototype"]["am"] = IgTQ; 153 | // c = 28; 154 | // } 155 | ECgw["prototype"]["am"] = IgTQ; 156 | c = 28; 157 | 158 | ECgw["prototype"]["DB"] = c; 159 | ECgw["prototype"]["DM"] = (1 << c) - 1; 160 | ECgw["prototype"]["DV"] = 1 << c; 161 | var f = 52; 162 | ECgw["prototype"]["FV"] = Math["pow"](2, f); 163 | ECgw["prototype"]["F1"] = f - c; 164 | ECgw["prototype"]["F2"] = 2 * c - f; 165 | var _ = "0123456789abcdefghijklmnopqrstuvwxyz"; 166 | var h = []; 167 | var d, p; 168 | d = "0"["charCodeAt"](0); 169 | for (p = 0; p <= 9; ++p) 170 | h[d++] = p; 171 | d = "a"["charCodeAt"](0); 172 | for (p = 10; p < 36; ++p) 173 | h[d++] = p; 174 | d = "A"["charCodeAt"](0); 175 | for (p = 10; p < 36; ++p) 176 | h[d++] = p; 177 | function JgdB(e) { 178 | return _["charAt"](e); 179 | } 180 | function KoqK(e, t) { 181 | var r = h[e["charCodeAt"](t)]; 182 | return r == null ? -1 : r; 183 | } 184 | function LyUc(e) { 185 | for (var t = this["t"] - 1; t >= 0; --t) 186 | e[t] = this[t]; 187 | e["t"] = this["t"]; 188 | e["s"] = this["s"]; 189 | } 190 | function MDPU(e) { 191 | this["t"] = 1; 192 | this["s"] = e < 0 ? -1 : 0; 193 | if (e > 0) 194 | this[0] = e; 195 | else if (e < -1) 196 | this[0] = e + this["DV"]; 197 | else 198 | this["t"] = 0; 199 | } 200 | function NrhG(e) { 201 | var t = FfCQ(); 202 | t["fromInt"](e); 203 | return t; 204 | } 205 | function OEWn(e, t) { 206 | var r; 207 | if (t == 16) 208 | r = 4; 209 | else if (t == 8) 210 | r = 3; 211 | else if (t == 256) 212 | r = 8; 213 | else if (t == 2) 214 | r = 1; 215 | else if (t == 32) 216 | r = 5; 217 | else if (t == 4) 218 | r = 2; 219 | else { 220 | this["fromRadix"](e, t); 221 | return; 222 | } 223 | this["t"] = 0; 224 | this["s"] = 0; 225 | var n = e["length"] 226 | , i = false 227 | , a = 0; 228 | while (--n >= 0) { 229 | var o = r == 8 ? e[n] & 255 : KoqK(e, n); 230 | if (o < 0) { 231 | if (e["charAt"](n) == "-") 232 | i = true; 233 | continue; 234 | } 235 | i = false; 236 | if (a == 0) 237 | this[this["t"]++] = o; 238 | else if (a + r > this["DB"]) { 239 | this[this["t"] - 1] |= (o & (1 << this["DB"] - a) - 1) << a; 240 | this[this["t"]++] = o >> this["DB"] - a; 241 | } else 242 | this[this["t"] - 1] |= o << a; 243 | a += r; 244 | if (a >= this["DB"]) 245 | a -= this["DB"]; 246 | } 247 | if (r == 8 && (e[0] & 128) != 0) { 248 | this["s"] = -1; 249 | if (a > 0) 250 | this[this["t"] - 1] |= (1 << this["DB"] - a) - 1 << a; 251 | } 252 | this["clamp"](); 253 | if (i) 254 | ECgw["ZERO"]["subTo"](this, this); 255 | } 256 | function PrRe() { 257 | var e = this["s"] & this["DM"]; 258 | while (this["t"] > 0 && this[this["t"] - 1] == e) 259 | --this["t"]; 260 | } 261 | function Qkzj(e) { 262 | if (this["s"] < 0) 263 | return "-" + this["negate"]()["toString"](e); 264 | var t; 265 | if (e == 16) 266 | t = 4; 267 | else if (e == 8) 268 | t = 3; 269 | else if (e == 2) 270 | t = 1; 271 | else if (e == 32) 272 | t = 5; 273 | else if (e == 4) 274 | t = 2; 275 | else 276 | return this["toRadix"](e); 277 | var r = (1 << t) - 1, n, i = false, a = "", o = this["t"]; 278 | var s = this["DB"] - o * this["DB"] % t; 279 | if (o-- > 0) { 280 | if (s < this["DB"] && (n = this[o] >> s) > 0) { 281 | i = true; 282 | a = JgdB(n); 283 | } 284 | while (o >= 0) { 285 | if (s < t) { 286 | n = (this[o] & (1 << s) - 1) << t - s; 287 | n |= this[--o] >> (s += this["DB"] - t); 288 | } else { 289 | n = this[o] >> (s -= t) & r; 290 | if (s <= 0) { 291 | s += this["DB"]; 292 | --o; 293 | } 294 | } 295 | if (n > 0) 296 | i = true; 297 | if (i) 298 | a += JgdB(n); 299 | } 300 | } 301 | return i ? a : "0"; 302 | } 303 | function RjsS() { 304 | var e = FfCQ(); 305 | ECgw["ZERO"]["subTo"](this, e); 306 | return e; 307 | } 308 | function SXeD() { 309 | return this["s"] < 0 ? this["negate"]() : this; 310 | } 311 | function TQCz(e) { 312 | var t = this["s"] - e["s"]; 313 | if (t != 0) 314 | return t; 315 | var r = this["t"]; 316 | t = r - e["t"]; 317 | if (t != 0) 318 | return this["s"] < 0 ? -t : t; 319 | while (--r >= 0) 320 | if ((t = this[r] - e[r]) != 0) 321 | return t; 322 | return 0; 323 | } 324 | function UyZO(e) { 325 | var t = 1, r; 326 | if ((r = e >>> 16) != 0) { 327 | e = r; 328 | t += 16; 329 | } 330 | if ((r = e >> 8) != 0) { 331 | e = r; 332 | t += 8; 333 | } 334 | if ((r = e >> 4) != 0) { 335 | e = r; 336 | t += 4; 337 | } 338 | if ((r = e >> 2) != 0) { 339 | e = r; 340 | t += 2; 341 | } 342 | if ((r = e >> 1) != 0) { 343 | e = r; 344 | t += 1; 345 | } 346 | return t; 347 | } 348 | function VHpY() { 349 | if (this["t"] <= 0) 350 | return 0; 351 | return this["DB"] * (this["t"] - 1) + UyZO(this[this["t"] - 1] ^ this["s"] & this["DM"]); 352 | } 353 | function Wacq(e, t) { 354 | var r; 355 | for (r = this["t"] - 1; r >= 0; --r) 356 | t[r + e] = this[r]; 357 | for (r = e - 1; r >= 0; --r) 358 | t[r] = 0; 359 | t["t"] = this["t"] + e; 360 | t["s"] = this["s"]; 361 | } 362 | function XMQd(e, t) { 363 | for (var r = e; r < this["t"]; ++r) 364 | t[r - e] = this[r]; 365 | t["t"] = Math["max"](this["t"] - e, 0); 366 | t["s"] = this["s"]; 367 | } 368 | function YZCv(e, t) { 369 | var r = e % this["DB"]; 370 | var n = this["DB"] - r; 371 | var i = (1 << n) - 1; 372 | var a = Math["floor"](e / this["DB"]), o = this["s"] << r & this["DM"], s; 373 | for (s = this["t"] - 1; s >= 0; --s) { 374 | t[s + a + 1] = this[s] >> n | o; 375 | o = (this[s] & i) << r; 376 | } 377 | for (s = a - 1; s >= 0; --s) 378 | t[s] = 0; 379 | t[a] = o; 380 | t["t"] = this["t"] + a + 1; 381 | t["s"] = this["s"]; 382 | t["clamp"](); 383 | } 384 | function ZFYE(e, t) { 385 | t["s"] = this["s"]; 386 | var r = Math["floor"](e / this["DB"]); 387 | if (r >= this["t"]) { 388 | t["t"] = 0; 389 | return; 390 | } 391 | var n = e % this["DB"]; 392 | var i = this["DB"] - n; 393 | var a = (1 << n) - 1; 394 | t[0] = this[r] >> n; 395 | for (var o = r + 1; o < this["t"]; ++o) { 396 | t[o - r - 1] |= (this[o] & a) << i; 397 | t[o - r] = this[o] >> n; 398 | } 399 | if (n > 0) 400 | t[this["t"] - r - 1] |= (this["s"] & a) << i; 401 | t["t"] = this["t"] - r; 402 | t["clamp"](); 403 | } 404 | function akDh(e, t) { 405 | var r = 0 406 | , n = 0 407 | , i = Math["min"](e["t"], this["t"]); 408 | while (r < i) { 409 | n += this[r] - e[r]; 410 | t[r++] = n & this["DM"]; 411 | n >>= this["DB"]; 412 | } 413 | if (e["t"] < this["t"]) { 414 | n -= e["s"]; 415 | while (r < this["t"]) { 416 | n += this[r]; 417 | t[r++] = n & this["DM"]; 418 | n >>= this["DB"]; 419 | } 420 | n += this["s"]; 421 | } else { 422 | n += this["s"]; 423 | while (r < e["t"]) { 424 | n -= e[r]; 425 | t[r++] = n & this["DM"]; 426 | n >>= this["DB"]; 427 | } 428 | n -= e["s"]; 429 | } 430 | t["s"] = n < 0 ? -1 : 0; 431 | if (n < -1) 432 | t[r++] = this["DV"] + n; 433 | else if (n > 0) 434 | t[r++] = n; 435 | t["t"] = r; 436 | t["clamp"](); 437 | } 438 | function bpSt(e, t) { 439 | var r = this["abs"]() 440 | , n = e["abs"](); 441 | var i = r["t"]; 442 | t["t"] = i + n["t"]; 443 | while (--i >= 0) 444 | t[i] = 0; 445 | for (i = 0; i < n["t"]; ++i) 446 | t[i + r["t"]] = r["am"](0, n[i], t, i, 0, r["t"]); 447 | t["s"] = 0; 448 | t["clamp"](); 449 | if (this["s"] != e["s"]) 450 | ECgw["ZERO"]["subTo"](t, t); 451 | } 452 | 453 | function ceLN(e) { 454 | var t = this["abs"](); 455 | var r = e["t"] = 2 * t["t"]; 456 | while (--r >= 0) 457 | e[r] = 0; 458 | for (r = 0; r < t["t"] - 1; ++r) { 459 | var n = t["am"](r, t[r], e, 2 * r, 0, 1); 460 | if ((e[r + t["t"]] += t["am"](r + 1, 2 * t[r], e, 2 * r + 1, n, t["t"] - r - 1)) >= t["DV"]) { 461 | e[r + t["t"]] -= t["DV"]; 462 | e[r + t["t"] + 1] = 1; 463 | } 464 | } 465 | if (e["t"] > 0) 466 | e[e["t"] - 1] += t["am"](r, t[r], e, 2 * r, 0, 1); 467 | e["s"] = 0; 468 | e["clamp"](); 469 | } 470 | function dHfY(e, t, r) { 471 | var n = e["abs"](); 472 | if (n["t"] <= 0) 473 | return; 474 | var i = this["abs"](); 475 | if (i["t"] < n["t"]) { 476 | if (t != null) 477 | t["fromInt"](0); 478 | if (r != null) 479 | this["copyTo"](r); 480 | return; 481 | } 482 | if (r == null) 483 | r = FfCQ(); 484 | var a = FfCQ() 485 | , o = this["s"] 486 | , s = e["s"]; 487 | var c = this["DB"] - UyZO(n[n["t"] - 1]); 488 | if (c > 0) { 489 | n["lShiftTo"](c, a); 490 | i["lShiftTo"](c, r); 491 | } else { 492 | n["copyTo"](a); 493 | i["copyTo"](r); 494 | } 495 | var u = a["t"]; 496 | var l = a[u - 1]; 497 | if (l == 0) 498 | return; 499 | var f = l * (1 << this["F1"]) + (u > 1 ? a[u - 2] >> this["F2"] : 0); 500 | var _ = this["FV"] / f 501 | , h = (1 << this["F1"]) / f 502 | , d = 1 << this["F2"]; 503 | var p = r["t"] 504 | , v = p - u 505 | , g = t == null ? FfCQ() : t; 506 | a["dlShiftTo"](v, g); 507 | if (r["compareTo"](g) >= 0) { 508 | r[r["t"]++] = 1; 509 | r["subTo"](g, r); 510 | } 511 | ECgw["ONE"]["dlShiftTo"](u, g); 512 | g["subTo"](a, a); 513 | while (a["t"] < u) 514 | a[a["t"]++] = 0; 515 | while (--v >= 0) { 516 | var m = r[--p] == l ? this["DM"] : Math["floor"](r[p] * _ + (r[p - 1] + d) * h); 517 | if ((r[p] += a["am"](0, m, r, v, 0, u)) < m) { 518 | a["dlShiftTo"](v, g); 519 | r["subTo"](g, r); 520 | while (r[p] < --m) 521 | r["subTo"](g, r); 522 | } 523 | } 524 | if (t != null) { 525 | r["drShiftTo"](u, t); 526 | if (o != s) 527 | ECgw["ZERO"]["subTo"](t, t); 528 | } 529 | r["t"] = u; 530 | r["clamp"](); 531 | if (c > 0) 532 | r["rShiftTo"](c, r); 533 | if (o < 0) 534 | ECgw["ZERO"]["subTo"](r, r); 535 | } 536 | function eGqu(e) { 537 | var t = FfCQ(); 538 | this["abs"]()["divRemTo"](e, null, t); 539 | if (this["s"] < 0 && t["compareTo"](ECgw["ZERO"]) > 0) 540 | e["subTo"](t, t); 541 | return t; 542 | } 543 | function fXGL(e) { 544 | this["m"] = e; 545 | } 546 | function gjxd(e) { 547 | if (e["s"] < 0 || e["compareTo"](this["m"]) >= 0) 548 | return e["mod"](this["m"]); 549 | else 550 | return e; 551 | } 552 | function hTyL(e) { 553 | return e; 554 | } 555 | function iwgX(e) { 556 | e["divRemTo"](this["m"], null, e); 557 | } 558 | function jQpV(e, t, r) { 559 | e["multiplyTo"](t, r); 560 | this["reduce"](r); 561 | } 562 | function kfEF(e, t) { 563 | e["squareTo"](t); 564 | this["reduce"](t); 565 | } 566 | fXGL["prototype"]["convert"] = gjxd; 567 | fXGL["prototype"]["revert"] = hTyL; 568 | fXGL["prototype"]["reduce"] = iwgX; 569 | fXGL["prototype"]["mulTo"] = jQpV; 570 | fXGL["prototype"]["sqrTo"] = kfEF; 571 | function lhWI() { 572 | if (this["t"] < 1) 573 | return 0; 574 | var e = this[0]; 575 | if ((e & 1) == 0) 576 | return 0; 577 | var t = e & 3; 578 | t = t * (2 - (e & 15) * t) & 15; 579 | t = t * (2 - (e & 255) * t) & 255; 580 | t = t * (2 - ((e & 65535) * t & 65535)) & 65535; 581 | t = t * (2 - e * t % this["DV"]) % this["DV"]; 582 | return t > 0 ? this["DV"] - t : -t; 583 | } 584 | function mOQz(e) { 585 | this["m"] = e; 586 | this["mp"] = e["invDigit"](); 587 | this["mpl"] = this["mp"] & 32767; 588 | this["mph"] = this["mp"] >> 15; 589 | this["um"] = (1 << e["DB"] - 15) - 1; 590 | this["mt2"] = 2 * e["t"]; 591 | } 592 | function nPnU(e) { 593 | var t = FfCQ(); 594 | e["abs"]()["dlShiftTo"](this["m"]["t"], t); 595 | t["divRemTo"](this["m"], null, t); 596 | if (e["s"] < 0 && t["compareTo"](ECgw["ZERO"]) > 0) 597 | this["m"]["subTo"](t, t); 598 | return t; 599 | } 600 | function oMQg(e) { 601 | var t = FfCQ(); 602 | e["copyTo"](t); 603 | this["reduce"](t); 604 | return t; 605 | } 606 | function pGxD(e) { 607 | while (e["t"] <= this["mt2"]) 608 | e[e["t"]++] = 0; 609 | for (var t = 0; t < this["m"]["t"]; ++t) { 610 | var r = e[t] & 32767; 611 | var n = r * this["mpl"] + ((r * this["mph"] + (e[t] >> 15) * this["mpl"] & this["um"]) << 15) & e["DM"]; 612 | r = t + this["m"]["t"]; 613 | e[r] += this["m"]["am"](0, n, e, t, 0, this["m"]["t"]); 614 | while (e[r] >= e["DV"]) { 615 | e[r] -= e["DV"]; 616 | e[++r]++; 617 | } 618 | } 619 | e["clamp"](); 620 | e["drShiftTo"](this["m"]["t"], e); 621 | if (e["compareTo"](this["m"]) >= 0) 622 | e["subTo"](this["m"], e); 623 | } 624 | function qngB(e, t) { 625 | e["squareTo"](t); 626 | this["reduce"](t); 627 | } 628 | function rOhP(e, t, r) { 629 | e["multiplyTo"](t, r); 630 | this["reduce"](r); 631 | } 632 | mOQz["prototype"]["convert"] = nPnU; 633 | mOQz["prototype"]["revert"] = oMQg; 634 | mOQz["prototype"]["reduce"] = pGxD; 635 | mOQz["prototype"]["mulTo"] = rOhP; 636 | mOQz["prototype"]["sqrTo"] = qngB; 637 | function stSt() { 638 | return (this["t"] > 0 ? this[0] & 1 : this["s"]) == 0; 639 | } 640 | function tLLD(e, t) { 641 | if (e > 4294967295 || e < 1) 642 | return ECgw["ONE"]; 643 | var r = FfCQ() 644 | , n = FfCQ() 645 | , i = t["convert"](this) 646 | , a = UyZO(e) - 1; 647 | i["copyTo"](r); 648 | while (--a >= 0) { 649 | t["sqrTo"](r, n); 650 | if ((e & 1 << a) > 0) 651 | t["mulTo"](n, i, r); 652 | else { 653 | var o = r; 654 | r = n; 655 | n = o; 656 | } 657 | } 658 | return t["revert"](r); 659 | } 660 | function ulWS(e, t) { 661 | var r; 662 | if (e < 256 || t["isEven"]()) 663 | r = new fXGL(t); 664 | else 665 | r = new mOQz(t); 666 | return this["exp"](e, r); 667 | } 668 | ECgw["prototype"]["copyTo"] = LyUc; 669 | ECgw["prototype"]["fromInt"] = MDPU; 670 | ECgw["prototype"]["fromString"] = OEWn; 671 | ECgw["prototype"]["clamp"] = PrRe; 672 | ECgw["prototype"]["dlShiftTo"] = Wacq; 673 | ECgw["prototype"]["drShiftTo"] = XMQd; 674 | ECgw["prototype"]["lShiftTo"] = YZCv; 675 | ECgw["prototype"]["rShiftTo"] = ZFYE; 676 | ECgw["prototype"]["subTo"] = akDh; 677 | ECgw["prototype"]["multiplyTo"] = bpSt; 678 | ECgw["prototype"]["squareTo"] = ceLN; 679 | ECgw["prototype"]["divRemTo"] = dHfY; 680 | ECgw["prototype"]["invDigit"] = lhWI; 681 | ECgw["prototype"]["isEven"] = stSt; 682 | ECgw["prototype"]["exp"] = tLLD; 683 | ECgw["prototype"]["toString"] = Qkzj; 684 | ECgw["prototype"]["negate"] = RjsS; 685 | ECgw["prototype"]["abs"] = SXeD; 686 | ECgw["prototype"]["compareTo"] = TQCz; 687 | ECgw["prototype"]["bitLength"] = VHpY; 688 | ECgw["prototype"]["mod"] = eGqu; 689 | ECgw["prototype"]["modPowInt"] = ulWS; 690 | ECgw["ZERO"] = NrhG(0); 691 | ECgw["ONE"] = NrhG(1); 692 | function vyPg(e, t) { 693 | return new ECgw(e, t); 694 | } 695 | function wYWb(e, t) { 696 | if (t < e["length"] + 11) { 697 | console["error"]("Message too long for RSA"); 698 | return null; 699 | } 700 | var r = []; 701 | var n = e["length"] - 1; 702 | while (n >= 0 && t > 0) { 703 | var i = e["charCodeAt"](n--); 704 | if (i < 128) { 705 | r[--t] = i; 706 | } else if (i > 127 && i < 2048) { 707 | r[--t] = i & 63 | 128; 708 | r[--t] = i >> 6 | 192; 709 | } else { 710 | r[--t] = i & 63 | 128; 711 | r[--t] = i >> 6 & 63 | 128; 712 | r[--t] = i >> 12 | 224; 713 | } 714 | } 715 | r[--t] = 0; 716 | var a = new DZdA(); 717 | var o = []; 718 | while (t > 2) { 719 | o[0] = 0; 720 | while (o[0] == 0) 721 | a["nextBytes"](o); 722 | r[--t] = o[0]; 723 | } 724 | r[--t] = 2; 725 | r[--t] = 0; 726 | return new ECgw(r); 727 | } 728 | function vwBb() { 729 | this["n"] = null; 730 | this["e"] = 0; 731 | this["d"] = null; 732 | this["p"] = null; 733 | this["q"] = null; 734 | this["dmp1"] = null; 735 | this["dmq1"] = null; 736 | this["coeff"] = null; 737 | var e = "00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81"; 738 | var t = "10001"; 739 | this["setPublic"](e, t); 740 | } 741 | function xVcK(e, t) { 742 | if (e != null && t != null && e["length"] > 0 && t["length"] > 0) { 743 | this["n"] = vyPg(e, 16); 744 | this["e"] = parseInt(t, 16); 745 | } else 746 | console["error"]("Invalid RSA public key"); 747 | } 748 | function yPfI(e) { 749 | return e["modPowInt"](this["e"], this["n"]); 750 | } 751 | function AlTp(e) { 752 | var t = wYWb(e, this["n"]["bitLength"]() + 7 >> 3); 753 | if (t == null) 754 | return null; 755 | var r = this["doPublic"](t); 756 | if (r == null) 757 | return null; 758 | var n = r["toString"](16); 759 | if ((n["length"] & 1) == 0) 760 | return n; 761 | else 762 | return "0" + n; 763 | } 764 | vwBb["prototype"]["doPublic"] = yPfI; 765 | vwBb["prototype"]["setPublic"] = xVcK; 766 | vwBb["prototype"]["encrypt"] = AlTp; 767 | return vwBb; 768 | }(); 769 | 770 | 771 | 772 | function vUUf() { 773 | var r = Object["create"] || function() { 774 | function F() { 775 | } 776 | return function(e) { 777 | var t; 778 | F["prototype"] = e; 779 | t = new F(); 780 | F["prototype"] = null; 781 | return t; 782 | } 783 | ; 784 | }(); 785 | var e = {}; 786 | var t = e["lib"] = {}; 787 | var n = t["Base"] = function() { 788 | return { 789 | "RAIS": function(e) { 790 | var t = r(this); 791 | if (e) { 792 | t["mixIn"](e); 793 | } 794 | if (!t["hasOwnProperty"]("init") || this["init"] === t["init"]) { 795 | t["init"] = function() { 796 | t["$super"]["init"]["apply"](this, arguments); 797 | } 798 | ; 799 | } 800 | t["init"]["prototype"] = t; 801 | t["$super"] = this; 802 | return t; 803 | }, 804 | "create": function() { 805 | var e = this["RAIS"](); 806 | e["init"]["apply"](e, arguments); 807 | return e; 808 | }, 809 | "init": function() { 810 | }, 811 | "mixIn": function(e) { 812 | for (var t in e) { 813 | if (e["hasOwnProperty"](t)) { 814 | this[t] = e[t]; 815 | } 816 | } 817 | if (e["hasOwnProperty"]("toString")) { 818 | this["toString"] = e["toString"]; 819 | } 820 | } 821 | }; 822 | }(); 823 | var f = t["WordArray"] = n["RAIS"]({ 824 | "init": function(e, t) { 825 | e = this["words"] = e || []; 826 | if (t != undefined) { 827 | this["sigBytes"] = t; 828 | } else { 829 | this["sigBytes"] = e["length"] * 4; 830 | } 831 | }, 832 | "concat": function(e) { 833 | var t = this["words"]; 834 | var r = e["words"]; 835 | var n = this["sigBytes"]; 836 | var i = e["sigBytes"]; 837 | this["clamp"](); 838 | if (n % 4) { 839 | for (var a = 0; a < i; a++) { 840 | var o = r[a >>> 2] >>> 24 - a % 4 * 8 & 255; 841 | t[n + a >>> 2] |= o << 24 - (n + a) % 4 * 8; 842 | } 843 | } else { 844 | for (var a = 0; a < i; a += 4) { 845 | t[n + a >>> 2] = r[a >>> 2]; 846 | } 847 | } 848 | this["sigBytes"] += i; 849 | return this; 850 | }, 851 | "clamp": function() { 852 | var e = this["words"]; 853 | var t = this["sigBytes"]; 854 | e[t >>> 2] &= 4294967295 << 32 - t % 4 * 8; 855 | e["length"] = Math["ceil"](t / 4); 856 | } 857 | }); 858 | var i = e["enc"] = {}; 859 | var _ = i["Latin1"] = { 860 | "parse": function(e) { 861 | // console.log(e); 862 | 863 | var t = e["length"]; 864 | var r = []; 865 | for (var n = 0; n < t; n++) { 866 | r[n >>> 2] |= (e["charCodeAt"](n) & 255) << 24 - n % 4 * 8; 867 | } 868 | return new f[("init")](r,t); 869 | } 870 | }; 871 | var a = i["Utf8"] = { 872 | "parse": function(e) { 873 | return _["parse"](unescape(encodeURIComponent(e))); 874 | } 875 | }; 876 | var o = t["BufferedBlockAlgorithm"] = n["RAIS"]({ 877 | "reset": function() { 878 | this["IBDR"] = new f[("init")](); 879 | this["aboq"] = 0; 880 | }, 881 | "beSP": function(e) { 882 | if (typeof e == "string") { 883 | e = a["parse"](e); 884 | } 885 | this["IBDR"]["concat"](e); 886 | this["aboq"] += e["sigBytes"]; 887 | }, 888 | "cVhj": function(e) { 889 | var t = this["IBDR"]; 890 | var r = t["words"]; 891 | var n = t["sigBytes"]; 892 | var i = this["blockSize"]; 893 | var a = i * 4; 894 | var o = n / a; 895 | if (e) { 896 | o = Math["ceil"](o); 897 | } else { 898 | o = Math["max"]((o | 0) - this["dIWA"], 0); 899 | } 900 | var s = o * i; 901 | var c = Math["min"](s * 4, n); 902 | if (s) { 903 | for (var u = 0; u < s; u += i) { 904 | this["etNa"](r, u); 905 | } 906 | var l = r["splice"](0, s); 907 | t["sigBytes"] -= c; 908 | } 909 | return new f[("init")](l,c); 910 | }, 911 | "dIWA": 0 912 | }); 913 | var s = e["algo"] = {}; 914 | var c = t["Cipher"] = o["RAIS"]({ 915 | "cfg": n["RAIS"](), 916 | "createEncryptor": function(e, t) { 917 | return this["create"](this["fUWQ"], e, t); 918 | }, 919 | "init": function(e, t, r) { 920 | this["cfg"] = this["cfg"]["RAIS"](r); 921 | this["gOzX"] = e; 922 | this["hN_h"] = t; 923 | this["reset"](); 924 | }, 925 | "reset": function() { 926 | o["reset"]["call"](this); 927 | this["ieEa"](); 928 | }, 929 | "process": function(e) { 930 | this["beSP"](e); 931 | return this["cVhj"](); 932 | }, 933 | "finalize": function(e) { 934 | if (e) { 935 | this["beSP"](e); 936 | } 937 | var t = this["jvF_"](); 938 | return t; 939 | }, 940 | "keySize": 128 / 32, 941 | "ivSize": 128 / 32, 942 | "fUWQ": 1, 943 | "kqYl": 2, 944 | "lFmq": function() { 945 | return function(u) { 946 | var l = 0 947 | , f = []; 948 | return { 949 | "encrypt": function(e, t, r) { 950 | undefined; 951 | var t = _["parse"](t); 952 | if (!r || !r["iv"]) { 953 | r = r || {}; 954 | r["iv"] = _["parse"]("0000000000000000"); 955 | } 956 | var n = m["encrypt"](u, e, t, r); 957 | undefined; 958 | var i = n["ciphertext"]["words"]; 959 | undefined; 960 | var a = n["ciphertext"]["sigBytes"]; 961 | l === 0 && f["push"](a); 962 | l === 0 && f["push"](a); 963 | l++; 964 | f["push"](a); 965 | a = f["shift"](); 966 | var o = []; 967 | for (var s = 0; s < a; s++) { 968 | var c = i[s >>> 2] >>> 24 - s % 4 * 8 & 255; 969 | o["push"](c); 970 | } 971 | return o; 972 | }, 973 | "encrypt1": function(e, t, r) { 974 | var t = _["parse"](t); 975 | if (!r || !r["iv"]) { 976 | r = r || {}; 977 | r["iv"] = _["parse"]("0000000000000000"); 978 | } 979 | var n = m["encrypt"](u, e, t, r); 980 | var i = n["ciphertext"]["words"]; 981 | var a = n["ciphertext"]["sigBytes"]; 982 | var o = []; 983 | for (var s = 0; s < a; s++) { 984 | var c = i[s >>> 2] >>> 24 - s % 4 * 8 & 255; 985 | o["push"](c); 986 | } 987 | return o; 988 | } 989 | }; 990 | } 991 | ; 992 | }() 993 | }); 994 | var u = e["mode"] = {}; 995 | var l = t["BlockCipherMode"] = n["RAIS"]({ 996 | "createEncryptor": function(e, t) { 997 | return this["Encryptor"]["create"](e, t); 998 | }, 999 | "init": function(e, t) { 1000 | this["mvyv"] = e; 1001 | this["nvgX"] = t; 1002 | } 1003 | }); 1004 | var h = u["CBC"] = function() { 1005 | var e = l["RAIS"](); 1006 | e["Encryptor"] = e["RAIS"]({ 1007 | "processBlock": function(e, t) { 1008 | var r = this["mvyv"]; 1009 | var n = r["blockSize"]; 1010 | wxls["call"](this, e, t, n); 1011 | r["encryptBlock"](e, t); 1012 | this["oToE"] = e["slice"](t, t + n); 1013 | } 1014 | }); 1015 | function wxls(e, t, r) { 1016 | var n = this["nvgX"]; 1017 | if (n) { 1018 | var i = n; 1019 | this["nvgX"] = undefined; 1020 | } else { 1021 | var i = this["oToE"]; 1022 | } 1023 | for (var a = 0; a < r; a++) { 1024 | e[t + a] ^= i[a]; 1025 | } 1026 | } 1027 | return e; 1028 | }(); 1029 | var d = e["pad"] = {}; 1030 | var p = d["Pkcs7"] = { 1031 | "pad": function(e, t) { 1032 | var r = t * 4; 1033 | var n = r - e["sigBytes"] % r; 1034 | var i = n << 24 | n << 16 | n << 8 | n; 1035 | var a = []; 1036 | for (var o = 0; o < n; o += 4) { 1037 | a["push"](i); 1038 | } 1039 | var s = f["create"](a, n); 1040 | e["concat"](s); 1041 | } 1042 | }; 1043 | var v = t["BlockCipher"] = c["RAIS"]({ 1044 | "cfg": c["cfg"]["RAIS"]({ 1045 | "mode": h, 1046 | "padding": p 1047 | }), 1048 | "reset": function() { 1049 | c["reset"]["call"](this); 1050 | var e = this["cfg"]; 1051 | var t = e["iv"]; 1052 | var r = e["mode"]; 1053 | if (this["gOzX"] == this["fUWQ"]) { 1054 | var n = r["createEncryptor"]; 1055 | } 1056 | if (this["pxAj"] && this["pxAj"]["qFEO"] == n) { 1057 | this["pxAj"]["init"](this, t && t["words"]); 1058 | } else { 1059 | this["pxAj"] = n["call"](r, this, t && t["words"]); 1060 | this["pxAj"]["qFEO"] = n; 1061 | } 1062 | }, 1063 | "etNa": function(e, t) { 1064 | this["pxAj"]["processBlock"](e, t); 1065 | }, 1066 | "jvF_": function() { 1067 | var e = this["cfg"]["padding"]; 1068 | if (this["gOzX"] == this["fUWQ"]) { 1069 | e["pad"](this["IBDR"], this["blockSize"]); 1070 | var t = this["cVhj"](!!"flush"); 1071 | } 1072 | return t; 1073 | }, 1074 | "blockSize": 128 / 32 1075 | }); 1076 | var g = t["CipherParams"] = n["RAIS"]({ 1077 | "init": function(e) { 1078 | this["mixIn"](e); 1079 | } 1080 | }); 1081 | var m = t["SerializableCipher"] = n["RAIS"]({ 1082 | "cfg": n["RAIS"](), 1083 | "encrypt": function(e, t, r, n) { 1084 | n = this["cfg"]["RAIS"](n); 1085 | var i = e["createEncryptor"](r, n); 1086 | var a = i["finalize"](t); 1087 | var o = i["cfg"]; 1088 | return g["create"]({ 1089 | "ciphertext": a, 1090 | "key": r, 1091 | "iv": o["iv"], 1092 | "algorithm": e, 1093 | "mode": o["mode"], 1094 | "padding": o["padding"], 1095 | "blockSize": e["blockSize"], 1096 | "formatter": n["format"] 1097 | }); 1098 | } 1099 | }); 1100 | var E = []; 1101 | var w = []; 1102 | var y = []; 1103 | var b = []; 1104 | var T = []; 1105 | var S = []; 1106 | var A = []; 1107 | var R = []; 1108 | var x = []; 1109 | var C = []; 1110 | (function() { 1111 | var e = []; 1112 | for (var t = 0; t < 256; t++) { 1113 | if (t < 128) { 1114 | e[t] = t << 1; 1115 | } else { 1116 | e[t] = t << 1 ^ 283; 1117 | } 1118 | } 1119 | var r = 0; 1120 | var n = 0; 1121 | for (var t = 0; t < 256; t++) { 1122 | var i = n ^ n << 1 ^ n << 2 ^ n << 3 ^ n << 4; 1123 | i = i >>> 8 ^ i & 255 ^ 99; 1124 | E[r] = i; 1125 | w[i] = r; 1126 | var a = e[r]; 1127 | var o = e[a]; 1128 | var s = e[o]; 1129 | var c = e[i] * 257 ^ i * 16843008; 1130 | y[r] = c << 24 | c >>> 8; 1131 | b[r] = c << 16 | c >>> 16; 1132 | T[r] = c << 8 | c >>> 24; 1133 | S[r] = c; 1134 | var c = s * 16843009 ^ o * 65537 ^ a * 257 ^ r * 16843008; 1135 | A[i] = c << 24 | c >>> 8; 1136 | R[i] = c << 16 | c >>> 16; 1137 | x[i] = c << 8 | c >>> 24; 1138 | C[i] = c; 1139 | if (!r) { 1140 | r = n = 1; 1141 | } else { 1142 | r = a ^ e[e[e[s ^ a]]]; 1143 | n ^= e[e[n]]; 1144 | } 1145 | } 1146 | }()); 1147 | var I = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; 1148 | var D = s["AES"] = v["RAIS"]({ 1149 | "ieEa": function() { 1150 | if (this["ryHV"] && this["ssZe"] === this["hN_h"]) { 1151 | return; 1152 | } 1153 | var e = this["ssZe"] = this["hN_h"]; 1154 | var t = e["words"]; 1155 | var r = e["sigBytes"] / 4; 1156 | var n = this["ryHV"] = r + 6; 1157 | var i = (n + 1) * 4; 1158 | var a = this["tsou"] = []; 1159 | for (var o = 0; o < i; o++) { 1160 | if (o < r) { 1161 | a[o] = t[o]; 1162 | } else { 1163 | var s = a[o - 1]; 1164 | if (!(o % r)) { 1165 | s = s << 8 | s >>> 24; 1166 | s = E[s >>> 24] << 24 | E[s >>> 16 & 255] << 16 | E[s >>> 8 & 255] << 8 | E[s & 255]; 1167 | s ^= I[o / r | 0] << 24; 1168 | } else if (r > 6 && o % r == 4) { 1169 | s = E[s >>> 24] << 24 | E[s >>> 16 & 255] << 16 | E[s >>> 8 & 255] << 8 | E[s & 255]; 1170 | } 1171 | a[o] = a[o - r] ^ s; 1172 | } 1173 | } 1174 | var c = this["urZV"] = []; 1175 | for (var u = 0; u < i; u++) { 1176 | var o = i - u; 1177 | if (u % 4) { 1178 | var s = a[o]; 1179 | } else { 1180 | var s = a[o - 4]; 1181 | } 1182 | if (u < 4 || o <= 4) { 1183 | c[u] = s; 1184 | } else { 1185 | c[u] = A[E[s >>> 24]] ^ R[E[s >>> 16 & 255]] ^ x[E[s >>> 8 & 255]] ^ C[E[s & 255]]; 1186 | } 1187 | } 1188 | }, 1189 | "encryptBlock": function(e, t) { 1190 | this["vQBx"](e, t, this["tsou"], y, b, T, S, E); 1191 | }, 1192 | "vQBx": function(e, t, r, n, i, a, o, s) { 1193 | var c = this["ryHV"]; 1194 | var u = e[t] ^ r[0]; 1195 | var l = e[t + 1] ^ r[1]; 1196 | var f = e[t + 2] ^ r[2]; 1197 | var _ = e[t + 3] ^ r[3]; 1198 | var h = 4; 1199 | for (var d = 1; d < c; d++) { 1200 | var p = n[u >>> 24] ^ i[l >>> 16 & 255] ^ a[f >>> 8 & 255] ^ o[_ & 255] ^ r[h++]; 1201 | var v = n[l >>> 24] ^ i[f >>> 16 & 255] ^ a[_ >>> 8 & 255] ^ o[u & 255] ^ r[h++]; 1202 | var g = n[f >>> 24] ^ i[_ >>> 16 & 255] ^ a[u >>> 8 & 255] ^ o[l & 255] ^ r[h++]; 1203 | var m = n[_ >>> 24] ^ i[u >>> 16 & 255] ^ a[l >>> 8 & 255] ^ o[f & 255] ^ r[h++]; 1204 | u = p; 1205 | l = v; 1206 | f = g; 1207 | _ = m; 1208 | } 1209 | var p = (s[u >>> 24] << 24 | s[l >>> 16 & 255] << 16 | s[f >>> 8 & 255] << 8 | s[_ & 255]) ^ r[h++]; 1210 | var v = (s[l >>> 24] << 24 | s[f >>> 16 & 255] << 16 | s[_ >>> 8 & 255] << 8 | s[u & 255]) ^ r[h++]; 1211 | var g = (s[f >>> 24] << 24 | s[_ >>> 16 & 255] << 16 | s[u >>> 8 & 255] << 8 | s[l & 255]) ^ r[h++]; 1212 | var m = (s[_ >>> 24] << 24 | s[u >>> 16 & 255] << 16 | s[l >>> 8 & 255] << 8 | s[f & 255]) ^ r[h++]; 1213 | e[t] = p; 1214 | e[t + 1] = v; 1215 | e[t + 2] = g; 1216 | e[t + 3] = m; 1217 | }, 1218 | "keySize": 256 / 32 1219 | }); 1220 | e["AES"] = v["lFmq"](D); 1221 | return e["AES"]; 1222 | } 1223 | 1224 | 1225 | 1226 | var GxkI = { 1227 | "BtcL": { 1228 | "CWUe": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()", 1229 | "Dkuz": ".", 1230 | "EutS": 7274496, 1231 | "FV_o": 9483264, 1232 | "GYjg": 19220, 1233 | "Hjhi": 235, 1234 | "IPBn": 24 1235 | }, 1236 | "CWUe": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()", 1237 | "Dkuz": ".", 1238 | "EutS": 7274496, 1239 | "FV_o": 9483264, 1240 | "GYjg": 19220, 1241 | "Hjhi": 235, 1242 | "IPBn": 24, 1243 | "JCue": function(e) { 1244 | var t = []; 1245 | for (var r = 0, n = e["length"]; r < n; r += 1) { 1246 | t["push"](e["charCodeAt"](r)); 1247 | } 1248 | return t; 1249 | }, 1250 | "KplX": function(e) { 1251 | var t = ""; 1252 | for (var r = 0, n = e["length"]; r < n; r += 1) { 1253 | t += String["fromCharCode"](e[r]); 1254 | } 1255 | return t; 1256 | }, 1257 | "LZaU": function(e) { 1258 | var t = this["CWUe"]; 1259 | if (e < 0 || e >= t["length"]) { 1260 | return "."; 1261 | } 1262 | return t["charAt"](e); 1263 | }, 1264 | "MkZl": function(e) { 1265 | var t = this["CWUe"]; 1266 | return t["indexOf"](e); 1267 | }, 1268 | "NyXA": function(e, t) { 1269 | return e >> t & 1; 1270 | }, 1271 | "Omvq": function(e, i) { 1272 | var a = this; 1273 | if (!i) { 1274 | i = a; 1275 | } 1276 | function t(e, t) { 1277 | var r = 0; 1278 | for (var n = i["IPBn"] - 1; n >= 0; n -= 1) { 1279 | if (a["NyXA"](t, n) === 1) { 1280 | r = (r << 1) + a["NyXA"](e, n); 1281 | } 1282 | } 1283 | return r; 1284 | } 1285 | var r = "" 1286 | , n = ""; 1287 | var o = e["length"]; 1288 | for (var s = 0; s < o; s += 3) { 1289 | var c; 1290 | if (s + 2 < o) { 1291 | c = (e[s] << 16) + (e[s + 1] << 8) + e[s + 2]; 1292 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])) + a["LZaU"](t(c, i["GYjg"])) + a["LZaU"](t(c, i["Hjhi"])); 1293 | } else { 1294 | var u = o % 3; 1295 | if (u === 2) { 1296 | c = (e[s] << 16) + (e[s + 1] << 8); 1297 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])) + a["LZaU"](t(c, i["GYjg"])); 1298 | n = i["Dkuz"]; 1299 | } else if (u === 1) { 1300 | c = e[s] << 16; 1301 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])); 1302 | n = i["Dkuz"] + i["Dkuz"]; 1303 | } 1304 | } 1305 | } 1306 | return { 1307 | "res": r, 1308 | "end": n 1309 | }; 1310 | }, 1311 | "PwRX": function(e) { 1312 | var t = this; 1313 | var r = t["Omvq"](t["JCue"](e)); 1314 | return r["res"] + r["end"]; 1315 | }, 1316 | "QLsv": function(e) { 1317 | var t = this; 1318 | var r = t["Omvq"](e); 1319 | return r["res"] + r["end"]; 1320 | }, 1321 | "RarB": function(e, a) { 1322 | var o = this; 1323 | if (!a) { 1324 | a = o; 1325 | } 1326 | function t(e, t) { 1327 | if (e < 0) { 1328 | return 0; 1329 | } 1330 | var r = 5; 1331 | var n = 0; 1332 | for (var i = a["IPBn"] - 1; i >= 0; i -= 1) { 1333 | if (o["NyXA"](t, i) === 1) { 1334 | n += o["NyXA"](e, r) << i; 1335 | r -= 1; 1336 | } 1337 | } 1338 | return n; 1339 | } 1340 | var r = e["length"]; 1341 | var n = ""; 1342 | for (var i = 0; i < r; i += 4) { 1343 | var s = t(o["MkZl"](e["charAt"](i)), a["EutS"]) + t(o["MkZl"](e["charAt"](i + 1)), a["FV_o"]) + t(o["MkZl"](e["charAt"](i + 2)), a["GYjg"]) + t(o["MkZl"](e["charAt"](i + 3)), a["Hjhi"]); 1344 | var c = s >> 16 & 255; 1345 | n += String["fromCharCode"](c); 1346 | if (e["charAt"](i + 2) !== a["Dkuz"]) { 1347 | var u = s >> 8 & 255; 1348 | n += String["fromCharCode"](u); 1349 | if (e["charAt"](i + 3) !== a["Dkuz"]) { 1350 | var l = s & 255; 1351 | n += String["fromCharCode"](l); 1352 | } 1353 | } 1354 | } 1355 | return n; 1356 | }, 1357 | "SJjt": function(e) { 1358 | var t = this; 1359 | var r = 4 - e["length"] % 4; 1360 | if (r < 4) { 1361 | for (var n = 0; n < r; n += 1) { 1362 | e += t["Dkuz"]; 1363 | } 1364 | } 1365 | return t["RarB"](e); 1366 | }, 1367 | "TIsR": function(e) { 1368 | var t = this; 1369 | return t["SJjt"](e); 1370 | } 1371 | }; 1372 | 1373 | 1374 | function S() { 1375 | function S4() { 1376 | return ((1 + Math.random()) * 65536 | 0).toString(16).substring(1); 1377 | } 1378 | return S4() + S4() + S4() + S4(); 1379 | } 1380 | 1381 | 1382 | var t = new vwBb()["encrypt"](S()) 1383 | 1384 | // var needed = '{"gt":"29414567350546096e14bb2bc6319ae1","challenge":"e4678818752e5982f612d8757305968a","offline":false,"product":"popup","width":"100%","api_server":"captcha-api.pingan.com","https":true,"protocol":"https://","static_servers":["captcha-static.pingan.com"],"geetest":"/static/js/geetest.5.13.0.js","slide":"/static/js/slide.pingan.1.2.js","click":"/static/js/click.pingan.1.2.js","fullpage":"/static/js/fullpage.pingan.1.3.js","aspect_radio":{"slide":103,"click":128},"type":"fullpage","cc":4,"ww":true,"i":"5498!!15079!!CSS1Compat!!3!!-1!!-1!!-1!!-1!!-1!!-1!!-1!!1!!3!!9!!3!!2!!-1!!-1!!-1!!-1!!-1!!-1!!-1!!-1!!1!!1!!-1!!-1!!-1!!0!!0!!0!!0!!150!!937!!1920!!1040!!zh-CN!!zh-CN,zh!!-1!!1!!24!!Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36!!1!!1!!1920!!1080!!1920!!1040!!1!!1!!1!!-1!!Win32!!0!!-8!!71948b499cc30bdf612cc78c1f26b319!!04de6db98e1f861edab7ec1bdfb800bf!!!!0!!-1!!0!!4!!!!1577776591067!!-1,-1,0,0,0,0,0,22,9,4,8,8,15,438,438,446,-1,-1,-1,-1!!-1!!-1!!33!!-1!!1!!71!!17!!false!!false!!6b1f75"}'; 1385 | 1386 | var s = { 1387 | 'gt': '', 1388 | 'challenge': '', 1389 | 'offline': false, 1390 | 'product': 'popup', 1391 | 'width': '100%', 1392 | 'api_server': 'captcha-api.pingan.com', 1393 | 'https': true, 1394 | 'protocol': 'https://', 1395 | 'static_servers': ['captcha-static.pingan.com'], 1396 | 'geetest': '/static/js/geetest.5.13.0.js', 1397 | 'slide': '/static/js/slide.pingan.1.2.js', 1398 | 'click': '/static/js/click.pingan.1.2.js', 1399 | 'fullpage': '/static/js/fullpage.pingan.1.3.js', 1400 | 'aspect_radio': { 1401 | 'slide': 103, 1402 | 'click': 128 1403 | }, 1404 | 'type': 'fullpage', 1405 | 'cc': 4, 1406 | 'ww': true, 1407 | 'i': 'todo.............' 1408 | } 1409 | 1410 | 1411 | function ASYW() { 1412 | var e = this; 1413 | e["IBDR"] = e["XYJN"](); 1414 | } 1415 | ASYW["prototype"] = { 1416 | "YnvE": -1, 1417 | "ZWhc": 1, 1418 | "abey": 0, 1419 | "bZwX": function(e) { 1420 | var t = this; 1421 | return e ? t["ZWhc"] : t["abey"]; 1422 | }, 1423 | "cvMr": function(e) { 1424 | return typeof e === "undefined"; 1425 | }, 1426 | "dsJN": ["A", "ARTICLE", "ASIDE", "AUDIO", "BASE", "BUTTON", "CANVAS", "CODE", "IFRAME", "IMG", "INPUT", "LABEL", "LINK", "NAV", "OBJECT", "OL", "PICTURE", "PRE", "SECTION", "SELECT", "SOURCE", "SPAN", "STYLE", "TABLE", "TEXTAREA", "VIDEO"], 1427 | "epVj": ["DIV", "P", "UL", "LI", "SCRIPT"], 1428 | "fYAR": function() { 1429 | var e = ["textLength", "HTMLLength", "documentMode"]["concat"](this["dsJN"])["concat"](["screenLeft", "screenTop", "screenAvailLeft", "screenAvailTop", "innerWidth", "innerHeight", "outerWidth", "outerHeight", "browserLanguage", "browserLanguages", "systemLanguage", "devicePixelRatio", "colorDepth", "userAgent", "cookieEnabled", "netEnabled", "screenWidth", "screenHeight", "screenAvailWidth", "screenAvailHeight", "localStorageEnabled", "sessionStorageEnabled", "indexedDBEnabled", "CPUClass", "platform", "doNotTrack", "timezone", "canvas2DFP", "canvas3DFP", "plugins", "maxTouchPoints", "flashEnabled", "javaEnabled", "hardwareConcurrency", "jsFonts", "timestamp", "performanceTiming", "internalip", "mediaDevices"])["concat"](this["epVj"])["concat"](["deviceorientation", "touchEvent"]); 1430 | e["push"]("st"); 1431 | return e; 1432 | }, 1433 | "XYJN": function() { 1434 | var e = window; 1435 | var t = e["screen"]; 1436 | var _ = e["document"]; 1437 | var h = e["navigator"]; 1438 | var r = _["documentElement"]; 1439 | var n = _["body"]; 1440 | var o = n["nodeType"]; 1441 | var d = this; 1442 | var s = {}; 1443 | function c(e) { 1444 | if (!e) { 1445 | return; 1446 | } 1447 | var t = e["nodeType"]; 1448 | if (t === o) { 1449 | var r = (e["nodeName"] || "")["toUpperCase"](); 1450 | if (new UVCr(d["dsJN"]["concat"](d["epVj"]))["Mkfm"](r) > -1) { 1451 | if (s[r]) { 1452 | s[r] += 1; 1453 | } else { 1454 | s[r] = 1; 1455 | } 1456 | } 1457 | } 1458 | var n = e["childNodes"]; 1459 | for (var i = 0, a = n["length"]; i < a; i = i + 1) { 1460 | c(n[i]); 1461 | } 1462 | } 1463 | c(_); 1464 | var i = r["textContent"] || r["innerText"]; 1465 | s["textLength"] = i["length"]; 1466 | var a = r["innerHTML"] || ""; 1467 | s["HTMLLength"] = a["length"]; 1468 | s["documentMode"] = _["documentMode"] || _["compatMode"]; 1469 | s["browserLanguage"] = h["language"] || h["userLanguage"]; 1470 | s["browserLanguages"] = h["languages"] && h["languages"]["join"](","); 1471 | s["systemLanguage"] = h["systemLanguage"]; 1472 | s["devicePixelRatio"] = e["devicePixelRatio"]; 1473 | s["colorDepth"] = t["colorDepth"]; 1474 | s["userAgent"] = h["userAgent"]; 1475 | s["cookieEnabled"] = d["bZwX"](h["cookieEnabled"]); 1476 | s["netEnabled"] = d["bZwX"](h["onLine"]); 1477 | s["innerWidth"] = e["innerWidth"]; 1478 | s["innerHeight"] = e["innerHeight"]; 1479 | s["outerWidth"] = e["outerWidth"]; 1480 | s["outerHeight"] = e["outerHeight"]; 1481 | s["screenWidth"] = t["width"]; 1482 | s["screenHeight"] = t["height"]; 1483 | s["screenAvailWidth"] = t["availWidth"]; 1484 | s["screenAvailHeight"] = t["availHeight"]; 1485 | s["screenLeft"] = t["left"] || e["screenLeft"]; 1486 | s["screenTop"] = t["top"] || e["screenTop"]; 1487 | s["screenAvailLeft"] = t["availLeft"]; 1488 | s["screenAvailTop"] = t["availTop"]; 1489 | try { 1490 | s["localStorageEnabled"] = d["bZwX"](e["localStorage"]); 1491 | } catch (p) { 1492 | s["localStorageEnabled"] = d["abey"]; 1493 | } 1494 | try { 1495 | s["sessionStorageEnabled"] = d["bZwX"](e["sessionStorage"]); 1496 | } catch (p) { 1497 | s["sessionStorageEnabled"] = d["abey"]; 1498 | } 1499 | s["indexedDBEnabled"] = d["bZwX"](e["indexedDB"]); 1500 | s["CPUClass"] = h["cpuClass"]; 1501 | s["platform"] = h["platform"]; 1502 | s["doNotTrack"] = d["bZwX"](h["doNotTrack"]); 1503 | s["timezone"] = new Date()["getTimezoneOffset"]() / 60; 1504 | s["canvas2DFP"] = function() { 1505 | var e = _["createElement"]("canvas"); 1506 | var t = e["getContext"] && e["getContext"]("2d"); 1507 | if (t) { 1508 | var r = []; 1509 | e["width"] = 2e3; 1510 | e["height"] = 200; 1511 | e["style"]["display"] = "inline"; 1512 | t["rect"](0, 0, 11, 11); 1513 | t["rect"](3, 3, 6, 6); 1514 | r["push"]("canvas winding:" + (t["isPointInPath"](5, 5, "evenodd") === false ? "yes" : "no")); 1515 | t["textBaseline"] = "alphabetic"; 1516 | t["fillStyle"] = "#f60"; 1517 | t["fillRect"](125, 1, 62, 20); 1518 | t["fillStyle"] = "#069"; 1519 | t["font"] = "11pt Arial"; 1520 | t["fillText"]("Cwm fjordbank glyphs vext quiz, ?", 2, 15); 1521 | t["fillStyle"] = "rgba(102, 204, 0, 0.7)"; 1522 | t["font"] = "18pt Arial"; 1523 | t["fillText"]("Cwm fjordbank glyphs vext quiz, ?", 4, 45); 1524 | t["globalCompositeOperation"] = "multiply"; 1525 | t["fillStyle"] = "rgb(255,0,255)"; 1526 | t["beginPath"](); 1527 | t["arc"](52, 50, 50, 0, Math["PI"] * 2, true); 1528 | t["closePath"](); 1529 | t["fill"](); 1530 | t["fillStyle"] = "rgb(0,255,255)"; 1531 | t["beginPath"](); 1532 | t["arc"](100, 50, 50, 0, Math["PI"] * 2, true); 1533 | t["closePath"](); 1534 | t["fill"](); 1535 | t["fillStyle"] = "rgb(255,255,0)"; 1536 | t["beginPath"](); 1537 | t["arc"](75, 100, 50, 0, Math["PI"] * 2, true); 1538 | t["closePath"](); 1539 | t["fill"](); 1540 | t["fillStyle"] = "rgb(255,0,255)"; 1541 | t["arc"](75, 75, 75, 0, Math["PI"] * 2, true); 1542 | t["arc"](75, 75, 25, 0, Math["PI"] * 2, true); 1543 | t["fill"]("evenodd"); 1544 | r["push"]("canvas fp:" + e["toDataURL"]()); 1545 | return iEe_(r["join"]("~")); 1546 | } else { 1547 | return d["abey"]; 1548 | } 1549 | }(); 1550 | s["canvas3DFP"] = function() { 1551 | try { 1552 | if (/\(i[^;]+;( U;)? CPU.+Mac OS X/["test"](h["userAgent"])) { 1553 | return d["abey"]; 1554 | } 1555 | var e = _["createElement"]("canvas"); 1556 | var t = e["getContext"] && (e["getContext"]("webgl") || e["getContext"]("experimental-webgl")); 1557 | if (t) { 1558 | function r(e) { 1559 | t["clearColor"](0, 0, 0, 1); 1560 | t["enable"](t["DEPTH_TEST"]); 1561 | t["depthFunc"](t["LEQUAL"]); 1562 | t["clear"](t["COLOR_BUFFER_BIT"] | t["DEPTH_BUFFER_BIT"]); 1563 | return "[" + e[0] + ", " + e[1] + "]"; 1564 | } 1565 | function n(e) { 1566 | var t, r = e["getExtension"]("EXT_texture_filter_anisotropic") || e["getExtension"]("WEBKIT_EXT_texture_filter_anisotropic") || e["getExtension"]("MOZ_EXT_texture_filter_anisotropic"); 1567 | return r ? (t = e["getParameter"](r["MAX_TEXTURE_MAX_ANISOTROPY_EXT"]), 1568 | 0 === t && (t = 2), 1569 | t) : null; 1570 | } 1571 | var i = []; 1572 | var a = "attribute vec2 attrVertex;varying vec2 varyinTexCoordinate;uniform vec2 uniformOffset;void main(){varyinTexCoordinate=attrVertex+uniformOffset;gl_Position=vec4(attrVertex,0,1);}"; 1573 | var o = "precision mediump float;varying vec2 varyinTexCoordinate;void main() {gl_FragColor=vec4(varyinTexCoordinate,0,1);}"; 1574 | var s = t["createBuffer"](); 1575 | t["bindBuffer"](t["ARRAY_BUFFER"], s); 1576 | var c = new Float32Array([-.2, -.9, 0, .4, -.26, 0, 0, .732134444, 0]); 1577 | t["bufferData"](t["ARRAY_BUFFER"], c, t["STATIC_DRAW"]); 1578 | s["itemSize"] = 3; 1579 | s["numItems"] = 3; 1580 | var u = t["createProgram"]() 1581 | , l = t["createShader"](t["VERTEX_SHADER"]); 1582 | t["shaderSource"](l, a); 1583 | t["compileShader"](l); 1584 | var f = t["createShader"](t["FRAGMENT_SHADER"]); 1585 | t["shaderSource"](f, o); 1586 | t["compileShader"](f); 1587 | t["attachShader"](u, l); 1588 | t["attachShader"](u, f); 1589 | t["linkProgram"](u); 1590 | t["useProgram"](u); 1591 | u["vertexPosAttrib"] = t["getAttribLocation"](u, "attrVertex"); 1592 | u["offsetUniform"] = t["getUniformLocation"](u, "uniformOffset"); 1593 | t["enableVertexAttribArray"](u["vertexPosArray"]); 1594 | t["vertexAttribPointer"](u["vertexPosAttrib"], s["itemSize"], t["FLOAT"], !1, 0, 0); 1595 | t["uniform2f"](u["offsetUniform"], 1, 1); 1596 | t["drawArrays"](t["TRIANGLE_STRIP"], 0, s["numItems"]); 1597 | if (t["canvas"] != null) { 1598 | i["push"](t["canvas"]["toDataURL"]()); 1599 | } 1600 | i["push"]("extensions:" + t["getSupportedExtensions"]()["join"](";")); 1601 | i["push"]("webgl aliased line width range:" + r(t["getParameter"](t["ALIASED_LINE_WIDTH_RANGE"]))); 1602 | i["push"]("webgl aliased point size range:" + r(t["getParameter"](t["ALIASED_POINT_SIZE_RANGE"]))); 1603 | i["push"]("webgl alpha bits:" + t["getParameter"](t["ALPHA_BITS"])); 1604 | i["push"]("webgl antialiasing:" + (t["getContextAttributes"]()["antialias"] ? "yes" : "no")); 1605 | i["push"]("webgl blue bits:" + t["getParameter"](t["BLUE_BITS"])); 1606 | i["push"]("webgl depth bits:" + t["getParameter"](t["DEPTH_BITS"])); 1607 | i["push"]("webgl green bits:" + t["getParameter"](t["GREEN_BITS"])); 1608 | i["push"]("webgl max anisotropy:" + n(t)); 1609 | i["push"]("webgl max combined texture image units:" + t["getParameter"](t["MAX_COMBINED_TEXTURE_IMAGE_UNITS"])); 1610 | i["push"]("webgl max cube map texture size:" + t["getParameter"](t["MAX_CUBE_MAP_TEXTURE_SIZE"])); 1611 | i["push"]("webgl max fragment uniform vectors:" + t["getParameter"](t["MAX_FRAGMENT_UNIFORM_VECTORS"])); 1612 | i["push"]("webgl max render buffer size:" + t["getParameter"](t["MAX_RENDERBUFFER_SIZE"])); 1613 | i["push"]("webgl max texture image units:" + t["getParameter"](t["MAX_TEXTURE_IMAGE_UNITS"])); 1614 | i["push"]("webgl max texture size:" + t["getParameter"](t["MAX_TEXTURE_SIZE"])); 1615 | i["push"]("webgl max varying vectors:" + t["getParameter"](t["MAX_VARYING_VECTORS"])); 1616 | i["push"]("webgl max vertex attribs:" + t["getParameter"](t["MAX_VERTEX_ATTRIBS"])); 1617 | i["push"]("webgl max vertex texture image units:" + t["getParameter"](t["MAX_VERTEX_TEXTURE_IMAGE_UNITS"])); 1618 | i["push"]("webgl max vertex uniform vectors:" + t["getParameter"](t["MAX_VERTEX_UNIFORM_VECTORS"])); 1619 | i["push"]("webgl max viewport dims:" + r(t["getParameter"](t["MAX_VIEWPORT_DIMS"]))); 1620 | i["push"]("webgl red bits:" + t["getParameter"](t["RED_BITS"])); 1621 | i["push"]("webgl renderer:" + t["getParameter"](t["RENDERER"])); 1622 | i["push"]("webgl shading language version:" + t["getParameter"](t["SHADING_LANGUAGE_VERSION"])); 1623 | i["push"]("webgl stencil bits:" + t["getParameter"](t["STENCIL_BITS"])); 1624 | i["push"]("webgl vendor:" + t["getParameter"](t["VENDOR"])); 1625 | i["push"]("webgl version:" + t["getParameter"](t["VERSION"])); 1626 | if (!t["getShaderPrecisionFormat"]) { 1627 | return iEe_(i["join"]("~")); 1628 | } 1629 | i["push"]("webgl vertex shader high float precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_FLOAT"])["precision"]); 1630 | i["push"]("webgl vertex shader high float precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_FLOAT"])["rangeMin"]); 1631 | i["push"]("webgl vertex shader high float precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_FLOAT"])["rangeMax"]); 1632 | i["push"]("webgl vertex shader medium float precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_FLOAT"])["precision"]); 1633 | i["push"]("webgl vertex shader medium float precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_FLOAT"])["rangeMin"]); 1634 | i["push"]("webgl vertex shader medium float precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_FLOAT"])["rangeMax"]); 1635 | i["push"]("webgl vertex shader low float precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_FLOAT"])["precision"]); 1636 | i["push"]("webgl vertex shader low float precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_FLOAT"])["rangeMin"]); 1637 | i["push"]("webgl vertex shader low float precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_FLOAT"])["rangeMax"]); 1638 | i["push"]("webgl fragment shader high float precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_FLOAT"])["precision"]); 1639 | i["push"]("webgl fragment shader high float precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_FLOAT"])["rangeMin"]); 1640 | i["push"]("webgl fragment shader high float precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_FLOAT"])["rangeMax"]); 1641 | i["push"]("webgl fragment shader medium float precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_FLOAT"])["precision"]); 1642 | i["push"]("webgl fragment shader medium float precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_FLOAT"])["rangeMin"]); 1643 | i["push"]("webgl fragment shader medium float precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_FLOAT"])["rangeMax"]); 1644 | i["push"]("webgl fragment shader low float precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_FLOAT"])["precision"]); 1645 | i["push"]("webgl fragment shader low float precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_FLOAT"])["rangeMin"]); 1646 | i["push"]("webgl fragment shader low float precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_FLOAT"])["rangeMax"]); 1647 | i["push"]("webgl vertex shader high int precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_INT"])["precision"]); 1648 | i["push"]("webgl vertex shader high int precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_INT"])["rangeMin"]); 1649 | i["push"]("webgl vertex shader high int precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["HIGH_INT"])["rangeMax"]); 1650 | i["push"]("webgl vertex shader medium int precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_INT"])["precision"]); 1651 | i["push"]("webgl vertex shader medium int precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_INT"])["rangeMin"]); 1652 | i["push"]("webgl vertex shader medium int precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["MEDIUM_INT"])["rangeMax"]); 1653 | i["push"]("webgl vertex shader low int precision:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_INT"])["precision"]); 1654 | i["push"]("webgl vertex shader low int precision rangeMin:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_INT"])["rangeMin"]); 1655 | i["push"]("webgl vertex shader low int precision rangeMax:" + t["getShaderPrecisionFormat"](t["VERTEX_SHADER"], t["LOW_INT"])["rangeMax"]); 1656 | i["push"]("webgl fragment shader high int precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_INT"])["precision"]); 1657 | i["push"]("webgl fragment shader high int precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_INT"])["rangeMin"]); 1658 | i["push"]("webgl fragment shader high int precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["HIGH_INT"])["rangeMax"]); 1659 | i["push"]("webgl fragment shader medium int precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_INT"])["precision"]); 1660 | i["push"]("webgl fragment shader medium int precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_INT"])["rangeMin"]); 1661 | i["push"]("webgl fragment shader medium int precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["MEDIUM_INT"])["rangeMax"]); 1662 | i["push"]("webgl fragment shader low int precision:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_INT"])["precision"]); 1663 | i["push"]("webgl fragment shader low int precision rangeMin:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_INT"])["rangeMin"]); 1664 | i["push"]("webgl fragment shader low int precision rangeMax:" + t["getShaderPrecisionFormat"](t["FRAGMENT_SHADER"], t["LOW_INT"])["rangeMax"]); 1665 | return iEe_(i["join"]("~")); 1666 | } else { 1667 | return d["abey"]; 1668 | } 1669 | } catch (p) { 1670 | return d["abey"]; 1671 | } 1672 | }(); 1673 | s["plugins"] = function() { 1674 | if (!h["plugins"]) { 1675 | return d["YnvE"]; 1676 | } 1677 | var e = []; 1678 | var t = 40; 1679 | var r = h["plugins"]["length"] > t ? t : h["plugins"]["length"]; 1680 | for (var n = 0, i = r; n < i; n = n + 1) { 1681 | var a = h["plugins"][n]; 1682 | e["push"](a["filename"]["replace"](/\s/g, "")); 1683 | } 1684 | return e["join"](","); 1685 | }(); 1686 | s["maxTouchPoints"] = function() { 1687 | if (!d["cvMr"](h["maxTouchPoints"])) { 1688 | return h["maxTouchPoints"]; 1689 | } else if (!d["cvMr"](h["msMaxTouchPoints"])) { 1690 | return h["msMaxTouchPoints"]; 1691 | } else { 1692 | return 0; 1693 | } 1694 | }(); 1695 | s["flashEnabled"] = function() { 1696 | if (d["cvMr"](e["swfobject"])) { 1697 | return d["YnvE"]; 1698 | } else { 1699 | return d["bZwX"](e["swfobject"]["hasFlashPlayerVersion"] && e["swfobject"]["hasFlashPlayerVersion"]("9.0.0")); 1700 | } 1701 | }(); 1702 | s["javaEnabled"] = function() { 1703 | try { 1704 | if (d["cvMr"](h["javaEnabled"])) { 1705 | return d["YnvE"]; 1706 | } else { 1707 | return d["bZwX"](h["javaEnabled"]()); 1708 | } 1709 | } catch (p) { 1710 | return d["YnvE"]; 1711 | } 1712 | }(); 1713 | s["hardwareConcurrency"] = h["hardwareConcurrency"]; 1714 | s["jsFonts"] = LOTj || MWpS || JBpT ? ["monospace", "sans-serif", "serif"]["join"](",") : function() { 1715 | var s = ["monospace", "sans-serif", "serif"]; 1716 | var c = ["Andale Mono", "Arial", "Arial Black", "Arial Hebrew", "Arial MT", "Arial Narrow", "Arial Rounded MT Bold", "Arial Unicode MS", "Bitstream Vera Sans Mono", "Book Antiqua", "Bookman Old Style", "Calibri", "Cambria", "Cambria Math", "Century", "Century Gothic", "Century Schoolbook", "Comic Sans", "Comic Sans MS", "Consolas", "Courier", "Courier New", "Garamond", "Geneva", "Georgia", "Helvetica", "Helvetica Neue", "Impact", "Lucida Bright", "Lucida Calligraphy", "Lucida Console", "Lucida Fax", "LUCIDA GRANDE", "Lucida Handwriting", "Lucida Sans", "Lucida Sans Typewriter", "Lucida Sans Unicode", "Microsoft Sans Serif", "Monaco", "Monotype Corsiva", "MS Gothic", "MS Outlook", "MS PGothic", "MS Reference Sans Serif", "MS Sans Serif", "MS Serif", "MYRIAD", "MYRIAD PRO", "Palatino", "Palatino Linotype", "Segoe Print", "Segoe Script", "Segoe UI", "Segoe UI Light", "Segoe UI Semibold", "Segoe UI Symbol", "Tahoma", "Times", "Times New Roman", "Times New Roman PS", "Trebuchet MS", "Verdana", "Wingdings", "Wingdings 2", "Wingdings 3"]; 1717 | var e = "mmmmmmmmmmlli"; 1718 | var t = "72px"; 1719 | var r = document["getElementsByTagName"]("body")[0]; 1720 | var i = document["createElement"]("div"); 1721 | var u = document["createElement"]("div"); 1722 | var n = {}; 1723 | var a = {}; 1724 | function o() { 1725 | var e = document["createElement"]("span"); 1726 | e["style"]["position"] = "absolute"; 1727 | e["style"]["left"] = "-9999px"; 1728 | e["style"]["fontSize"] = t; 1729 | return e; 1730 | } 1731 | function l(e, t) { 1732 | var r = o(); 1733 | r["style"]["fontFamily"] = "'" + e + "'," + t; 1734 | return r; 1735 | } 1736 | function f() { 1737 | var e = []; 1738 | for (var t = 0, r = s["length"]; t < r; t++) { 1739 | var n = o(); 1740 | n["style"]["fontFamily"] = s[t]; 1741 | i["appendChild"](n); 1742 | e["push"](n); 1743 | } 1744 | return e; 1745 | } 1746 | function _() { 1747 | var e = {}; 1748 | for (var t = 0, r = c["length"]; t < r; t++) { 1749 | var n = []; 1750 | for (var i = 0, a = s["length"]; i < a; i++) { 1751 | var o = l(c[t], s[i]); 1752 | u["appendChild"](o); 1753 | n["push"](o); 1754 | } 1755 | e[c[t]] = n; 1756 | } 1757 | return e; 1758 | } 1759 | function h(e) { 1760 | var t = false; 1761 | for (var r = 0; r < s["length"]; r++) { 1762 | t = e[r]["offsetWidth"] !== n[s[r]] || e[r]["offsetHeight"] !== a[s[r]]; 1763 | if (t) { 1764 | return t; 1765 | } 1766 | } 1767 | return t; 1768 | } 1769 | var d = f(); 1770 | r["appendChild"](i); 1771 | for (var p = 0, v = s["length"]; p < v; p++) { 1772 | n[s[p]] = d[p]["offsetWidth"]; 1773 | a[s[p]] = d[p]["offsetHeight"]; 1774 | } 1775 | var g = _(); 1776 | r["appendChild"](u); 1777 | var m = []; 1778 | for (var E = 0, w = c["length"]; E < w; E++) { 1779 | if (h(g[c[E]])) { 1780 | m["push"](c[E]["replace"](/\s/g, "")); 1781 | } 1782 | } 1783 | var y = m["join"](","); 1784 | r["removeChild"](u); 1785 | r["removeChild"](i); 1786 | return y; 1787 | }(); 1788 | s["mediaDevices"] = d["YnvE"]; 1789 | return s; 1790 | }, 1791 | "QreY": function() { 1792 | return this["RCHD"]()["length"]; 1793 | }, 1794 | "SXKr": function(e, t) { 1795 | var r = this; 1796 | var n = "magic data"; 1797 | var i = r["IBDR"]; 1798 | var a = []; 1799 | new UVCr(r["fYAR"]())["Kscp"](function(e) { 1800 | var t = i[e]; 1801 | a["push"](r["cvMr"](t) ? r["YnvE"] : t); 1802 | }); 1803 | return a["join"](n); 1804 | }, 1805 | "RCHD": function() { 1806 | var f = window; 1807 | var _ = this; 1808 | var r = _["IBDR"]; 1809 | r["plugins"] = ""; 1810 | r["performanceTiming"] = function() { 1811 | if (_["cvMr"](f["performance"])) { 1812 | return _["YnvE"]; 1813 | } 1814 | var e = f["performance"]["timing"]; 1815 | var t = ["navigationStart", "redirectStart", "redirectEnd", "fetchStart", "domainLookupStart", "domainLookupEnd", "connectStart", "connectEnd", "requestStart", "responseStart"]; 1816 | var r = ["responseEnd", "unloadEventStart", "unloadEventEnd", "domLoading", "domInteractive", "domContentLoadedEventStart", "domContentLoadedEventEnd", "domComplete", "loadEventStart", "loadEventEnd", "msFirstPaint"]; 1817 | var n = [], i, a; 1818 | for (i = 1, 1819 | a = t["length"]; i < a; i = i + 1) { 1820 | var o = e[t[i]]; 1821 | if (o === 0) { 1822 | n["push"](_["YnvE"]); 1823 | } else { 1824 | for (var s = i - 1; s >= 0; s = s - 1) { 1825 | var c = e[t[s]]; 1826 | if (c !== 0) { 1827 | n["push"](o - c); 1828 | break; 1829 | } 1830 | } 1831 | } 1832 | } 1833 | var u = e[t[t["length"] - 1]]; 1834 | for (i = 0, 1835 | a = r["length"]; i < a; i = i + 1) { 1836 | var l = e[r[i]]; 1837 | if (l === 0 || _["cvMr"](l)) { 1838 | n["push"](_["YnvE"]); 1839 | } else { 1840 | n["push"](l - u); 1841 | } 1842 | } 1843 | return n["join"](","); 1844 | }(); 1845 | r["timestamp"] = new Date()["getTime"](); 1846 | var e = 1e6 1847 | , t = Math["random"]() * e * 9; 1848 | t += e; 1849 | r["st"] = Math["round"](t)["toString"](16); 1850 | r["deviceorientation"] = BvIc["deviceorientation"]; 1851 | r["touchEvent"] = BvIc["touchEvent"]; 1852 | r["internalip"] = BvIc["ip"]; 1853 | var n = []; 1854 | new UVCr(_["fYAR"]())["Kscp"](function(e) { 1855 | var t = r[e]; 1856 | n["push"](_["cvMr"](t) ? _["YnvE"] : t); 1857 | }); 1858 | return n["join"]("!!"); 1859 | } 1860 | }; 1861 | 1862 | 1863 | var NVAU = function() { 1864 | return function() { 1865 | return parseInt(Math["random"]() * 1e4) + new Date()["valueOf"](); 1866 | } 1867 | ; 1868 | }(); 1869 | 1870 | function RAIS(r, e) { 1871 | new VqMQ(e)["bMQv"](function(e, t) { 1872 | r[e] = t; 1873 | }); 1874 | } 1875 | 1876 | function PEom(e) { 1877 | var t = this; 1878 | t["jyNl"] = NVAU(); 1879 | t["gnBj"]({ 1880 | "protocol": protocol 1881 | })["gnBj"](e); 1882 | } 1883 | PEom["prototype"] = { 1884 | "challenge": "", 1885 | "gt": "", 1886 | "type": "fullpage", 1887 | "api_server": "https://captcha-api-stg.pingan.com:10530", 1888 | "static_servers": ["https://captcha-static-stg.pingan.com", "https://captcha-static-stg.pingan.com"], 1889 | "product": "popup", 1890 | "lang": "zh-cn", 1891 | "width": "300px", 1892 | "logo": false, 1893 | "protocol": "http://", 1894 | "https": false, 1895 | "version": "pingan.1.3", 1896 | "theme": "wind", 1897 | "theme_version": "1.4.3", 1898 | "homepage": "", 1899 | "gnBj": function(e) { 1900 | var t = this; 1901 | RAIS(t, e); 1902 | return t; 1903 | } 1904 | }; 1905 | 1906 | 1907 | 1908 | function LvCl(e, t) { 1909 | var r = this; 1910 | var n = new PEom(e); 1911 | if (n["https"]) { 1912 | n["protocol"] = "https://"; 1913 | } 1914 | if (e["debugConfig"]) { 1915 | n["gnBj"](e["debugConfig"]); 1916 | } 1917 | var i = n["fullpage_ajax"]; 1918 | if (!i || typeof i !== "string") { 1919 | n["fullpage_ajax"] = "ajax.php"; 1920 | } else { 1921 | if (!/https?:\/\//i["test"](i)) { 1922 | n["fullpage_ajax"] = location["protocol"] + "//" + location["host"] + i; 1923 | } 1924 | } 1925 | if (n["product"] !== "float" && n["product"] !== "popup" && n["product"] !== "custom" && n["product"] !== "bind") { 1926 | n["product"] = "float"; 1927 | } 1928 | if (KMDR || LOTj) { 1929 | if (n["product"] === "float") { 1930 | n["product"] = "popup"; 1931 | } 1932 | } 1933 | if (LOTj) { 1934 | if (n["product"] === "custom") { 1935 | n["product"] = "popup"; 1936 | } 1937 | } 1938 | n["cc"] = navigator["hardwareConcurrency"] || 0; 1939 | n["supportWorker"] = typeof Worker !== "undefined"; 1940 | r["haoL"] = new ASYW(); 1941 | r["ipRi"] = n; 1942 | r["eHWD"] = e; 1943 | r["jDEp"] = new FRAx(); 1944 | r["AJtU"] = new HRpz(function(e, t) { 1945 | r["kLLW"](e, t); 1946 | } 1947 | ); 1948 | r["lEQG"] = t; 1949 | r["AJtU"]["URCw"](SAhT); 1950 | r["mDex"] = new qPXE(); 1951 | r["mWLt"] = new yPir(); 1952 | } 1953 | LvCl["prototype"] = { 1954 | "kLLW": function(e, t) { 1955 | var r = this; 1956 | var n = r["nXam"]; 1957 | var i = r["AJtU"]; 1958 | var a = r["jDEp"]; 1959 | var o = r["ipRi"]; 1960 | var s = o["product"] === "bind"; 1961 | if (i["BhFR"](t)) { 1962 | return; 1963 | } 1964 | if (t === gbrX) { 1965 | return; 1966 | } 1967 | if (!i["BhFR"](SAhT)) { 1968 | n && n["oBjZ"](e, t); 1969 | n && n["pE_a"](); 1970 | } 1971 | if (i["BhFR"](SAhT)) { 1972 | r["qOBS"] = r["KlSq"]()["cfSW"](function() { 1973 | i["URCw"](TtFO); 1974 | a["vlLb"](SAhT); 1975 | if (o["vip_content"]) { 1976 | r["rAiJ"](); 1977 | } 1978 | }); 1979 | } else if (i["BhFR"](apqu)) { 1980 | n["iJmN"](r["sWiU"]); 1981 | } else if (i["BhFR"](bfMK)) { 1982 | n["tIvd"](); 1983 | if (s && o["pure"]) { 1984 | a["vlLb"](bfMK); 1985 | } 1986 | } else if (i["BhFR"](cdxC)) { 1987 | n["ujAv"](); 1988 | a["vlLb"](ikUm); 1989 | } else if (i["BhFR"]([YKWV])) { 1990 | n["vgKH"](r["wJfW"]); 1991 | HfQR(function() { 1992 | if (s) { 1993 | n["xrHD"](); 1994 | } 1995 | a["vlLb"](evTW); 1996 | }, 800); 1997 | } else if (i["BhFR"]([ZlTo, dFxu])) { 1998 | if (s) { 1999 | n && n["yom_"](); 2000 | n && n["ArrD"](); 2001 | } 2002 | if (r["BlMr"] && r["BlMr"]["code"] === "error_21" && n) { 2003 | n["CAeW"](); 2004 | } 2005 | a["vlLb"](fswu, r["BlMr"]); 2006 | } else if (i["BhFR"](COMPUTE_2)) { 2007 | if (s && !o["pure"]) { 2008 | n["DIGp"](); 2009 | } 2010 | n["EGaT"](); 2011 | } 2012 | }, 2013 | "KlSq": function() { 2014 | var i = this; 2015 | var a = i["ipRi"]; 2016 | if (!a["gt"] || !a["challenge"]) { 2017 | return uaQU(riwK("config_lack", i)); 2018 | } 2019 | var e = i["haoL"]["RCHD"](); 2020 | i["FgTL"] = e; 2021 | i["eHWD"]["cc"] = a["cc"]; 2022 | i["eHWD"]["ww"] = a["supportWorker"]; 2023 | i["eHWD"]["i"] = e; 2024 | var t = i["GBLq"](); 2025 | var r = vUUf()["encrypt1"](rpdJ["stringify"](i["eHWD"]), i["HXgi"]()); 2026 | var n = GxkI["QLsv"](r); 2027 | var o = { 2028 | "gt": i["eHWD"]["gt"], 2029 | "challenge": i["eHWD"]["challenge"], 2030 | "lang": a["lang"], 2031 | "w": n + t 2032 | }; 2033 | if (!a["fullpage_get"]) { 2034 | a["fullpage_get"] = "get.php"; 2035 | } 2036 | return hmMK(a, a["fullpage_get"], o)["cfSW"](function(e) { 2037 | if (e["status"] === fswu) { 2038 | return uaQU(sfHA(e, i)); 2039 | } 2040 | a["gnBj"](e["data"]); 2041 | if (a["apiserver"]) { 2042 | a["api_server"] = a["apiserver"]; 2043 | } 2044 | if (a["staticservers"]) { 2045 | a["static_servers"] = a["staticservers"]; 2046 | } 2047 | if (a["debugConfig"]) { 2048 | a["gnBj"](a["debugConfig"]); 2049 | } 2050 | i["nXam"] = new UI(i); 2051 | if (a["product"] != "bind" && QGrk) { 2052 | var t = RFbX ? 44 : 37 2053 | , r = (t - TYue(14)) / 2 + "px" 2054 | , n = { 2055 | "paddingTop": r, 2056 | "paddingBottom": r, 2057 | "lineHeight": "initial" 2058 | }; 2059 | i["nXam"]["$"](".success_radar_tip")["$_sTyyle"](n); 2060 | i["nXam"]["$"](".radar_tip")["$_sTyyle"](n); 2061 | } 2062 | return i["nXam"]["IYor"]; 2063 | }, function() { 2064 | return uaQU(riwK("url_get", i)); 2065 | }); 2066 | }, 2067 | "wAAT": function() { 2068 | var e = this; 2069 | e["nXam"] && e["nXam"]["wAAT"](); 2070 | e["jDEp"]["wAAT"](); 2071 | if (e["JsuL"]) { 2072 | e["JsuL"]["wAAT"](); 2073 | } 2074 | }, 2075 | "ftLD": function(e) { 2076 | var t = this; 2077 | t["BlMr"] = e; 2078 | t["AJtU"]["URCw"](ZlTo); 2079 | return t; 2080 | }, 2081 | "ZYaF": function(e) { 2082 | var t = this; 2083 | if (t["ipRi"]["product"] === "bind") { 2084 | return t; 2085 | } 2086 | t["qOBS"]["cfSW"](function() { 2087 | t["nXam"]["ZYaF"](e); 2088 | }); 2089 | return t; 2090 | }, 2091 | "KhcA": function(e) { 2092 | this["Lnqv"] = e; 2093 | }, 2094 | "MtvD": function(e) { 2095 | this["NXOH"] = e; 2096 | }, 2097 | "OFQo": function(e) { 2098 | var t = this; 2099 | t["qOBS"]["cfSW"](function() { 2100 | t["nXam"]["OFQo"](e); 2101 | }); 2102 | }, 2103 | "PChc": function(e) { 2104 | var t = this; 2105 | t["qOBS"]["cfSW"](function() { 2106 | t["nXam"]["PChc"](e); 2107 | }); 2108 | }, 2109 | "QtHV": function() { 2110 | var e = this; 2111 | if (!e["ipRi"]["vip_content"]) { 2112 | e["RFrU"](); 2113 | return; 2114 | } 2115 | if (e["TRVp"] === true) { 2116 | return; 2117 | } 2118 | e["TRVp"] = true; 2119 | e["UlRt"](); 2120 | }, 2121 | "UlRt": function() { 2122 | var e = this; 2123 | if (!e["powworkerdone"] && e["pow_progress"]) { 2124 | e["Voxo"] = HfQR(function () { 2125 | e["powworkerdone"] = true; 2126 | e["JsuL"]["HaGS"](); 2127 | e["UlRt"](); 2128 | }, 2e3); 2129 | } else if (!e["powworkerdone"] && e["pow_starting"] && !e["pow_wait_once"]) { 2130 | e["pow_wait_once"] = true; 2131 | e["Voxo"] = HfQR(function () { 2132 | e["UlRt"](); 2133 | }, 500); 2134 | } else { 2135 | e["TRVp"] = false; 2136 | e["pow_wait_once"] = false; 2137 | e["RFrU"](); 2138 | } 2139 | }, 2140 | "RFrU": function() { 2141 | var t = this; 2142 | t["WOex"](); 2143 | var e = t["ipRi"]; 2144 | var r = {}; 2145 | r["gt"] = e['gt']; 2146 | r["challenge"] = e["challenge"]; 2147 | r["lang"] = e["lang"] || "zh-cn"; 2148 | r["w"] = t["XQhU"]; 2149 | hmMK(e, e["fullpage_ajax"], r)["cfSW"](function(e) { 2150 | if (e["status"] === fswu) { 2151 | return uaQU(sfHA(e, t)); 2152 | } 2153 | t["Yeoh"](e["data"]); 2154 | }, function() { 2155 | return uaQU(riwK(PmjU(1194), t)); 2156 | }); 2157 | }, 2158 | "WOex": function() { 2159 | var f = this; 2160 | var e = f["ipRi"]; 2161 | var t = f["mDex"]["RCHD"](); 2162 | var r = f["mDex"]["SXKr"](); 2163 | var n = f["haoL"]["RCHD"](); 2164 | var i = f["haoL"]["SXKr"](); 2165 | var a = f["mWLt"]["RCHD"](); 2166 | var o = QQhV() - xtHP; 2167 | var s = window["getCaptchaReservedParam"]; 2168 | if (typeof s === "function") { 2169 | s = s(); 2170 | } else { 2171 | s = null; 2172 | } 2173 | var c = {}; cKTo([], c); 2174 | f["ZrNu"] = ""; 2175 | var u = [["lang", e["lang"] || "zh-cn"], ["type", "fullpage"], ["t", t || -1], ["light", a || -1], ["s", iEe_(GxkI["PwRX"](r))], ["h", iEe_(GxkI["PwRX"](i))], ["hh", iEe_(i)], ["i", GxkI["PwRX"](n)], ["hi", iEe_(n)], ["vip_order", f["vip_order"] || -1], ["ua", navigator["userAgent"] || -1], ["ct", f["ct"] || -1], ["passtime", o || -1], ["reservedParam", s], ["jType", "ajax"], ["rp", iEe_(e["gt"] + e["challenge"] + o)], ["e", GxkI["PwRX"](npOq["stringify"](c))]]; 2176 | for (var l = 0; l < u["length"]; l++) { 2177 | f["ZrNu"] += '"' + u[l][0] + '":' + rpdJ["stringify"](u[l][1]) + ","; 2178 | } 2179 | function MC_T() { 2180 | var t = ["bbOy"]; 2181 | return function (e) { 2182 | t["push"](e["toString"]()); 2183 | var NTuW = ""; 2184 | (function addHash(e, t) { 2185 | function OdFm(e) { 2186 | var t = 5381; 2187 | var r = e["length"], n = 0; 2188 | while (r--) { 2189 | t = (t << 5) + t + e["charCodeAt"](n++); 2190 | } 2191 | t &= ~(1 << 31); 2192 | return t; 2193 | } 2194 | new Date()["getTime"]() - t["getTime"]() > 100 && (e = "qwe"); 2195 | NTuW = "{" + f["ZrNu"] + '"captcha_token":"' + OdFm(addHash["toString"]() + OdFm(OdFm["toString"]()) + OdFm(e["toString"]())) + '"" + "}'; 2196 | }(t["shift"](), new Date())); 2197 | f["XQhU"] = GxkI["QLsv"](vUUf()["encrypt"](NTuW, f["HXgi"]())); 2198 | }; 2199 | } 2200 | f["auHK"] = MC_T(); 2201 | f["auHK"](""); 2202 | f["auHK"]("8sZlepXckzhrLXVb"); 2203 | f["auHK"]("Qd5JawtfdHDKeo29"); 2204 | }, 2205 | "Yeoh": function(e) { 2206 | var t = this; 2207 | var r = t["ipRi"]; 2208 | var n; 2209 | if (e["result"] === "success") { 2210 | var i = e["validate"]["split"]("|")[0]; 2211 | t["wJfW"] = { 2212 | "geetest_challenge": r["challenge"], 2213 | "geetest_validate": i, 2214 | "geetest_seccode": i + "|jordan" 2215 | }; 2216 | t["bmtU"] = e["score"]; 2217 | n = YKWV; 2218 | } else if (e["result"] === "forbidden") { 2219 | return uaQU(riwK("server_forbidden", t)); 2220 | } else { 2221 | n = apqu; 2222 | t["sWiU"] = e["result"]; 2223 | } 2224 | t["AJtU"]["URCw"](n); 2225 | }, 2226 | "cXnJ": function() { 2227 | return this["wJfW"]; 2228 | }, 2229 | "dldf": function() { 2230 | this["wJfW"] = null; 2231 | }, 2232 | "ulxu": function(e, t) { 2233 | var r = this; 2234 | r["jDEp"]["ulxu"](e, t); 2235 | return r; 2236 | }, 2237 | "eKjw": function() { 2238 | var e = this; 2239 | e["nXam"] && e["nXam"]["eKjw"](); 2240 | return e; 2241 | }, 2242 | "ShHA": function() { 2243 | var e = this; 2244 | var t = e["AJtU"]; 2245 | t["URCw"](cdxC); 2246 | }, 2247 | "TjBf": function() { 2248 | var e = this; 2249 | var t = e["AJtU"]; 2250 | t["URCw"](bfMK); 2251 | }, 2252 | "fJtp": function() { 2253 | var e = this; 2254 | var t = e["nXam"]; 2255 | var r = e["ipRi"]; 2256 | var n = e["AJtU"]; 2257 | if (r["product"] !== "bind") { 2258 | return; 2259 | } 2260 | if (!(typeof this["NXOH"] === "function" ? this["NXOH"]() : true)) { 2261 | return; 2262 | } 2263 | if (n["BhFR"](TtFO)) { 2264 | n["URCw"](COMPUTE_2); 2265 | } else if (n["BhFR"](cdxC)) { 2266 | n["URCw"](bfMK); 2267 | } else if (n["BhFR"]([ZlTo, YKWV])) { 2268 | t && t["eKjw"]()["cfSW"](function() { 2269 | n["URCw"](COMPUTE_2); 2270 | }); 2271 | } 2272 | }, 2273 | "rAiJ": function() { 2274 | var a = this; 2275 | var e = a["ipRi"]; 2276 | a["powworkerdone"] = false; 2277 | a["pow_starting"] = false; 2278 | a["JsuL"] = new mjlq({ 2279 | "config": e, 2280 | "beforeStart": function() { 2281 | a["pow_starting"] = true; 2282 | }, 2283 | "progress": function() { 2284 | a["pow_progress"] = true; 2285 | }, 2286 | "done": function(e, t) { 2287 | a["powworkerdone"] = true; 2288 | if (e) { 2289 | var r = e["join"](); 2290 | if (LOTj || MWpS) { 2291 | var n = r["split"](","); 2292 | for (var i = n["length"] - 1; i >= 0; i--) { 2293 | n[i] = Math["round"](n[i]); 2294 | } 2295 | r = n["join"](); 2296 | } 2297 | a["vip_order"] = r; 2298 | a["ct"] = t; 2299 | } else { 2300 | a["vip_order"] = ""; 2301 | a["ct"] = ""; 2302 | } 2303 | if (a["TRVp"]) { 2304 | a["UlRt"](); 2305 | } 2306 | } 2307 | }); 2308 | }, 2309 | "gAbE": function() { 2310 | var e = this; 2311 | var t = e["ipRi"]; 2312 | if (e["JsuL"]) { 2313 | e["powworkerdone"] = false; 2314 | e["pow_starting"] = false; 2315 | e["pow_progress"] = false; 2316 | e["vip_order"] = ""; 2317 | e["ct"] = ""; 2318 | e["JsuL"]["GluB"]({ 2319 | "vip_content": t["vip_content"], 2320 | "vip_answer": t["vip_answer"], 2321 | "vip_key": t["vip_key"] 2322 | }); 2323 | } 2324 | }, 2325 | "hykO": function() { 2326 | var e = this; 2327 | var t = e["jDEp"]; 2328 | t["vlLb"](ikUm); 2329 | }, 2330 | "iXpC": function() { 2331 | var e = { 2332 | "ts": QQhV() 2333 | }; 2334 | e["v"] = "pingan.1.3"; 2335 | e["ip"] = BvIc["ip"] || ""; 2336 | var t = this["ipRi"] || {}; 2337 | e["f"] = iEe_(t["gt"] + t["challenge"]); 2338 | if (!(LOTj || MWpS)) { 2339 | var r = { 2340 | "e": ZdYw() 2341 | }; 2342 | RAIS(e, r); 2343 | } 2344 | e["ci"] = this["Lnqv"] && this["Lnqv"](); 2345 | e["de"] = BvIc["deviceorientation"]; 2346 | e["te"] = BvIc["touchEvent"]; 2347 | e["me"] = BvIc["mouseEvent"]; 2348 | return e; 2349 | }, 2350 | "HXgi": function(e) { 2351 | var t = this; 2352 | if (!t["ipRi"]["aeskey"] || e) { 2353 | t["ipRi"]["aeskey"] = OfWp(); 2354 | } 2355 | return t["ipRi"]["aeskey"]; 2356 | }, 2357 | "GBLq": function(e) { 2358 | var t = this; 2359 | var r = new vwBb()["encrypt"](t["HXgi"](e)); 2360 | while (!r || r["length"] !== 256) { 2361 | r = new vwBb()["encrypt"](t["HXgi"](true)); 2362 | } 2363 | return r; 2364 | } 2365 | }; 2366 | 2367 | function _encrypt(s_data, s_str) { 2368 | const needed = JSON.stringify(s_data); 2369 | const r = vUUf()["encrypt1"](needed, s_str); 2370 | return GxkI["QLsv"](r); 2371 | } -------------------------------------------------------------------------------- /geetest_crack/js/fullpage_t1.js: -------------------------------------------------------------------------------- 1 | function get_t(sstr) { 2 | window = {}; 3 | 4 | var vwBb = function () { 5 | function wQsQ() { 6 | this["i"] = 0; 7 | this["j"] = 0; 8 | this["S"] = []; 9 | } 10 | function xkoz(e) { 11 | var t, r, n; 12 | for (t = 0; t < 256; ++t) 13 | this["S"][t] = t; 14 | r = 0; 15 | for (t = 0; t < 256; ++t) { 16 | r = r + this["S"][t] + e[t % e["length"]] & 255; 17 | n = this["S"][t]; 18 | this["S"][t] = this["S"][r]; 19 | this["S"][r] = n; 20 | } 21 | this["i"] = 0; 22 | this["j"] = 0; 23 | } 24 | function yozv() { 25 | var e; 26 | this["i"] = this["i"] + 1 & 255; 27 | this["j"] = this["j"] + this["S"][this["i"]] & 255; 28 | e = this["S"][this["i"]]; 29 | this["S"][this["i"]] = this["S"][this["j"]]; 30 | this["S"][this["j"]] = e; 31 | return this["S"][e + this["S"][this["i"]] & 255]; 32 | } 33 | wQsQ["prototype"]["init"] = xkoz; 34 | wQsQ["prototype"]["next"] = yozv; 35 | function AxEu() { 36 | return new wQsQ(); 37 | } 38 | var n = 256; 39 | var t; 40 | var i; 41 | var a; 42 | if (i == null) { 43 | i = []; 44 | a = 0; 45 | var e; 46 | if (window["crypto"] && window["crypto"]["getRandomValues"]) { 47 | var r = new Uint32Array(256); 48 | window["crypto"]["getRandomValues"](r); 49 | for (e = 0; e < r["length"]; ++e) 50 | i[a++] = r[e] & 255; 51 | } 52 | var o = 0; 53 | function s(e) { 54 | o = o || 0; 55 | if (o >= 256 || a >= n) { 56 | if (window["removeEventListener"]) { 57 | o = 0; 58 | window["removeEventListener"]("mousemove", s, false); 59 | } else if (window["detachEvent"]) { 60 | o = 0; 61 | window["detachEvent"]("onmousemove", s); 62 | } 63 | return; 64 | } 65 | try { 66 | var t = e["x"] + e["y"]; 67 | i[a++] = t & 255; 68 | o += 1; 69 | } catch (r) { } 70 | } 71 | if (window["addEventListener"]) 72 | window["addEventListener"]("mousemove", s, false); 73 | else if (window["attachEvent"]) 74 | window["attachEvent"]("onmousemove", s); 75 | } 76 | function Bxpm() { 77 | if (t == null) { 78 | t = AxEu(); 79 | while (a < n) { 80 | var e = Math["floor"](65536 * Math["random"]()); 81 | i[a++] = e & 255; 82 | } 83 | t["init"](i); 84 | for (a = 0; a < i["length"]; ++a) 85 | i[a] = 0; 86 | a = 0; 87 | } 88 | return t["next"](); 89 | } 90 | function CQvy(e) { 91 | var t; 92 | for (t = 0; t < e["length"]; ++t) 93 | e[t] = Bxpm(); 94 | } 95 | function DZdA() { 96 | } 97 | DZdA["prototype"]["nextBytes"] = CQvy; 98 | var c; 99 | var u = 0xdeadbeefcafe; 100 | var l = (u & 16777215) == 15715070; 101 | function ECgw(e, t, r) { 102 | if (e != null) 103 | if ("number" == typeof e) 104 | this["fromNumber"](e, t, r); 105 | else if (t == null && "string" != typeof e) 106 | this["fromString"](e, 256); 107 | else 108 | this["fromString"](e, t); 109 | } 110 | function FfCQ() { 111 | return new ECgw(null); 112 | } 113 | function GfOf(e, t, r, n, i, a) { 114 | while (--a >= 0) { 115 | var o = t * this[e++] + r[n] + i; 116 | i = Math["floor"](o / 67108864); 117 | r[n++] = o & 67108863; 118 | } 119 | return i; 120 | } 121 | function HspZ(e, t, r, n, i, a) { 122 | var o = t & 32767 123 | , s = t >> 15; 124 | while (--a >= 0) { 125 | var c = this[e] & 32767; 126 | var u = this[e++] >> 15; 127 | var l = s * c + u * o; 128 | c = o * c + ((l & 32767) << 15) + r[n] + (i & 1073741823); 129 | i = (c >>> 30) + (l >>> 15) + s * u + (i >>> 30); 130 | r[n++] = c & 1073741823; 131 | } 132 | return i; 133 | } 134 | function IgTQ(e, t, r, n, i, a) { 135 | var o = t & 16383 136 | , s = t >> 14; 137 | while (--a >= 0) { 138 | var c = this[e] & 16383; 139 | var u = this[e++] >> 14; 140 | var l = s * c + u * o; 141 | c = o * c + ((l & 16383) << 14) + r[n] + i; 142 | i = (c >> 28) + (l >> 14) + s * u; 143 | r[n++] = c & 268435455; 144 | } 145 | return i; 146 | } 147 | ECgw["prototype"]["am"] = IgTQ; 148 | c = 28; 149 | 150 | ECgw["prototype"]["DB"] = c; 151 | ECgw["prototype"]["DM"] = (1 << c) - 1; 152 | ECgw["prototype"]["DV"] = 1 << c; 153 | var f = 52; 154 | ECgw["prototype"]["FV"] = Math["pow"](2, f); 155 | ECgw["prototype"]["F1"] = f - c; 156 | ECgw["prototype"]["F2"] = 2 * c - f; 157 | var _ = "0123456789abcdefghijklmnopqrstuvwxyz"; 158 | var h = []; 159 | var d, p; 160 | d = "0"["charCodeAt"](0); 161 | for (p = 0; p <= 9; ++p) 162 | h[d++] = p; 163 | d = "a"["charCodeAt"](0); 164 | for (p = 10; p < 36; ++p) 165 | h[d++] = p; 166 | d = "A"["charCodeAt"](0); 167 | for (p = 10; p < 36; ++p) 168 | h[d++] = p; 169 | function JgdB(e) { 170 | return _["charAt"](e); 171 | } 172 | function KoqK(e, t) { 173 | var r = h[e["charCodeAt"](t)]; 174 | return r == null ? -1 : r; 175 | } 176 | function LyUc(e) { 177 | for (var t = this["t"] - 1; t >= 0; --t) 178 | e[t] = this[t]; 179 | e["t"] = this["t"]; 180 | e["s"] = this["s"]; 181 | } 182 | function MDPU(e) { 183 | this["t"] = 1; 184 | this["s"] = e < 0 ? -1 : 0; 185 | if (e > 0) 186 | this[0] = e; 187 | else if (e < -1) 188 | this[0] = e + this["DV"]; 189 | else 190 | this["t"] = 0; 191 | } 192 | function NrhG(e) { 193 | var t = FfCQ(); 194 | t["fromInt"](e); 195 | return t; 196 | } 197 | function OEWn(e, t) { 198 | var r; 199 | if (t == 16) 200 | r = 4; 201 | else if (t == 8) 202 | r = 3; 203 | else if (t == 256) 204 | r = 8; 205 | else if (t == 2) 206 | r = 1; 207 | else if (t == 32) 208 | r = 5; 209 | else if (t == 4) 210 | r = 2; 211 | else { 212 | this["fromRadix"](e, t); 213 | return; 214 | } 215 | this["t"] = 0; 216 | this["s"] = 0; 217 | var n = e["length"] 218 | , i = false 219 | , a = 0; 220 | while (--n >= 0) { 221 | var o = r == 8 ? e[n] & 255 : KoqK(e, n); 222 | if (o < 0) { 223 | if (e["charAt"](n) == "-") 224 | i = true; 225 | continue; 226 | } 227 | i = false; 228 | if (a == 0) 229 | this[this["t"]++] = o; 230 | else if (a + r > this["DB"]) { 231 | this[this["t"] - 1] |= (o & (1 << this["DB"] - a) - 1) << a; 232 | this[this["t"]++] = o >> this["DB"] - a; 233 | } else 234 | this[this["t"] - 1] |= o << a; 235 | a += r; 236 | if (a >= this["DB"]) 237 | a -= this["DB"]; 238 | } 239 | if (r == 8 && (e[0] & 128) != 0) { 240 | this["s"] = -1; 241 | if (a > 0) 242 | this[this["t"] - 1] |= (1 << this["DB"] - a) - 1 << a; 243 | } 244 | this["clamp"](); 245 | if (i) 246 | ECgw["ZERO"]["subTo"](this, this); 247 | } 248 | function PrRe() { 249 | var e = this["s"] & this["DM"]; 250 | while (this["t"] > 0 && this[this["t"] - 1] == e) 251 | --this["t"]; 252 | } 253 | function Qkzj(e) { 254 | if (this["s"] < 0) 255 | return "-" + this["negate"]()["toString"](e); 256 | var t; 257 | if (e == 16) 258 | t = 4; 259 | else if (e == 8) 260 | t = 3; 261 | else if (e == 2) 262 | t = 1; 263 | else if (e == 32) 264 | t = 5; 265 | else if (e == 4) 266 | t = 2; 267 | else 268 | return this["toRadix"](e); 269 | var r = (1 << t) - 1, n, i = false, a = "", o = this["t"]; 270 | var s = this["DB"] - o * this["DB"] % t; 271 | if (o-- > 0) { 272 | if (s < this["DB"] && (n = this[o] >> s) > 0) { 273 | i = true; 274 | a = JgdB(n); 275 | } 276 | while (o >= 0) { 277 | if (s < t) { 278 | n = (this[o] & (1 << s) - 1) << t - s; 279 | n |= this[--o] >> (s += this["DB"] - t); 280 | } else { 281 | n = this[o] >> (s -= t) & r; 282 | if (s <= 0) { 283 | s += this["DB"]; 284 | --o; 285 | } 286 | } 287 | if (n > 0) 288 | i = true; 289 | if (i) 290 | a += JgdB(n); 291 | } 292 | } 293 | return i ? a : "0"; 294 | } 295 | function RjsS() { 296 | var e = FfCQ(); 297 | ECgw["ZERO"]["subTo"](this, e); 298 | return e; 299 | } 300 | function SXeD() { 301 | return this["s"] < 0 ? this["negate"]() : this; 302 | } 303 | function TQCz(e) { 304 | var t = this["s"] - e["s"]; 305 | if (t != 0) 306 | return t; 307 | var r = this["t"]; 308 | t = r - e["t"]; 309 | if (t != 0) 310 | return this["s"] < 0 ? -t : t; 311 | while (--r >= 0) 312 | if ((t = this[r] - e[r]) != 0) 313 | return t; 314 | return 0; 315 | } 316 | function UyZO(e) { 317 | var t = 1, r; 318 | if ((r = e >>> 16) != 0) { 319 | e = r; 320 | t += 16; 321 | } 322 | if ((r = e >> 8) != 0) { 323 | e = r; 324 | t += 8; 325 | } 326 | if ((r = e >> 4) != 0) { 327 | e = r; 328 | t += 4; 329 | } 330 | if ((r = e >> 2) != 0) { 331 | e = r; 332 | t += 2; 333 | } 334 | if ((r = e >> 1) != 0) { 335 | e = r; 336 | t += 1; 337 | } 338 | return t; 339 | } 340 | function VHpY() { 341 | if (this["t"] <= 0) 342 | return 0; 343 | return this["DB"] * (this["t"] - 1) + UyZO(this[this["t"] - 1] ^ this["s"] & this["DM"]); 344 | } 345 | function Wacq(e, t) { 346 | var r; 347 | for (r = this["t"] - 1; r >= 0; --r) 348 | t[r + e] = this[r]; 349 | for (r = e - 1; r >= 0; --r) 350 | t[r] = 0; 351 | t["t"] = this["t"] + e; 352 | t["s"] = this["s"]; 353 | } 354 | function XMQd(e, t) { 355 | for (var r = e; r < this["t"]; ++r) 356 | t[r - e] = this[r]; 357 | t["t"] = Math["max"](this["t"] - e, 0); 358 | t["s"] = this["s"]; 359 | } 360 | function YZCv(e, t) { 361 | var r = e % this["DB"]; 362 | var n = this["DB"] - r; 363 | var i = (1 << n) - 1; 364 | var a = Math["floor"](e / this["DB"]), o = this["s"] << r & this["DM"], s; 365 | for (s = this["t"] - 1; s >= 0; --s) { 366 | t[s + a + 1] = this[s] >> n | o; 367 | o = (this[s] & i) << r; 368 | } 369 | for (s = a - 1; s >= 0; --s) 370 | t[s] = 0; 371 | t[a] = o; 372 | t["t"] = this["t"] + a + 1; 373 | t["s"] = this["s"]; 374 | t["clamp"](); 375 | } 376 | function ZFYE(e, t) { 377 | t["s"] = this["s"]; 378 | var r = Math["floor"](e / this["DB"]); 379 | if (r >= this["t"]) { 380 | t["t"] = 0; 381 | return; 382 | } 383 | var n = e % this["DB"]; 384 | var i = this["DB"] - n; 385 | var a = (1 << n) - 1; 386 | t[0] = this[r] >> n; 387 | for (var o = r + 1; o < this["t"]; ++o) { 388 | t[o - r - 1] |= (this[o] & a) << i; 389 | t[o - r] = this[o] >> n; 390 | } 391 | if (n > 0) 392 | t[this["t"] - r - 1] |= (this["s"] & a) << i; 393 | t["t"] = this["t"] - r; 394 | t["clamp"](); 395 | } 396 | function akDh(e, t) { 397 | var r = 0 398 | , n = 0 399 | , i = Math["min"](e["t"], this["t"]); 400 | while (r < i) { 401 | n += this[r] - e[r]; 402 | t[r++] = n & this["DM"]; 403 | n >>= this["DB"]; 404 | } 405 | if (e["t"] < this["t"]) { 406 | n -= e["s"]; 407 | while (r < this["t"]) { 408 | n += this[r]; 409 | t[r++] = n & this["DM"]; 410 | n >>= this["DB"]; 411 | } 412 | n += this["s"]; 413 | } else { 414 | n += this["s"]; 415 | while (r < e["t"]) { 416 | n -= e[r]; 417 | t[r++] = n & this["DM"]; 418 | n >>= this["DB"]; 419 | } 420 | n -= e["s"]; 421 | } 422 | t["s"] = n < 0 ? -1 : 0; 423 | if (n < -1) 424 | t[r++] = this["DV"] + n; 425 | else if (n > 0) 426 | t[r++] = n; 427 | t["t"] = r; 428 | t["clamp"](); 429 | } 430 | function bpSt(e, t) { 431 | var r = this["abs"]() 432 | , n = e["abs"](); 433 | var i = r["t"]; 434 | t["t"] = i + n["t"]; 435 | while (--i >= 0) 436 | t[i] = 0; 437 | for (i = 0; i < n["t"]; ++i) 438 | t[i + r["t"]] = r["am"](0, n[i], t, i, 0, r["t"]); 439 | t["s"] = 0; 440 | t["clamp"](); 441 | if (this["s"] != e["s"]) 442 | ECgw["ZERO"]["subTo"](t, t); 443 | } 444 | 445 | function ceLN(e) { 446 | var t = this["abs"](); 447 | var r = e["t"] = 2 * t["t"]; 448 | while (--r >= 0) 449 | e[r] = 0; 450 | for (r = 0; r < t["t"] - 1; ++r) { 451 | var n = t["am"](r, t[r], e, 2 * r, 0, 1); 452 | if ((e[r + t["t"]] += t["am"](r + 1, 2 * t[r], e, 2 * r + 1, n, t["t"] - r - 1)) >= t["DV"]) { 453 | e[r + t["t"]] -= t["DV"]; 454 | e[r + t["t"] + 1] = 1; 455 | } 456 | } 457 | if (e["t"] > 0) 458 | e[e["t"] - 1] += t["am"](r, t[r], e, 2 * r, 0, 1); 459 | e["s"] = 0; 460 | e["clamp"](); 461 | } 462 | function dHfY(e, t, r) { 463 | var n = e["abs"](); 464 | if (n["t"] <= 0) 465 | return; 466 | var i = this["abs"](); 467 | if (i["t"] < n["t"]) { 468 | if (t != null) 469 | t["fromInt"](0); 470 | if (r != null) 471 | this["copyTo"](r); 472 | return; 473 | } 474 | if (r == null) 475 | r = FfCQ(); 476 | var a = FfCQ() 477 | , o = this["s"] 478 | , s = e["s"]; 479 | var c = this["DB"] - UyZO(n[n["t"] - 1]); 480 | if (c > 0) { 481 | n["lShiftTo"](c, a); 482 | i["lShiftTo"](c, r); 483 | } else { 484 | n["copyTo"](a); 485 | i["copyTo"](r); 486 | } 487 | var u = a["t"]; 488 | var l = a[u - 1]; 489 | if (l == 0) 490 | return; 491 | var f = l * (1 << this["F1"]) + (u > 1 ? a[u - 2] >> this["F2"] : 0); 492 | var _ = this["FV"] / f 493 | , h = (1 << this["F1"]) / f 494 | , d = 1 << this["F2"]; 495 | var p = r["t"] 496 | , v = p - u 497 | , g = t == null ? FfCQ() : t; 498 | a["dlShiftTo"](v, g); 499 | if (r["compareTo"](g) >= 0) { 500 | r[r["t"]++] = 1; 501 | r["subTo"](g, r); 502 | } 503 | ECgw["ONE"]["dlShiftTo"](u, g); 504 | g["subTo"](a, a); 505 | while (a["t"] < u) 506 | a[a["t"]++] = 0; 507 | while (--v >= 0) { 508 | var m = r[--p] == l ? this["DM"] : Math["floor"](r[p] * _ + (r[p - 1] + d) * h); 509 | if ((r[p] += a["am"](0, m, r, v, 0, u)) < m) { 510 | a["dlShiftTo"](v, g); 511 | r["subTo"](g, r); 512 | while (r[p] < --m) 513 | r["subTo"](g, r); 514 | } 515 | } 516 | if (t != null) { 517 | r["drShiftTo"](u, t); 518 | if (o != s) 519 | ECgw["ZERO"]["subTo"](t, t); 520 | } 521 | r["t"] = u; 522 | r["clamp"](); 523 | if (c > 0) 524 | r["rShiftTo"](c, r); 525 | if (o < 0) 526 | ECgw["ZERO"]["subTo"](r, r); 527 | } 528 | function eGqu(e) { 529 | var t = FfCQ(); 530 | this["abs"]()["divRemTo"](e, null, t); 531 | if (this["s"] < 0 && t["compareTo"](ECgw["ZERO"]) > 0) 532 | e["subTo"](t, t); 533 | return t; 534 | } 535 | function fXGL(e) { 536 | this["m"] = e; 537 | } 538 | function gjxd(e) { 539 | if (e["s"] < 0 || e["compareTo"](this["m"]) >= 0) 540 | return e["mod"](this["m"]); 541 | else 542 | return e; 543 | } 544 | function hTyL(e) { 545 | return e; 546 | } 547 | function iwgX(e) { 548 | e["divRemTo"](this["m"], null, e); 549 | } 550 | function jQpV(e, t, r) { 551 | e["multiplyTo"](t, r); 552 | this["reduce"](r); 553 | } 554 | function kfEF(e, t) { 555 | e["squareTo"](t); 556 | this["reduce"](t); 557 | } 558 | fXGL["prototype"]["convert"] = gjxd; 559 | fXGL["prototype"]["revert"] = hTyL; 560 | fXGL["prototype"]["reduce"] = iwgX; 561 | fXGL["prototype"]["mulTo"] = jQpV; 562 | fXGL["prototype"]["sqrTo"] = kfEF; 563 | function lhWI() { 564 | if (this["t"] < 1) 565 | return 0; 566 | var e = this[0]; 567 | if ((e & 1) == 0) 568 | return 0; 569 | var t = e & 3; 570 | t = t * (2 - (e & 15) * t) & 15; 571 | t = t * (2 - (e & 255) * t) & 255; 572 | t = t * (2 - ((e & 65535) * t & 65535)) & 65535; 573 | t = t * (2 - e * t % this["DV"]) % this["DV"]; 574 | return t > 0 ? this["DV"] - t : -t; 575 | } 576 | function mOQz(e) { 577 | this["m"] = e; 578 | this["mp"] = e["invDigit"](); 579 | this["mpl"] = this["mp"] & 32767; 580 | this["mph"] = this["mp"] >> 15; 581 | this["um"] = (1 << e["DB"] - 15) - 1; 582 | this["mt2"] = 2 * e["t"]; 583 | } 584 | function nPnU(e) { 585 | var t = FfCQ(); 586 | e["abs"]()["dlShiftTo"](this["m"]["t"], t); 587 | t["divRemTo"](this["m"], null, t); 588 | if (e["s"] < 0 && t["compareTo"](ECgw["ZERO"]) > 0) 589 | this["m"]["subTo"](t, t); 590 | return t; 591 | } 592 | function oMQg(e) { 593 | var t = FfCQ(); 594 | e["copyTo"](t); 595 | this["reduce"](t); 596 | return t; 597 | } 598 | function pGxD(e) { 599 | while (e["t"] <= this["mt2"]) 600 | e[e["t"]++] = 0; 601 | for (var t = 0; t < this["m"]["t"]; ++t) { 602 | var r = e[t] & 32767; 603 | var n = r * this["mpl"] + ((r * this["mph"] + (e[t] >> 15) * this["mpl"] & this["um"]) << 15) & e["DM"]; 604 | r = t + this["m"]["t"]; 605 | e[r] += this["m"]["am"](0, n, e, t, 0, this["m"]["t"]); 606 | while (e[r] >= e["DV"]) { 607 | e[r] -= e["DV"]; 608 | e[++r]++; 609 | } 610 | } 611 | e["clamp"](); 612 | e["drShiftTo"](this["m"]["t"], e); 613 | if (e["compareTo"](this["m"]) >= 0) 614 | e["subTo"](this["m"], e); 615 | } 616 | function qngB(e, t) { 617 | e["squareTo"](t); 618 | this["reduce"](t); 619 | } 620 | function rOhP(e, t, r) { 621 | e["multiplyTo"](t, r); 622 | this["reduce"](r); 623 | } 624 | mOQz["prototype"]["convert"] = nPnU; 625 | mOQz["prototype"]["revert"] = oMQg; 626 | mOQz["prototype"]["reduce"] = pGxD; 627 | mOQz["prototype"]["mulTo"] = rOhP; 628 | mOQz["prototype"]["sqrTo"] = qngB; 629 | function stSt() { 630 | return (this["t"] > 0 ? this[0] & 1 : this["s"]) == 0; 631 | } 632 | function tLLD(e, t) { 633 | if (e > 4294967295 || e < 1) 634 | return ECgw["ONE"]; 635 | var r = FfCQ() 636 | , n = FfCQ() 637 | , i = t["convert"](this) 638 | , a = UyZO(e) - 1; 639 | i["copyTo"](r); 640 | while (--a >= 0) { 641 | t["sqrTo"](r, n); 642 | if ((e & 1 << a) > 0) 643 | t["mulTo"](n, i, r); 644 | else { 645 | var o = r; 646 | r = n; 647 | n = o; 648 | } 649 | } 650 | return t["revert"](r); 651 | } 652 | function ulWS(e, t) { 653 | var r; 654 | if (e < 256 || t["isEven"]()) 655 | r = new fXGL(t); 656 | else 657 | r = new mOQz(t); 658 | return this["exp"](e, r); 659 | } 660 | ECgw["prototype"]["copyTo"] = LyUc; 661 | ECgw["prototype"]["fromInt"] = MDPU; 662 | ECgw["prototype"]["fromString"] = OEWn; 663 | ECgw["prototype"]["clamp"] = PrRe; 664 | ECgw["prototype"]["dlShiftTo"] = Wacq; 665 | ECgw["prototype"]["drShiftTo"] = XMQd; 666 | ECgw["prototype"]["lShiftTo"] = YZCv; 667 | ECgw["prototype"]["rShiftTo"] = ZFYE; 668 | ECgw["prototype"]["subTo"] = akDh; 669 | ECgw["prototype"]["multiplyTo"] = bpSt; 670 | ECgw["prototype"]["squareTo"] = ceLN; 671 | ECgw["prototype"]["divRemTo"] = dHfY; 672 | ECgw["prototype"]["invDigit"] = lhWI; 673 | ECgw["prototype"]["isEven"] = stSt; 674 | ECgw["prototype"]["exp"] = tLLD; 675 | ECgw["prototype"]["toString"] = Qkzj; 676 | ECgw["prototype"]["negate"] = RjsS; 677 | ECgw["prototype"]["abs"] = SXeD; 678 | ECgw["prototype"]["compareTo"] = TQCz; 679 | ECgw["prototype"]["bitLength"] = VHpY; 680 | ECgw["prototype"]["mod"] = eGqu; 681 | ECgw["prototype"]["modPowInt"] = ulWS; 682 | ECgw["ZERO"] = NrhG(0); 683 | ECgw["ONE"] = NrhG(1); 684 | function vyPg(e, t) { 685 | return new ECgw(e, t); 686 | } 687 | function wYWb(e, t) { 688 | if (t < e["length"] + 11) { 689 | console["error"]("Message too long for RSA"); 690 | return null; 691 | } 692 | var r = []; 693 | var n = e["length"] - 1; 694 | while (n >= 0 && t > 0) { 695 | var i = e["charCodeAt"](n--); 696 | if (i < 128) { 697 | r[--t] = i; 698 | } else if (i > 127 && i < 2048) { 699 | r[--t] = i & 63 | 128; 700 | r[--t] = i >> 6 | 192; 701 | } else { 702 | r[--t] = i & 63 | 128; 703 | r[--t] = i >> 6 & 63 | 128; 704 | r[--t] = i >> 12 | 224; 705 | } 706 | } 707 | r[--t] = 0; 708 | var a = new DZdA(); 709 | var o = []; 710 | while (t > 2) { 711 | o[0] = 0; 712 | while (o[0] == 0) 713 | a["nextBytes"](o); 714 | r[--t] = o[0]; 715 | } 716 | r[--t] = 2; 717 | r[--t] = 0; 718 | return new ECgw(r); 719 | } 720 | function vwBb() { 721 | this["n"] = null; 722 | this["e"] = 0; 723 | this["d"] = null; 724 | this["p"] = null; 725 | this["q"] = null; 726 | this["dmp1"] = null; 727 | this["dmq1"] = null; 728 | this["coeff"] = null; 729 | var e = "00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81"; 730 | var t = "10001"; 731 | this["setPublic"](e, t); 732 | } 733 | function xVcK(e, t) { 734 | if (e != null && t != null && e["length"] > 0 && t["length"] > 0) { 735 | this["n"] = vyPg(e, 16); 736 | this["e"] = parseInt(t, 16); 737 | } else 738 | console["error"]("Invalid RSA public key"); 739 | } 740 | function yPfI(e) { 741 | return e["modPowInt"](this["e"], this["n"]); 742 | } 743 | function AlTp(e) { 744 | var t = wYWb(e, this["n"]["bitLength"]() + 7 >> 3); 745 | if (t == null) 746 | return null; 747 | var r = this["doPublic"](t); 748 | if (r == null) 749 | return null; 750 | var n = r["toString"](16); 751 | if ((n["length"] & 1) == 0) 752 | return n; 753 | else 754 | return "0" + n; 755 | } 756 | vwBb["prototype"]["doPublic"] = yPfI; 757 | vwBb["prototype"]["setPublic"] = xVcK; 758 | vwBb["prototype"]["encrypt"] = AlTp; 759 | return vwBb; 760 | }(); 761 | 762 | return new vwBb()["encrypt"](sstr); 763 | 764 | } -------------------------------------------------------------------------------- /geetest_crack/js/fullpage_w1.js: -------------------------------------------------------------------------------- 1 | function get_w(gt, challenge, s, t) { 2 | 3 | var GxkI = { 4 | "BtcL": { 5 | "CWUe": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()", 6 | "Dkuz": ".", 7 | "EutS": 7274496, 8 | "FV_o": 9483264, 9 | "GYjg": 19220, 10 | "Hjhi": 235, 11 | "IPBn": 24 12 | }, 13 | "CWUe": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789()", 14 | "Dkuz": ".", 15 | "EutS": 7274496, 16 | "FV_o": 9483264, 17 | "GYjg": 19220, 18 | "Hjhi": 235, 19 | "IPBn": 24, 20 | "JCue": function (e) { 21 | var t = []; 22 | for (var r = 0, n = e["length"]; r < n; r += 1) { 23 | t["push"](e["charCodeAt"](r)); 24 | } 25 | return t; 26 | }, 27 | "KplX": function (e) { 28 | var t = ""; 29 | for (var r = 0, n = e["length"]; r < n; r += 1) { 30 | t += String["fromCharCode"](e[r]); 31 | } 32 | return t; 33 | }, 34 | "LZaU": function (e) { 35 | var t = this["CWUe"]; 36 | if (e < 0 || e >= t["length"]) { 37 | return "."; 38 | } 39 | return t["charAt"](e); 40 | }, 41 | "MkZl": function (e) { 42 | var t = this["CWUe"]; 43 | return t["indexOf"](e); 44 | }, 45 | "NyXA": function (e, t) { 46 | return e >> t & 1; 47 | }, 48 | "Omvq": function (e, i) { 49 | var a = this; 50 | if (!i) { 51 | i = a; 52 | } 53 | 54 | function t(e, t) { 55 | var r = 0; 56 | for (var n = i["IPBn"] - 1; n >= 0; n -= 1) { 57 | if (a["NyXA"](t, n) === 1) { 58 | r = (r << 1) + a["NyXA"](e, n); 59 | } 60 | } 61 | return r; 62 | } 63 | 64 | var r = "" 65 | , n = ""; 66 | var o = e["length"]; 67 | for (var s = 0; s < o; s += 3) { 68 | var c; 69 | if (s + 2 < o) { 70 | c = (e[s] << 16) + (e[s + 1] << 8) + e[s + 2]; 71 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])) + a["LZaU"](t(c, i["GYjg"])) + a["LZaU"](t(c, i["Hjhi"])); 72 | } else { 73 | var u = o % 3; 74 | if (u === 2) { 75 | c = (e[s] << 16) + (e[s + 1] << 8); 76 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])) + a["LZaU"](t(c, i["GYjg"])); 77 | n = i["Dkuz"]; 78 | } else if (u === 1) { 79 | c = e[s] << 16; 80 | r += a["LZaU"](t(c, i["EutS"])) + a["LZaU"](t(c, i["FV_o"])); 81 | n = i["Dkuz"] + i["Dkuz"]; 82 | } 83 | } 84 | } 85 | return { 86 | "res": r, 87 | "end": n 88 | }; 89 | }, 90 | "PwRX": function (e) { 91 | var t = this; 92 | var r = t["Omvq"](t["JCue"](e)); 93 | return r["res"] + r["end"]; 94 | }, 95 | "QLsv": function (e) { 96 | var t = this; 97 | var r = t["Omvq"](e); 98 | return r["res"] + r["end"]; 99 | }, 100 | "RarB": function (e, a) { 101 | var o = this; 102 | if (!a) { 103 | a = o; 104 | } 105 | 106 | function t(e, t) { 107 | if (e < 0) { 108 | return 0; 109 | } 110 | var r = 5; 111 | var n = 0; 112 | for (var i = a["IPBn"] - 1; i >= 0; i -= 1) { 113 | if (o["NyXA"](t, i) === 1) { 114 | n += o["NyXA"](e, r) << i; 115 | r -= 1; 116 | } 117 | } 118 | return n; 119 | } 120 | 121 | var r = e["length"]; 122 | var n = ""; 123 | for (var i = 0; i < r; i += 4) { 124 | var s = t(o["MkZl"](e["charAt"](i)), a["EutS"]) + t(o["MkZl"](e["charAt"](i + 1)), a["FV_o"]) + t(o["MkZl"](e["charAt"](i + 2)), a["GYjg"]) + t(o["MkZl"](e["charAt"](i + 3)), a["Hjhi"]); 125 | var c = s >> 16 & 255; 126 | n += String["fromCharCode"](c); 127 | if (e["charAt"](i + 2) !== a["Dkuz"]) { 128 | var u = s >> 8 & 255; 129 | n += String["fromCharCode"](u); 130 | if (e["charAt"](i + 3) !== a["Dkuz"]) { 131 | var l = s & 255; 132 | n += String["fromCharCode"](l); 133 | } 134 | } 135 | } 136 | return n; 137 | }, 138 | "SJjt": function (e) { 139 | var t = this; 140 | var r = 4 - e["length"] % 4; 141 | if (r < 4) { 142 | for (var n = 0; n < r; n += 1) { 143 | e += t["Dkuz"]; 144 | } 145 | } 146 | return t["RarB"](e); 147 | }, 148 | "TIsR": function (e) { 149 | var t = this; 150 | return t["SJjt"](e); 151 | } 152 | }; 153 | 154 | function vUUf() { 155 | var r = Object["create"] || function () { 156 | function F() { 157 | } 158 | 159 | return function (e) { 160 | var t; 161 | F["prototype"] = e; 162 | t = new F(); 163 | F["prototype"] = null; 164 | return t; 165 | } 166 | ; 167 | }(); 168 | var e = {}; 169 | var t = e["lib"] = {}; 170 | var n = t["Base"] = function () { 171 | return { 172 | "RAIS": function (e) { 173 | var t = r(this); 174 | if (e) { 175 | t["mixIn"](e); 176 | } 177 | if (!t["hasOwnProperty"]("init") || this["init"] === t["init"]) { 178 | t["init"] = function () { 179 | t["$super"]["init"]["apply"](this, arguments); 180 | } 181 | ; 182 | } 183 | t["init"]["prototype"] = t; 184 | t["$super"] = this; 185 | return t; 186 | }, 187 | "create": function () { 188 | var e = this["RAIS"](); 189 | e["init"]["apply"](e, arguments); 190 | return e; 191 | }, 192 | "init": function () { 193 | }, 194 | "mixIn": function (e) { 195 | for (var t in e) { 196 | if (e["hasOwnProperty"](t)) { 197 | this[t] = e[t]; 198 | } 199 | } 200 | if (e["hasOwnProperty"]("toString")) { 201 | this["toString"] = e["toString"]; 202 | } 203 | } 204 | }; 205 | }(); 206 | var f = t["WordArray"] = n["RAIS"]({ 207 | "init": function (e, t) { 208 | e = this["words"] = e || []; 209 | if (t != undefined) { 210 | this["sigBytes"] = t; 211 | } else { 212 | this["sigBytes"] = e["length"] * 4; 213 | } 214 | }, 215 | "concat": function (e) { 216 | var t = this["words"]; 217 | var r = e["words"]; 218 | var n = this["sigBytes"]; 219 | var i = e["sigBytes"]; 220 | this["clamp"](); 221 | if (n % 4) { 222 | for (var a = 0; a < i; a++) { 223 | var o = r[a >>> 2] >>> 24 - a % 4 * 8 & 255; 224 | t[n + a >>> 2] |= o << 24 - (n + a) % 4 * 8; 225 | } 226 | } else { 227 | for (var a = 0; a < i; a += 4) { 228 | t[n + a >>> 2] = r[a >>> 2]; 229 | } 230 | } 231 | this["sigBytes"] += i; 232 | return this; 233 | }, 234 | "clamp": function () { 235 | var e = this["words"]; 236 | var t = this["sigBytes"]; 237 | e[t >>> 2] &= 4294967295 << 32 - t % 4 * 8; 238 | e["length"] = Math["ceil"](t / 4); 239 | } 240 | }); 241 | var i = e["enc"] = {}; 242 | var _ = i["Latin1"] = { 243 | "parse": function (e) { 244 | var t = e["length"]; 245 | var r = []; 246 | for (var n = 0; n < t; n++) { 247 | r[n >>> 2] |= (e["charCodeAt"](n) & 255) << 24 - n % 4 * 8; 248 | } 249 | return new f[("init")](r, t); 250 | } 251 | }; 252 | var a = i["Utf8"] = { 253 | "parse": function (e) { 254 | return _["parse"](unescape(encodeURIComponent(e))); 255 | } 256 | }; 257 | var o = t["BufferedBlockAlgorithm"] = n["RAIS"]({ 258 | "reset": function () { 259 | this["IBDR"] = new f[("init")](); 260 | this["aboq"] = 0; 261 | }, 262 | "beSP": function (e) { 263 | if (typeof e == "string") { 264 | e = a["parse"](e); 265 | } 266 | this["IBDR"]["concat"](e); 267 | this["aboq"] += e["sigBytes"]; 268 | }, 269 | "cVhj": function (e) { 270 | var t = this["IBDR"]; 271 | var r = t["words"]; 272 | var n = t["sigBytes"]; 273 | var i = this["blockSize"]; 274 | var a = i * 4; 275 | var o = n / a; 276 | if (e) { 277 | o = Math["ceil"](o); 278 | } else { 279 | o = Math["max"]((o | 0) - this["dIWA"], 0); 280 | } 281 | var s = o * i; 282 | var c = Math["min"](s * 4, n); 283 | if (s) { 284 | for (var u = 0; u < s; u += i) { 285 | this["etNa"](r, u); 286 | } 287 | var l = r["splice"](0, s); 288 | t["sigBytes"] -= c; 289 | } 290 | return new f[("init")](l, c); 291 | }, 292 | "dIWA": 0 293 | }); 294 | var s = e["algo"] = {}; 295 | var c = t["Cipher"] = o["RAIS"]({ 296 | "cfg": n["RAIS"](), 297 | "createEncryptor": function (e, t) { 298 | return this["create"](this["fUWQ"], e, t); 299 | }, 300 | "init": function (e, t, r) { 301 | this["cfg"] = this["cfg"]["RAIS"](r); 302 | this["gOzX"] = e; 303 | this["hN_h"] = t; 304 | this["reset"](); 305 | }, 306 | "reset": function () { 307 | o["reset"]["call"](this); 308 | this["ieEa"](); 309 | }, 310 | "process": function (e) { 311 | this["beSP"](e); 312 | return this["cVhj"](); 313 | }, 314 | "finalize": function (e) { 315 | if (e) { 316 | this["beSP"](e); 317 | } 318 | var t = this["jvF_"](); 319 | return t; 320 | }, 321 | "keySize": 128 / 32, 322 | "ivSize": 128 / 32, 323 | "fUWQ": 1, 324 | "kqYl": 2, 325 | "lFmq": function () { 326 | return function (u) { 327 | var l = 0 328 | , f = []; 329 | return { 330 | "encrypt": function (e, t, r) { 331 | undefined; 332 | var t = _["parse"](t); 333 | if (!r || !r["iv"]) { 334 | r = r || {}; 335 | r["iv"] = _["parse"]("0000000000000000"); 336 | } 337 | var n = m["encrypt"](u, e, t, r); 338 | undefined; 339 | var i = n["ciphertext"]["words"]; 340 | undefined; 341 | var a = n["ciphertext"]["sigBytes"]; 342 | l === 0 && f["push"](a); 343 | l === 0 && f["push"](a); 344 | l++; 345 | f["push"](a); 346 | a = f["shift"](); 347 | var o = []; 348 | for (var s = 0; s < a; s++) { 349 | var c = i[s >>> 2] >>> 24 - s % 4 * 8 & 255; 350 | o["push"](c); 351 | } 352 | return o; 353 | }, 354 | "encrypt1": function (e, t, r) { 355 | var t = _["parse"](t); 356 | if (!r || !r["iv"]) { 357 | r = r || {}; 358 | r["iv"] = _["parse"]("0000000000000000"); 359 | } 360 | var n = m["encrypt"](u, e, t, r); 361 | var i = n["ciphertext"]["words"]; 362 | var a = n["ciphertext"]["sigBytes"]; 363 | var o = []; 364 | for (var s = 0; s < a; s++) { 365 | var c = i[s >>> 2] >>> 24 - s % 4 * 8 & 255; 366 | o["push"](c); 367 | } 368 | return o; 369 | } 370 | }; 371 | } 372 | ; 373 | }() 374 | }); 375 | var u = e["mode"] = {}; 376 | var l = t["BlockCipherMode"] = n["RAIS"]({ 377 | "createEncryptor": function (e, t) { 378 | return this["Encryptor"]["create"](e, t); 379 | }, 380 | "init": function (e, t) { 381 | this["mvyv"] = e; 382 | this["nvgX"] = t; 383 | } 384 | }); 385 | var h = u["CBC"] = function () { 386 | var e = l["RAIS"](); 387 | e["Encryptor"] = e["RAIS"]({ 388 | "processBlock": function (e, t) { 389 | var r = this["mvyv"]; 390 | var n = r["blockSize"]; 391 | wxls["call"](this, e, t, n); 392 | r["encryptBlock"](e, t); 393 | this["oToE"] = e["slice"](t, t + n); 394 | } 395 | }); 396 | 397 | function wxls(e, t, r) { 398 | var n = this["nvgX"]; 399 | if (n) { 400 | var i = n; 401 | this["nvgX"] = undefined; 402 | } else { 403 | var i = this["oToE"]; 404 | } 405 | for (var a = 0; a < r; a++) { 406 | e[t + a] ^= i[a]; 407 | } 408 | } 409 | 410 | return e; 411 | }(); 412 | var d = e["pad"] = {}; 413 | var p = d["Pkcs7"] = { 414 | "pad": function (e, t) { 415 | var r = t * 4; 416 | var n = r - e["sigBytes"] % r; 417 | var i = n << 24 | n << 16 | n << 8 | n; 418 | var a = []; 419 | for (var o = 0; o < n; o += 4) { 420 | a["push"](i); 421 | } 422 | var s = f["create"](a, n); 423 | e["concat"](s); 424 | } 425 | }; 426 | var v = t["BlockCipher"] = c["RAIS"]({ 427 | "cfg": c["cfg"]["RAIS"]({ 428 | "mode": h, 429 | "padding": p 430 | }), 431 | "reset": function () { 432 | c["reset"]["call"](this); 433 | var e = this["cfg"]; 434 | var t = e["iv"]; 435 | var r = e["mode"]; 436 | if (this["gOzX"] == this["fUWQ"]) { 437 | var n = r["createEncryptor"]; 438 | } 439 | if (this["pxAj"] && this["pxAj"]["qFEO"] == n) { 440 | this["pxAj"]["init"](this, t && t["words"]); 441 | } else { 442 | this["pxAj"] = n["call"](r, this, t && t["words"]); 443 | this["pxAj"]["qFEO"] = n; 444 | } 445 | }, 446 | "etNa": function (e, t) { 447 | this["pxAj"]["processBlock"](e, t); 448 | }, 449 | "jvF_": function () { 450 | var e = this["cfg"]["padding"]; 451 | if (this["gOzX"] == this["fUWQ"]) { 452 | e["pad"](this["IBDR"], this["blockSize"]); 453 | var t = this["cVhj"](!!"flush"); 454 | } 455 | return t; 456 | }, 457 | "blockSize": 128 / 32 458 | }); 459 | var g = t["CipherParams"] = n["RAIS"]({ 460 | "init": function (e) { 461 | this["mixIn"](e); 462 | } 463 | }); 464 | var m = t["SerializableCipher"] = n["RAIS"]({ 465 | "cfg": n["RAIS"](), 466 | "encrypt": function (e, t, r, n) { 467 | n = this["cfg"]["RAIS"](n); 468 | var i = e["createEncryptor"](r, n); 469 | var a = i["finalize"](t); 470 | var o = i["cfg"]; 471 | return g["create"]({ 472 | "ciphertext": a, 473 | "key": r, 474 | "iv": o["iv"], 475 | "algorithm": e, 476 | "mode": o["mode"], 477 | "padding": o["padding"], 478 | "blockSize": e["blockSize"], 479 | "formatter": n["format"] 480 | }); 481 | } 482 | }); 483 | var E = []; 484 | var w = []; 485 | var y = []; 486 | var b = []; 487 | var T = []; 488 | var S = []; 489 | var A = []; 490 | var R = []; 491 | var x = []; 492 | var C = []; 493 | (function () { 494 | var e = []; 495 | for (var t = 0; t < 256; t++) { 496 | if (t < 128) { 497 | e[t] = t << 1; 498 | } else { 499 | e[t] = t << 1 ^ 283; 500 | } 501 | } 502 | var r = 0; 503 | var n = 0; 504 | for (var t = 0; t < 256; t++) { 505 | var i = n ^ n << 1 ^ n << 2 ^ n << 3 ^ n << 4; 506 | i = i >>> 8 ^ i & 255 ^ 99; 507 | E[r] = i; 508 | w[i] = r; 509 | var a = e[r]; 510 | var o = e[a]; 511 | var s = e[o]; 512 | var c = e[i] * 257 ^ i * 16843008; 513 | y[r] = c << 24 | c >>> 8; 514 | b[r] = c << 16 | c >>> 16; 515 | T[r] = c << 8 | c >>> 24; 516 | S[r] = c; 517 | var c = s * 16843009 ^ o * 65537 ^ a * 257 ^ r * 16843008; 518 | A[i] = c << 24 | c >>> 8; 519 | R[i] = c << 16 | c >>> 16; 520 | x[i] = c << 8 | c >>> 24; 521 | C[i] = c; 522 | if (!r) { 523 | r = n = 1; 524 | } else { 525 | r = a ^ e[e[e[s ^ a]]]; 526 | n ^= e[e[n]]; 527 | } 528 | } 529 | }()); 530 | var I = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]; 531 | var D = s["AES"] = v["RAIS"]({ 532 | "ieEa": function () { 533 | if (this["ryHV"] && this["ssZe"] === this["hN_h"]) { 534 | return; 535 | } 536 | var e = this["ssZe"] = this["hN_h"]; 537 | var t = e["words"]; 538 | var r = e["sigBytes"] / 4; 539 | var n = this["ryHV"] = r + 6; 540 | var i = (n + 1) * 4; 541 | var a = this["tsou"] = []; 542 | for (var o = 0; o < i; o++) { 543 | if (o < r) { 544 | a[o] = t[o]; 545 | } else { 546 | var s = a[o - 1]; 547 | if (!(o % r)) { 548 | s = s << 8 | s >>> 24; 549 | s = E[s >>> 24] << 24 | E[s >>> 16 & 255] << 16 | E[s >>> 8 & 255] << 8 | E[s & 255]; 550 | s ^= I[o / r | 0] << 24; 551 | } else if (r > 6 && o % r == 4) { 552 | s = E[s >>> 24] << 24 | E[s >>> 16 & 255] << 16 | E[s >>> 8 & 255] << 8 | E[s & 255]; 553 | } 554 | a[o] = a[o - r] ^ s; 555 | } 556 | } 557 | var c = this["urZV"] = []; 558 | for (var u = 0; u < i; u++) { 559 | var o = i - u; 560 | if (u % 4) { 561 | var s = a[o]; 562 | } else { 563 | var s = a[o - 4]; 564 | } 565 | if (u < 4 || o <= 4) { 566 | c[u] = s; 567 | } else { 568 | c[u] = A[E[s >>> 24]] ^ R[E[s >>> 16 & 255]] ^ x[E[s >>> 8 & 255]] ^ C[E[s & 255]]; 569 | } 570 | } 571 | }, 572 | "encryptBlock": function (e, t) { 573 | this["vQBx"](e, t, this["tsou"], y, b, T, S, E); 574 | }, 575 | "vQBx": function (e, t, r, n, i, a, o, s) { 576 | var c = this["ryHV"]; 577 | var u = e[t] ^ r[0]; 578 | var l = e[t + 1] ^ r[1]; 579 | var f = e[t + 2] ^ r[2]; 580 | var _ = e[t + 3] ^ r[3]; 581 | var h = 4; 582 | for (var d = 1; d < c; d++) { 583 | var p = n[u >>> 24] ^ i[l >>> 16 & 255] ^ a[f >>> 8 & 255] ^ o[_ & 255] ^ r[h++]; 584 | var v = n[l >>> 24] ^ i[f >>> 16 & 255] ^ a[_ >>> 8 & 255] ^ o[u & 255] ^ r[h++]; 585 | var g = n[f >>> 24] ^ i[_ >>> 16 & 255] ^ a[u >>> 8 & 255] ^ o[l & 255] ^ r[h++]; 586 | var m = n[_ >>> 24] ^ i[u >>> 16 & 255] ^ a[l >>> 8 & 255] ^ o[f & 255] ^ r[h++]; 587 | u = p; 588 | l = v; 589 | f = g; 590 | _ = m; 591 | } 592 | var p = (s[u >>> 24] << 24 | s[l >>> 16 & 255] << 16 | s[f >>> 8 & 255] << 8 | s[_ & 255]) ^ r[h++]; 593 | var v = (s[l >>> 24] << 24 | s[f >>> 16 & 255] << 16 | s[_ >>> 8 & 255] << 8 | s[u & 255]) ^ r[h++]; 594 | var g = (s[f >>> 24] << 24 | s[_ >>> 16 & 255] << 16 | s[u >>> 8 & 255] << 8 | s[l & 255]) ^ r[h++]; 595 | var m = (s[_ >>> 24] << 24 | s[u >>> 16 & 255] << 16 | s[l >>> 8 & 255] << 8 | s[f & 255]) ^ r[h++]; 596 | e[t] = p; 597 | e[t + 1] = v; 598 | e[t + 2] = g; 599 | e[t + 3] = m; 600 | }, 601 | "keySize": 256 / 32 602 | }); 603 | e["AES"] = v["lFmq"](D); 604 | return e["AES"]; 605 | } 606 | 607 | 608 | var ehwd = { 609 | "gt": gt, 610 | "challenge": challenge, 611 | "offline": false, 612 | "product": "popup", 613 | "width": "100%", 614 | "api_server": "captcha-api.pingan.com", 615 | "https": true, 616 | "protocol": "https://", 617 | "type": "fullpage", 618 | "fullpage": "/static/js/fullpage.pingan.1.3.js", 619 | "click": "/static/js/click.pingan.1.2.js", 620 | "slide": "/static/js/slide.pingan.1.2.js", 621 | "geetest": "/static/js/geetest.5.13.0.js", 622 | "static_servers": ["captcha-static.pingan.com"], 623 | "aspect_radio": {"slide": 103, "click": 128}, 624 | "cc": 4, 625 | "ww": true, 626 | "i": _RCHD() 627 | }; 628 | 629 | var r = vUUf()["encrypt1"](JSON.stringify(ehwd), s); 630 | var n = GxkI["QLsv"](r); 631 | return n + t; 632 | 633 | function _RCHD() { 634 | var r = { 635 | "LINK": 2, 636 | "STYLE": 1, 637 | "SCRIPT": 17, 638 | "INPUT": 9, 639 | "DIV": 33, 640 | "LABEL": 3, 641 | "IMG": 3, 642 | "UL": 1, 643 | "LI": 71, 644 | "SPAN": 1, 645 | "A": 3, 646 | "IFRAME": 1, 647 | "textLength": 5498, 648 | "HTMLLength": 15127, 649 | "documentMode": "CSS1Compat", 650 | "browserLanguage": "en-US", 651 | "browserLanguages": "en-US,zh,zh-CN", 652 | "devicePixelRatio": 2, 653 | "colorDepth": 24, 654 | "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36", 655 | "cookieEnabled": 1, 656 | "netEnabled": 1, 657 | "innerWidth": 377, 658 | "innerHeight": 826, 659 | "outerWidth": 1536, 660 | "outerHeight": 937, 661 | "screenWidth": 1536, 662 | "screenHeight": 960, 663 | "screenAvailWidth": 1536, 664 | "screenAvailHeight": 937, 665 | "screenLeft": 0, 666 | "screenTop": 23, 667 | "screenAvailLeft": 0, 668 | "screenAvailTop": 23, 669 | "localStorageEnabled": 1, 670 | "sessionStorageEnabled": 1, 671 | "indexedDBEnabled": 1, 672 | "platform": "MacIntel", 673 | "doNotTrack": 0, 674 | "timezone": -8, 675 | "canvas2DFP": "b2fe547f0bec5970946f825cd58e1b80", 676 | "canvas3DFP": "3c904c7550e442c22a5ad0d73a074672", 677 | "plugins": "internal-pdf-viewer,mhjfbmdgcfjbbpaeojofohoefgiehjai,internal-nacl-plugin", 678 | "maxTouchPoints": 0, 679 | "flashEnabled": -1, 680 | "javaEnabled": 0, 681 | "hardwareConcurrency": 16, 682 | "jsFonts": "", 683 | "mediaDevices": -1, 684 | "performanceTiming": "", 685 | "timestamp": 1578278143968, 686 | "st": "4e1052", 687 | "deviceorientation": false, 688 | "touchEvent": false, 689 | "internalip": "10.1.36.133" 690 | } 691 | 692 | r["plugins"] = ""; 693 | r["performanceTiming"] = "-1,-1,0,3,0,0,14,1,8,3,17,17,24,552,552,559,-1,-1,-1,-1"; 694 | 695 | function cvMr(e) { 696 | return typeof e === "undefined"; 697 | }; 698 | 699 | function fYAR() { 700 | var dsJN = ["A", "ARTICLE", "ASIDE", "AUDIO", "BASE", "BUTTON", "CANVAS", "CODE", "IFRAME", "IMG", "INPUT", "LABEL", "LINK", "NAV", "OBJECT", "OL", "PICTURE", "PRE", "SECTION", "SELECT", "SOURCE", "SPAN", "STYLE", "TABLE", "TEXTAREA", "VIDEO"]; 701 | var epVj = ["DIV", "P", "UL", "LI", "SCRIPT"]; 702 | var e = ["textLength", "HTMLLength", "documentMode"].concat(dsJN).concat(["screenLeft", "screenTop", "screenAvailLeft", "screenAvailTop", "innerWidth", "innerHeight", "outerWidth", "outerHeight", "browserLanguage", "browserLanguages", "systemLanguage", "devicePixelRatio", "colorDepth", "userAgent", "cookieEnabled", "netEnabled", "screenWidth", "screenHeight", "screenAvailWidth", "screenAvailHeight", "localStorageEnabled", "sessionStorageEnabled", "indexedDBEnabled", "CPUClass", "platform", "doNotTrack", "timezone", "canvas2DFP", "canvas3DFP", "plugins", "maxTouchPoints", "flashEnabled", "javaEnabled", "hardwareConcurrency", "jsFonts", "timestamp", "performanceTiming", "internalip", "mediaDevices"]).concat(epVj).concat(["deviceorientation", "touchEvent"]); 703 | e["push"]("st"); 704 | return e; 705 | }; 706 | 707 | function Kscp(e) { 708 | var t = this; 709 | var r = ["textLength", "HTMLLength", "documentMode", "A", "ARTICLE", "ASIDE", "AUDIO", "BASE", "BUTTON", "CANVAS", "CODE", "IFRAME", "IMG", "INPUT", "LABEL", "LINK", "NAV", "OBJECT", "OL", "PICTURE", "PRE", "SECTION", "SELECT", "SOURCE", "SPAN", "STYLE", "TABLE", "TEXTAREA", "VIDEO", "screenLeft", "screenTop", "screenAvailLeft", "screenAvailTop", "innerWidth", "innerHeight", "outerWidth", "outerHeight", "browserLanguage", "browserLanguages", "systemLanguage", "devicePixelRatio", "colorDepth", "userAgent", "cookieEnabled", "netEnabled", "screenWidth", "screenHeight", "screenAvailWidth", "screenAvailHeight", "localStorageEnabled", "sessionStorageEnabled", "indexedDBEnabled", "CPUClass", "platform", "doNotTrack", "timezone", "canvas2DFP", "canvas3DFP", "plugins", "maxTouchPoints", "flashEnabled", "javaEnabled", "hardwareConcurrency", "jsFonts", "timestamp", "performanceTiming", "internalip", "mediaDevices", "DIV", "P", "UL", "LI", "SCRIPT", "deviceorientation", "touchEvent", "st"] 710 | if (r["tgoe"]) { 711 | return r["tgoe"](e); 712 | } 713 | var n = []; 714 | for (var i = 0, a = r.length; i < a; i = i + 1) { 715 | n[i] = e(r[i], i, t); 716 | } 717 | return n; 718 | }; 719 | r["timestamp"] = new Date().getTime(); 720 | var e = 1e6 721 | , t = Math.random() * e * 9; 722 | t += e; 723 | r["st"] = Math.round(t).toString(16); 724 | var n = []; 725 | Kscp(function (e) { 726 | var t = r[e]; 727 | n.push(cvMr(t) ? -1 : t); 728 | }); 729 | return { 730 | "n": n["join"]("!!"), 731 | "i": n["join"]("magic data") 732 | }; 733 | } 734 | } -------------------------------------------------------------------------------- /geetest_crack/js/slide_a.js: -------------------------------------------------------------------------------- 1 | function get_a(s) { 2 | var tJHN = function () { 3 | var window = {}; 4 | function uOBx() { 5 | this["i"] = 0; 6 | this["j"] = 0; 7 | this["S"] = []; 8 | } 9 | function viRW(e) { 10 | var t, r, n; 11 | for (t = 0; t < 256; ++t) 12 | this["S"][t] = t; 13 | r = 0; 14 | for (t = 0; t < 256; ++t) { 15 | r = r + this["S"][t] + e[t % e["length"]] & 255; 16 | n = this["S"][t]; 17 | this["S"][t] = this["S"][r]; 18 | this["S"][r] = n; 19 | } 20 | this["i"] = 0; 21 | this["j"] = 0; 22 | } 23 | function wSPy() { 24 | var e; 25 | this["i"] = this["i"] + 1 & 255; 26 | this["j"] = this["j"] + this["S"][this["i"]] & 255; 27 | e = this["S"][this["i"]]; 28 | this["S"][this["i"]] = this["S"][this["j"]]; 29 | this["S"][this["j"]] = e; 30 | return this["S"][e + this["S"][this["i"]] & 255]; 31 | } 32 | uOBx["prototype"]["init"] = viRW; 33 | uOBx["prototype"]["next"] = wSPy; 34 | function xiaW() { 35 | return new uOBx(); 36 | } 37 | var n = 256; 38 | var t; 39 | var i; 40 | var o; 41 | if (i == null) { 42 | i = []; 43 | o = 0; 44 | var e; 45 | if (window["crypto"] && window["crypto"]["getRandomValues"]) { 46 | var r = new Uint32Array(256); 47 | window["crypto"]["getRandomValues"](r); 48 | for (e = 0; e < r["length"]; ++e) 49 | i[o++] = r[e] & 255; 50 | } 51 | var a = 0; 52 | function s(e) { 53 | a = a || 0; 54 | if (a >= 256 || o >= n) { 55 | if (window["removeEventListener"]) { 56 | a = 0; 57 | window["removeEventListener"]("mousemove", s, false); 58 | } else if (window["detachEvent"]) { 59 | a = 0; 60 | window["detachEvent"]("onmousemove", s); 61 | } 62 | return; 63 | } 64 | try { 65 | var t = e["x"] + e["y"]; 66 | i[o++] = t & 255; 67 | a += 1; 68 | } catch (r) { } 69 | } 70 | if (window["addEventListener"]) 71 | window["addEventListener"]("mousemove", s, false); 72 | else if (window["attachEvent"]) 73 | window["attachEvent"]("onmousemove", s); 74 | } 75 | function yATm() { 76 | if (t == null) { 77 | t = xiaW(); 78 | while (o < n) { 79 | var e = Math["floor"](65536 * Math["random"]()); 80 | i[o++] = e & 255; 81 | } 82 | t["init"](i); 83 | for (o = 0; o < i["length"]; ++o) 84 | i[o] = 0; 85 | o = 0; 86 | } 87 | return t["next"](); 88 | } 89 | function AJSA(e) { 90 | var t; 91 | for (t = 0; t < e["length"]; ++t) 92 | e[t] = yATm(); 93 | } 94 | function BLZz() { 95 | } 96 | BLZz["prototype"]["nextBytes"] = AJSA; 97 | var u; 98 | var c = 0xdeadbeefcafe; 99 | var f = (c & 16777215) == 15715070; 100 | function CWmB(e, t, r) { 101 | if (e != null) 102 | if ("number" == typeof e) 103 | this["fromNumber"](e, t, r); 104 | else if (t == null && "string" != typeof e) 105 | this["fromString"](e, 256); 106 | else 107 | this["fromString"](e, t); 108 | } 109 | function DjZ_() { 110 | return new CWmB(null); 111 | } 112 | function ECTS(e, t, r, n, i, o) { 113 | while (--o >= 0) { 114 | var a = t * this[e++] + r[n] + i; 115 | i = Math["floor"](a / 67108864); 116 | r[n++] = a & 67108863; 117 | } 118 | return i; 119 | } 120 | function FTii(e, t, r, n, i, o) { 121 | var a = t & 32767 122 | , s = t >> 15; 123 | while (--o >= 0) { 124 | var u = this[e] & 32767; 125 | var c = this[e++] >> 15; 126 | var f = s * u + c * a; 127 | u = a * u + ((f & 32767) << 15) + r[n] + (i & 1073741823); 128 | i = (u >>> 30) + (f >>> 15) + s * c + (i >>> 30); 129 | r[n++] = u & 1073741823; 130 | } 131 | return i; 132 | } 133 | function GSEQ(e, t, r, n, i, o) { 134 | var a = t & 16383 135 | , s = t >> 14; 136 | while (--o >= 0) { 137 | var u = this[e] & 16383; 138 | var c = this[e++] >> 14; 139 | var f = s * u + c * a; 140 | u = a * u + ((f & 16383) << 14) + r[n] + i; 141 | i = (u >> 28) + (f >> 14) + s * c; 142 | r[n++] = u & 268435455; 143 | } 144 | return i; 145 | } 146 | // if (f && navigator["appName"] == "Microsoft Internet Explorer") { 147 | // CWmB["prototype"]["am"] = FTii; 148 | // u = 30; 149 | // } else if (f && navigator["appName"] != "Netscape") { 150 | // CWmB["prototype"]["am"] = ECTS; 151 | // u = 26; 152 | // } else { 153 | // CWmB["prototype"]["am"] = GSEQ; 154 | // u = 28; 155 | // } 156 | CWmB["prototype"]["am"] = GSEQ; 157 | u = 28; 158 | 159 | CWmB["prototype"]["DB"] = u; 160 | CWmB["prototype"]["DM"] = (1 << u) - 1; 161 | CWmB["prototype"]["DV"] = 1 << u; 162 | var _ = 52; 163 | CWmB["prototype"]["FV"] = Math["pow"](2, _); 164 | CWmB["prototype"]["F1"] = _ - u; 165 | CWmB["prototype"]["F2"] = 2 * u - _; 166 | var l = "0123456789abcdefghijklmnopqrstuvwxyz"; 167 | var h = []; 168 | var d, v; 169 | d = "0"["charCodeAt"](0); 170 | for (v = 0; v <= 9; ++v) 171 | h[d++] = v; 172 | d = "a"["charCodeAt"](0); 173 | for (v = 10; v < 36; ++v) 174 | h[d++] = v; 175 | d = "A"["charCodeAt"](0); 176 | for (v = 10; v < 36; ++v) 177 | h[d++] = v; 178 | function HAAp(e) { 179 | return l["charAt"](e); 180 | } 181 | function Ikiw(e, t) { 182 | var r = h[e["charCodeAt"](t)]; 183 | return r == null ? -1 : r; 184 | } 185 | function JbhG(e) { 186 | for (var t = this["t"] - 1; t >= 0; --t) 187 | e[t] = this[t]; 188 | e["t"] = this["t"]; 189 | e["s"] = this["s"]; 190 | } 191 | function KeAi(e) { 192 | this["t"] = 1; 193 | this["s"] = e < 0 ? -1 : 0 194 | if (e > 0) 195 | this[0] = e; 196 | else if (e < -1) 197 | this[0] = e + this["DV"]; 198 | else 199 | this["t"] = 0; 200 | } 201 | function LkdM(e) { 202 | var t = DjZ_(); 203 | t["fromInt"](e); 204 | return t; 205 | } 206 | function MRWm(e, t) { 207 | var r; 208 | if (t == 16) 209 | r = 4; 210 | else if (t == 8) 211 | r = 3; 212 | else if (t == 256) 213 | r = 8; 214 | else if (t == 2) 215 | r = 1; 216 | else if (t == 32) 217 | r = 5; 218 | else if (t == 4) 219 | r = 2; 220 | else { 221 | this["fromRadix"](e, t); 222 | return; 223 | } 224 | this["t"] = 0; 225 | this["s"] = 0; 226 | var n = e["length"] 227 | , i = false 228 | , o = 0; 229 | while (--n >= 0) { 230 | var a = r == 8 ? e[n] & 255 : Ikiw(e, n); 231 | if (a < 0) { 232 | if (e["charAt"](n) == "-") 233 | i = true; 234 | continue; 235 | } 236 | i = false; 237 | if (o == 0) 238 | this[this["t"]++] = a; 239 | else if (o + r > this["DB"]) { 240 | this[this["t"] - 1] |= (a & (1 << this["DB"] - o) - 1) << o; 241 | this[this["t"]++] = a >> this["DB"] - o; 242 | } else 243 | this[this["t"] - 1] |= a << o; 244 | o += r; 245 | if (o >= this["DB"]) 246 | o -= this["DB"]; 247 | } 248 | if (r == 8 && (e[0] & 128) != 0) { 249 | this["s"] = -1; 250 | if (o > 0) 251 | this[this["t"] - 1] |= (1 << this["DB"] - o) - 1 << o; 252 | } 253 | this["clamp"](); 254 | if (i) 255 | CWmB["ZERO"]["subTo"](this, this); 256 | } 257 | function NEus() { 258 | var e = this["s"] & this["DM"]; 259 | while (this["t"] > 0 && this[this["t"] - 1] == e) 260 | --this["t"]; 261 | } 262 | function OpYX(e) { 263 | if (this["s"] < 0) 264 | return "-" + this["negate"]()["toString"](e); 265 | var t; 266 | if (e == 16) 267 | t = 4; 268 | else if (e == 8) 269 | t = 3; 270 | else if (e == 2) 271 | t = 1; 272 | else if (e == 32) 273 | t = 5; 274 | else if (e == 4) 275 | t = 2; 276 | else 277 | return this["toRadix"](e); 278 | var r = (1 << t) - 1, n, i = false, o = "", a = this["t"]; 279 | var s = this["DB"] - a * this["DB"] % t; 280 | if (a-- > 0) { 281 | if (s < this["DB"] && (n = this[a] >> s) > 0) { 282 | i = true; 283 | o = HAAp(n); 284 | } 285 | while (a >= 0) { 286 | if (s < t) { 287 | n = (this[a] & (1 << s) - 1) << t - s; 288 | n |= this[--a] >> (s += this["DB"] - t); 289 | } else { 290 | n = this[a] >> (s -= t) & r; 291 | if (s <= 0) { 292 | s += this["DB"]; 293 | --a; 294 | } 295 | } 296 | if (n > 0) 297 | i = true; 298 | if (i) 299 | o += HAAp(n); 300 | } 301 | } 302 | return i ? o : "0"; 303 | } 304 | function PGsZ() { 305 | var e = DjZ_(); 306 | CWmB["ZERO"]["subTo"](this, e); 307 | return e; 308 | } 309 | function Qs_S() { 310 | return this["s"] < 0 ? this["negate"]() : this; 311 | } 312 | function RVZL(e) { 313 | var t = this["s"] - e["s"]; 314 | if (t != 0) 315 | return t; 316 | var r = this["t"]; 317 | t = r - e["t"]; 318 | if (t != 0) 319 | return this["s"] < 0 ? -t : t; 320 | while (--r >= 0) 321 | if ((t = this[r] - e[r]) != 0) 322 | return t; 323 | return 0; 324 | } 325 | function SZCC(e) { 326 | var t = 1, r; 327 | if ((r = e >>> 16) != 0) { 328 | e = r; 329 | t += 16; 330 | } 331 | if ((r = e >> 8) != 0) { 332 | e = r; 333 | t += 8; 334 | } 335 | if ((r = e >> 4) != 0) { 336 | e = r; 337 | t += 4; 338 | } 339 | if ((r = e >> 2) != 0) { 340 | e = r; 341 | t += 2; 342 | } 343 | if ((r = e >> 1) != 0) { 344 | e = r; 345 | t += 1; 346 | } 347 | return t; 348 | } 349 | function TyXw() { 350 | if (this["t"] <= 0) 351 | return 0; 352 | return this["DB"] * (this["t"] - 1) + SZCC(this[this["t"] - 1] ^ this["s"] & this["DM"]); 353 | } 354 | function UqEK(e, t) { 355 | var r; 356 | for (r = this["t"] - 1; r >= 0; --r) 357 | t[r + e] = this[r]; 358 | for (r = e - 1; r >= 0; --r) 359 | t[r] = 0; 360 | t["t"] = this["t"] + e; 361 | t["s"] = this["s"]; 362 | } 363 | function VhGg(e, t) { 364 | for (var r = e; r < this["t"]; ++r) 365 | t[r - e] = this[r]; 366 | t["t"] = Math["max"](this["t"] - e, 0); 367 | t["s"] = this["s"]; 368 | } 369 | function WhJS(e, t) { 370 | var r = e % this["DB"]; 371 | var n = this["DB"] - r; 372 | var i = (1 << n) - 1; 373 | var o = Math["floor"](e / this["DB"]), a = this["s"] << r & this["DM"], s; 374 | for (s = this["t"] - 1; s >= 0; --s) { 375 | t[s + o + 1] = this[s] >> n | a; 376 | a = (this[s] & i) << r; 377 | } 378 | for (s = o - 1; s >= 0; --s) 379 | t[s] = 0; 380 | t[o] = a; 381 | t["t"] = this["t"] + o + 1; 382 | t["s"] = this["s"]; 383 | t["clamp"](); 384 | } 385 | function Xuwi(e, t) { 386 | t["s"] = this["s"]; 387 | var r = Math["floor"](e / this["DB"]); 388 | if (r >= this["t"]) { 389 | t["t"] = 0; 390 | return; 391 | } 392 | var n = e % this["DB"]; 393 | var i = this["DB"] - n; 394 | var o = (1 << n) - 1; 395 | 396 | t[0] = this[r] >> n; 397 | for (var a = r + 1; a < this["t"]; ++a) { 398 | t[a - r - 1] |= (this[a] & o) << i; 399 | t[a - r] = this[a] >> n; 400 | } 401 | if (n > 0) 402 | t[this["t"] - r - 1] |= (this["s"] & o) << i; 403 | t["t"] = this["t"] - r; 404 | t["clamp"](); 405 | } 406 | function YbTx(e, t) { 407 | var r = 0 408 | , n = 0 409 | , i = Math["min"](e["t"], this["t"]); 410 | while (r < i) { 411 | n += this[r] - e[r]; 412 | t[r++] = n & this["DM"]; 413 | n >>= this["DB"]; 414 | } 415 | 416 | if (e["t"] < this["t"]) { 417 | n -= e["s"]; 418 | while (r < this["t"]) { 419 | n += this[r]; 420 | t[r++] = n & this["DM"]; 421 | n >>= this["DB"]; 422 | } 423 | n += this["s"]; 424 | } else { 425 | n += this["s"]; 426 | while (r < e["t"]) { 427 | n -= e[r]; 428 | t[r++] = n & this["DM"]; 429 | n >>= this["DB"]; 430 | } 431 | n -= e["s"]; 432 | } 433 | t["s"] = n < 0 ? -1 : 0; 434 | 435 | if (n < -1) 436 | t[r++] = this["DV"] + n; 437 | else if (n > 0) 438 | t[r++] = n; 439 | t["t"] = r; 440 | 441 | t["clamp"](); 442 | } 443 | function ZRnB(e, t) { 444 | var r = this["abs"]() 445 | , n = e["abs"](); 446 | var i = r["t"]; 447 | 448 | t["t"] = i + n["t"]; 449 | while (--i >= 0) 450 | t[i] = 0; 451 | 452 | for (i = 0; i < n["t"]; ++i) 453 | t[i + r["t"]] = r["am"](0, n[i], t, i, 0, r["t"]); 454 | t["s"] = 0; 455 | 456 | t["clamp"](); 457 | if (this["s"] != e["s"]) 458 | CWmB["ZERO"]["subTo"](t, t); 459 | } 460 | function aLdE(e) { 461 | var t = this["abs"](); 462 | var r = e["t"] = 2 * t["t"]; 463 | while (--r >= 0) 464 | e[r] = 0; 465 | 466 | for (r = 0; r < t["t"] - 1; ++r) { 467 | var n = t["am"](r, t[r], e, 2 * r, 0, 1); 468 | if ((e[r + t["t"]] += t["am"](r + 1, 2 * t[r], e, 2 * r + 1, n, t["t"] - r - 1)) >= t["DV"]) { 469 | e[r + t["t"]] -= t["DV"]; 470 | e[r + t["t"] + 1] = 1; 471 | } 472 | } 473 | if (e["t"] > 0) 474 | e[e["t"] - 1] += t["am"](r, t[r], e, 2 * r, 0, 1); 475 | e["s"] = 0; 476 | e["clamp"](); 477 | } 478 | function bxLY(e, t, r) { 479 | var n = e["abs"](); 480 | if (n["t"] <= 0) 481 | return; 482 | var i = this["abs"](); 483 | if (i["t"] < n["t"]) { 484 | if (t != null) 485 | t["fromInt"](0); 486 | if (r != null) 487 | this["copyTo"](r); 488 | return; 489 | } 490 | if (r == null) 491 | r = DjZ_(); 492 | var o = DjZ_() 493 | , a = this["s"] 494 | , s = e["s"]; 495 | var u = this["DB"] - SZCC(n[n["t"] - 1]); 496 | if (u > 0) { 497 | n["lShiftTo"](u, o); 498 | i["lShiftTo"](u, r); 499 | } else { 500 | n["copyTo"](o); 501 | i["copyTo"](r); 502 | } 503 | var c = o["t"]; 504 | var f = o[c - 1]; 505 | if (f == 0) 506 | return; 507 | var _ = f * (1 << this["F1"]) + (c > 1 ? o[c - 2] >> this["F2"] : 0); 508 | var l = this["FV"] / _ 509 | , h = (1 << this["F1"]) / _ 510 | , d = 1 << this["F2"]; 511 | var v = r["t"] 512 | , p = v - c 513 | , g = t == null ? DjZ_() : t; 514 | o["dlShiftTo"](p, g); 515 | if (r["compareTo"](g) >= 0) { 516 | r[r["t"]++] = 1; 517 | r["subTo"](g, r); 518 | } 519 | CWmB["ONE"]["dlShiftTo"](c, g); 520 | g["subTo"](o, o); 521 | while (o["t"] < c) 522 | o[o["t"]++] = 0; 523 | while (--p >= 0) { 524 | var m = r[--v] == f ? this["DM"] : Math["floor"](r[v] * l + (r[v - 1] + d) * h); 525 | if ((r[v] += o["am"](0, m, r, p, 0, c)) < m) { 526 | o["dlShiftTo"](p, g); 527 | r["subTo"](g, r); 528 | while (r[v] < --m) 529 | r["subTo"](g, r); 530 | } 531 | } 532 | if (t != null) { 533 | r["drShiftTo"](c, t); 534 | if (a != s) 535 | CWmB["ZERO"]["subTo"](t, t); 536 | } 537 | r["t"] = c; 538 | r["clamp"](); 539 | if (u > 0) 540 | r["rShiftTo"](u, r); 541 | if (a < 0) 542 | CWmB["ZERO"]["subTo"](r, r); 543 | } 544 | function cAlW(e) { 545 | var t = DjZ_(); 546 | this["abs"]()["divRemTo"](e, null, t); 547 | if (this["s"] < 0 && t["compareTo"](CWmB["ZERO"]) > 0) 548 | e["subTo"](t, t); 549 | return t; 550 | } 551 | function dPdJ(e) { 552 | this["m"] = e; 553 | } 554 | function ehvt(e) { 555 | if (e["s"] < 0 || e["compareTo"](this["m"]) >= 0) 556 | return e["mod"](this["m"]); 557 | else 558 | return e; 559 | } 560 | function fkPi(e) { 561 | return e; 562 | } 563 | function gAFH(e) { 564 | e["divRemTo"](this["m"], null, e); 565 | } 566 | function hJPG(e, t, r) { 567 | e["multiplyTo"](t, r); 568 | this["reduce"](r); 569 | } 570 | function iGCS(e, t) { 571 | e["squareTo"](t); 572 | this["reduce"](t); 573 | } 574 | dPdJ["prototype"]["convert"] = ehvt; 575 | dPdJ["prototype"]["revert"] = fkPi; 576 | dPdJ["prototype"]["reduce"] = gAFH; 577 | dPdJ["prototype"]["mulTo"] = hJPG; 578 | dPdJ["prototype"]["sqrTo"] = iGCS; 579 | function jqcr() { 580 | if (this["t"] < 1) 581 | return 0; 582 | var e = this[0]; 583 | if ((e & 1) == 0) 584 | return 0; 585 | var t = e & 3; 586 | t = t * (2 - (e & 15) * t) & 15; 587 | t = t * (2 - (e & 255) * t) & 255; 588 | t = t * (2 - ((e & 65535) * t & 65535)) & 65535; 589 | t = t * (2 - e * t % this["DV"]) % this["DV"]; 590 | return t > 0 ? this["DV"] - t : -t; 591 | } 592 | function kvgG(e) { 593 | this["m"] = e; 594 | this["mp"] = e["invDigit"](); 595 | this["mpl"] = this["mp"] & 32767; 596 | this["mph"] = this["mp"] >> 15; 597 | this["um"] = (1 << e["DB"] - 15) - 1; 598 | this["mt2"] = 2 * e["t"]; 599 | } 600 | function lwWq(e) { 601 | var t = DjZ_(); 602 | e["abs"]()["dlShiftTo"](this["m"]["t"], t); 603 | t["divRemTo"](this["m"], null, t); 604 | if (e["s"] < 0 && t["compareTo"](CWmB["ZERO"]) > 0) 605 | this["m"]["subTo"](t, t); 606 | return t; 607 | } 608 | function mkmW(e) { 609 | var t = DjZ_(); 610 | e["copyTo"](t); 611 | this["reduce"](t); 612 | return t; 613 | } 614 | function nbqa(e) { 615 | while (e["t"] <= this["mt2"]) 616 | e[e["t"]++] = 0; 617 | for (var t = 0; t < this["m"]["t"]; ++t) { 618 | var r = e[t] & 32767; 619 | var n = r * this["mpl"] + ((r * this["mph"] + (e[t] >> 15) * this["mpl"] & this["um"]) << 15) & e["DM"]; 620 | r = t + this["m"]["t"]; 621 | e[r] += this["m"]["am"](0, n, e, t, 0, this["m"]["t"]); 622 | while (e[r] >= e["DV"]) { 623 | e[r] -= e["DV"]; 624 | e[++r]++; 625 | } 626 | } 627 | e["clamp"](); 628 | e["drShiftTo"](this["m"]["t"], e); 629 | if (e["compareTo"](this["m"]) >= 0) 630 | e["subTo"](this["m"], e); 631 | } 632 | function olFv(e, t) { 633 | e["squareTo"](t); 634 | this["reduce"](t); 635 | } 636 | function phGu(e, t, r) { 637 | e["multiplyTo"](t, r); 638 | this["reduce"](r); 639 | } 640 | kvgG["prototype"]["convert"] = lwWq; 641 | kvgG["prototype"]["revert"] = mkmW; 642 | kvgG["prototype"]["reduce"] = nbqa; 643 | kvgG["prototype"]["mulTo"] = phGu; 644 | kvgG["prototype"]["sqrTo"] = olFv; 645 | function qhaT() { 646 | return (this["t"] > 0 ? this[0] & 1 : this["s"]) == 0; 647 | } 648 | function rsdR(e, t) { 649 | if (e > 4294967295 || e < 1) 650 | return CWmB["ONE"]; 651 | var r = DjZ_() 652 | , n = DjZ_() 653 | , i = t["convert"](this) 654 | , o = SZCC(e) - 1; 655 | i["copyTo"](r); 656 | while (--o >= 0) { 657 | t["sqrTo"](r, n); 658 | if ((e & 1 << o) > 0) 659 | t["mulTo"](n, i, r); 660 | else { 661 | var a = r; 662 | r = n; 663 | n = a; 664 | } 665 | } 666 | return t["revert"](r); 667 | } 668 | function sUoE(e, t) { 669 | var r; 670 | if (e < 256 || t["isEven"]()) 671 | r = new dPdJ(t); 672 | else 673 | r = new kvgG(t); 674 | return this["exp"](e, r); 675 | } 676 | CWmB["prototype"]["copyTo"] = JbhG; 677 | CWmB["prototype"]["fromInt"] = KeAi; 678 | CWmB["prototype"]["fromString"] = MRWm; 679 | CWmB["prototype"]["clamp"] = NEus; 680 | CWmB["prototype"]["dlShiftTo"] = UqEK; 681 | CWmB["prototype"]["drShiftTo"] = VhGg; 682 | CWmB["prototype"]["lShiftTo"] = WhJS; 683 | CWmB["prototype"]["rShiftTo"] = Xuwi; 684 | CWmB["prototype"]["subTo"] = YbTx; 685 | CWmB["prototype"]["multiplyTo"] = ZRnB; 686 | CWmB["prototype"]["squareTo"] = aLdE; 687 | CWmB["prototype"]["divRemTo"] = bxLY; 688 | CWmB["prototype"]["invDigit"] = jqcr; 689 | CWmB["prototype"]["isEven"] = qhaT; 690 | CWmB["prototype"]["exp"] = rsdR; 691 | CWmB["prototype"]["toString"] = OpYX; 692 | CWmB["prototype"]["negate"] = PGsZ; 693 | CWmB["prototype"]["abs"] = Qs_S; 694 | CWmB["prototype"]["compareTo"] = RVZL; 695 | CWmB["prototype"]["bitLength"] = TyXw; 696 | CWmB["prototype"]["mod"] = cAlW; 697 | CWmB["prototype"]["modPowInt"] = sUoE; 698 | CWmB["ZERO"] = LkdM(0); 699 | CWmB["ONE"] = LkdM(1); 700 | function tWzt(e, t) { 701 | return new CWmB(e, t); 702 | } 703 | function uoLw(e, t) { 704 | if (t < e["length"] + 11) { 705 | console["error"]("Message too long for RSA"); 706 | return null; 707 | } 708 | var r = []; 709 | var n = e["length"] - 1; 710 | while (n >= 0 && t > 0) { 711 | var i = e["charCodeAt"](n--); 712 | if (i < 128) { 713 | r[--t] = i; 714 | } else if (i > 127 && i < 2048) { 715 | r[--t] = i & 63 | 128; 716 | r[--t] = i >> 6 | 192; 717 | } else { 718 | r[--t] = i & 63 | 128; 719 | r[--t] = i >> 6 & 63 | 128; 720 | r[--t] = i >> 12 | 224; 721 | } 722 | } 723 | r[--t] = 0; 724 | var o = new BLZz(); 725 | var a = []; 726 | while (t > 2) { 727 | a[0] = 0; 728 | while (a[0] == 0) 729 | o["nextBytes"](a); 730 | r[--t] = a[0]; 731 | } 732 | r[--t] = 2; 733 | r[--t] = 0; 734 | return new CWmB(r); 735 | } 736 | function tJHN() { 737 | this["n"] = null; 738 | this["e"] = 0; 739 | this["d"] = null; 740 | this["p"] = null; 741 | this["q"] = null; 742 | this["dmp1"] = null; 743 | this["dmq1"] = null; 744 | this["coeff"] = null; 745 | var e = "00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81"; 746 | var t = "10001"; 747 | this["setPublic"](e, t); 748 | } 749 | function volo(e, t) { 750 | if (e != null && t != null && e["length"] > 0 && t["length"] > 0) { 751 | this["n"] = tWzt(e, 16); 752 | this["e"] = parseInt(t, 16); 753 | } else 754 | console["error"]("Invalid RSA public key"); 755 | } 756 | function wCsZ(e) { 757 | return e["modPowInt"](this["e"], this["n"]); 758 | } 759 | function xRyy(e) { 760 | var t = uoLw(e, this["n"]["bitLength"]() + 7 >> 3); 761 | if (t == null) 762 | return null; 763 | var r = this["doPublic"](t); 764 | if (r == null) 765 | return null; 766 | var n = r["toString"](16); 767 | if ((n["length"] & 1) == 0) 768 | return n; 769 | else 770 | return "0" + n; 771 | } 772 | tJHN["prototype"]["doPublic"] = wCsZ; 773 | tJHN["prototype"]["setPublic"] = volo; 774 | tJHN["prototype"]["encrypt"] = xRyy; 775 | return tJHN; 776 | }(); 777 | 778 | return new tJHN()["encrypt"](s) 779 | } -------------------------------------------------------------------------------- /geetest_crack/js/u_params.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/geetest_crack/js/u_params.js -------------------------------------------------------------------------------- /geetest_crack/param.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import json 3 | import random 4 | import re 5 | from io import BytesIO 6 | 7 | import execjs 8 | import requests 9 | from PIL import Image 10 | from requests import Session 11 | 12 | from geetest_crack.config import common_login_headers, token_url, app_id, device_type, login_type, pwd_encrypt_js_path, \ 13 | full_page_t1_js_path, full_page_w1_js_path, full_page_w2_js_path, slide_track, u_js_path, slide_u_js_path, \ 14 | slide_a_js_path 15 | from geetest_crack.utils.fetch import fetch 16 | 17 | 18 | def get_jt_safe_key() -> str: 19 | """ 20 | 获取页面加密参数jtSafeKey 21 | 详见https://paicc-core.pingan.com.cn/paicc-core-web/js/jtsafe/pawebjs.js 22 | """ 23 | 24 | def get_guid(): 25 | def t(): 26 | return str(hex(int((1 + random.random()) * 65536)))[3:] 27 | 28 | return t() + t() + "-" + t() + "-" + t() + "-" + t() + "-" + t() + t() + t() 29 | 30 | r = { 31 | 'sdkversion': '1.3.0', 32 | 'user_agent': common_login_headers['User-Agent'], 33 | 'language': 'zh-CN', 34 | 'languages': 'zh-CN,zh', 35 | 'color_depth': 24, 36 | 'resolution': '1920,1080', 37 | 'available_resolution': '1920,1040', 38 | 'timezone_offset': -480, 39 | 'session_storage': 1, 40 | 'local_storage': 1, 41 | 'indexed_db': 1, 42 | 'open_database': 1, 43 | 'cpu_class': 'unknown', 44 | 'navigator_platform': 'Win32', 45 | 'do_not_track': 'unknown', 46 | 'canvas_winding': 'yes', 47 | 'canvas_fp': 'e86fea3a3dae3d2f8664e2dc98d7d0d38', 48 | 'webgl': '057920cc9f896a6ee375d8abe80e01ac', 49 | 'touch_support': '0,false,false', 50 | 'compatMode': 'CSS1Compat', 51 | 'devicePixelRatio': 1, 52 | 'navigator_vendorSub': '', 53 | 'navigator_productSub': '20030107', 54 | 'navigator_vendor': 'Google Inc.', 55 | 'navigator_maxTouchPoints': 0, 56 | 'navigator_hardwareConcurrency': 4, 57 | 'navigator_cookieEnabled': True, 58 | 'navigator_appCodeName': 'Mozilla', 59 | 'navigator_appName': 'Netscape', 60 | 'navigator_appVersion': common_login_headers['User-Agent'], 61 | 'navigator_product': 'Gecko', 62 | 'navigator_onLine': True, 63 | 'navigator_deviceMemory': 8, 64 | 'referer': '', 65 | 'guid': get_guid(), 66 | 'did': '10b16db8bc04b9b0ffc9ad9a78292a2d', 67 | 'os': 'W' 68 | } 69 | 70 | r = json.dumps(r) 71 | r = re.sub(": ", ":", r) 72 | r = re.sub(', "', ',"', r) 73 | 74 | return base64.b64encode(r.encode()).decode() 75 | 76 | 77 | def get_device(): 78 | return str(random.random())[2:] 79 | 80 | 81 | def get_s(): 82 | """生成随机16位字符串""" 83 | 84 | def _(): 85 | return str(hex((int((1 + random.random()) * 65536) | 0)))[3:] 86 | 87 | return _() + _() + _() + _() 88 | 89 | 90 | def get_token(session, phone, device_id, device_ip): 91 | """获取token参数""" 92 | form_data = { 93 | 'appId': app_id, 94 | 'deviceType': device_type, 95 | 'loginName': str(phone), 96 | 'loginType': login_type, 97 | 'deviceId': device_id, 98 | 'deviceIp': device_ip 99 | } 100 | resp = fetch(session=session, url=token_url, method='post', data=form_data) 101 | return '' if resp is None else resp.json()['data']['token'] 102 | 103 | 104 | def get_js_object(js_file_path): 105 | """获取js可执行对象""" 106 | with open(js_file_path, encoding='GBK') as f: 107 | js_file = f.read() 108 | return execjs.compile(js_file) 109 | 110 | 111 | pwd_encrypt_js = get_js_object(pwd_encrypt_js_path) 112 | full_page_t1_js = get_js_object(full_page_t1_js_path) 113 | full_page_w1_js = get_js_object(full_page_w1_js_path) 114 | full_page_w2_js = get_js_object(full_page_w2_js_path) 115 | u_js = get_js_object(u_js_path) 116 | slide_u_js = get_js_object(slide_u_js_path) 117 | slide_a_js = get_js_object(slide_a_js_path) 118 | 119 | 120 | def get_encrypt_pwd(pwd): 121 | """获取加密后的密码""" 122 | return pwd_encrypt_js.call('pwdEncrypt', pwd) 123 | 124 | 125 | def get_full_page_t1(s): 126 | """获取fullpage的t1参数""" 127 | return full_page_t1_js.call('get_t', s) 128 | 129 | 130 | def get_full_page_w1(gt, challenge, s): 131 | """获取fullpage的w1参数""" 132 | t = get_full_page_t1(s) 133 | return full_page_w1_js.call('get_w', gt, challenge, s, t) 134 | 135 | 136 | def get_full_page_w2(gt, challenge, s): 137 | """获取fullpage的w2参数""" 138 | return full_page_w2_js.call('get_w', gt, challenge, s) 139 | 140 | 141 | def get_slide_w(gt, challenge, s, offset, track): 142 | """获取slide的w参数""" 143 | u = { 144 | 'lang': 'zh-cn', 145 | 'userresponse': u_js.call('getUserResponse', offset - 1, challenge), 146 | 'passtime': track[-1][-1], 147 | 'imgload': random.randint(110, 180), 148 | 'a': u_js.call("mouse_encrypt", track), 149 | 'ep': {"v": "pingan.1.2", "f": u_js.call("lmWn", gt + challenge)}, 150 | 'rp': u_js.call("lmWn", gt + challenge[0:32] + str(track[-1][-1])) 151 | } 152 | u = slide_u_js.call('_encrypt', u, s) 153 | a = slide_a_js.call('get_a', s) 154 | return u + a 155 | 156 | 157 | def get_captcha_image(session, image_url) -> Image: 158 | """获取验证码图片Image对象""" 159 | resp = fetch(session, url=image_url, headers=common_login_headers) 160 | return None if resp is None else Image.open(BytesIO(resp.content)) 161 | 162 | 163 | def session() -> Session: 164 | """获取session对象""" 165 | return requests.session() 166 | 167 | 168 | def get_track(offset=0): 169 | """根据偏移量获取轨迹""" 170 | for track in slide_track: 171 | if offset == track[-1][0]: 172 | return track 173 | -------------------------------------------------------------------------------- /geetest_crack/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/geetest_crack/utils/__init__.py -------------------------------------------------------------------------------- /geetest_crack/utils/captcha.py: -------------------------------------------------------------------------------- 1 | from PIL import Image 2 | 3 | 4 | def crop_image(img: Image, x, y, width, height): 5 | """裁剪图片""" 6 | return img.crop((x, int(y), int(x + width), int(y + height))) 7 | 8 | 9 | def paste_image(new_img: Image, img: Image, x, y, width, height): 10 | """粘贴图片到new_img中""" 11 | new_img.paste(img, (x, int(y), int(x + width), int(y + height))) 12 | 13 | 14 | def restore_image(img: Image): 15 | """还原打乱的验证码图片""" 16 | img_list = [39, 38, 48, 49, 41, 40, 46, 47, 35, 34, 50, 51, 33, 32, 28, 29, 27, 26, 36, 37, 31, 30, 44, 45, 43, 17 | 42, 12, 13, 23, 22, 14, 15, 21, 20, 8, 9, 25, 24, 6, 7, 3, 2, 0, 1, 11, 10, 4, 5, 19, 18, 16, 17] 18 | r = 312 # width 19 | n = 160 # height 20 | s = n / 2 21 | u = 10 22 | new_img = Image.new("RGBA", (r, n)) 23 | for c in range(52): 24 | f = img_list[c] % 26 * 12 + 1 25 | _ = s if img_list[c] > 25 else 0 26 | crop_img = crop_image(img, f, _, u, s) 27 | paste_image(new_img, crop_img, c % 26 * 10, s if c > 25 else 0, u, s) 28 | return new_img 29 | 30 | 31 | def compare_pixel(pix1, pix2, x, y): 32 | """像素对比, (R, G, B, A) ,判断像素差异是否过大""" 33 | diff_max = 50 34 | diff_r = abs(pix1[x, y][0] - pix2[x, y][0]) 35 | diff_g = abs(pix1[x, y][1] - pix2[x, y][1]) 36 | diff_b = abs(pix1[x, y][2] - pix2[x, y][2]) 37 | return diff_r > diff_max and diff_g > diff_max and diff_b > diff_max 38 | 39 | 40 | def calculate_offset(img1: Image, img2: Image): 41 | """计算偏移量""" 42 | img1 = restore_image(img1) 43 | img2 = restore_image(img2) 44 | pix1 = img1.load() 45 | pix2 = img2.load() 46 | idx_x = [] 47 | for x in range(img1.size[0]): 48 | for y in range(img1.size[1]): 49 | if compare_pixel(pix1, pix2, x, y): 50 | idx_x.append(x) 51 | return sorted(idx_x)[0] - 3 52 | -------------------------------------------------------------------------------- /geetest_crack/utils/fetch.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from requests import Response 3 | from retrying import retry 4 | 5 | from geetest_crack.config import retry_max_number, retry_min_random_wait, retry_max_random_wait, fetch_timeout 6 | from geetest_crack.utils.logger import logger 7 | 8 | 9 | def need_retry(exception): 10 | result = isinstance(exception, (requests.ConnectionError, requests.ReadTimeout)) 11 | if result: 12 | print('Exception', type(exception), 'occurred, retrying...') 13 | return result 14 | 15 | 16 | def fetch(session, url, method='get', **kwargs): 17 | @retry(stop_max_attempt_number=retry_max_number, wait_random_min=retry_min_random_wait, 18 | wait_random_max=retry_max_random_wait, retry_on_exception=need_retry) 19 | def _fetch(session, url, **kwargs) -> Response: 20 | # kwargs.update({'verify': False}) 21 | kwargs.update({'timeout': fetch_timeout}) 22 | response = session.post(url, **kwargs) if method == 'post' else session.get(url, **kwargs) 23 | if response.status_code != 200: 24 | raise requests.ConnectionError('Expected status code 200, but got {}'.format(response.status_code)) 25 | return response 26 | 27 | try: 28 | resp = _fetch(session, url, **kwargs) 29 | return resp 30 | except Exception as e: 31 | logger.error('Something got wrong, error msg:{}'.format(e)) 32 | return None 33 | -------------------------------------------------------------------------------- /geetest_crack/utils/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | import sys 3 | 4 | DEFAULT_LOG_LEVEL = logging.INFO # 默认等级 5 | DEFAULT_LOG_FMT = '%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s' # 默认日志格式 6 | DEFAULT_LOG_DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S' # 默认时间格式 7 | DEFAULT_LOG_FILENAME = 'request_1_2.bin' # 默认日志文件名称 8 | 9 | 10 | class Logger: 11 | def __init__(self): 12 | self._logger = logging.getLogger() 13 | if not self._logger.handlers: 14 | self.formatter = logging.Formatter(fmt=DEFAULT_LOG_FMT, datefmt=DEFAULT_LOG_DATETIME_FORMAT) 15 | # 设置文件日志模式 16 | # self._logger.addHandler(self._get_file_handler(DEFAULT_LOG_FILENAME)) 17 | # 设置终端日志模式 18 | self._logger.addHandler(self._get_console_handler()) 19 | # 设置日志等级 20 | self._logger.setLevel(DEFAULT_LOG_LEVEL) 21 | 22 | def _get_file_handler(self, filename): 23 | """返回一个文件日志handler""" 24 | file_handler = logging.FileHandler(filename=filename, encoding='utf-8') 25 | file_handler.setFormatter(self.formatter) 26 | return file_handler 27 | 28 | def _get_console_handler(self): 29 | """返回一个输出到终端日志handler""" 30 | console_handler = logging.StreamHandler(sys.stdout) 31 | console_handler.setFormatter(self.formatter) 32 | return console_handler 33 | 34 | @property 35 | def logger(self): 36 | return self._logger 37 | 38 | 39 | logger = Logger().logger 40 | -------------------------------------------------------------------------------- /geetest_crack/utils/response.py: -------------------------------------------------------------------------------- 1 | from enum import Enum, unique 2 | 3 | 4 | @unique 5 | class Resp(Enum): 6 | SUCCESS = 0 7 | WRONG_NAME_OR_PWD = 1 8 | TIMEOUT = 2 9 | SLIDE_ERR = 3 10 | TRACK_ERR = 4 11 | ILLEGAL_ERR = 5 12 | UNKNOWN_ERR = 6 13 | -------------------------------------------------------------------------------- /geetest_crack/utils/times.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | 4 | def now_int(): 5 | return round(time.time() * 1000) 6 | 7 | 8 | def now_str(): 9 | return str(now_int()) 10 | -------------------------------------------------------------------------------- /images/ajax-php-for-validate-param.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/ajax-php-for-validate-param.png -------------------------------------------------------------------------------- /images/ajax-php-for-validate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/ajax-php-for-validate.png -------------------------------------------------------------------------------- /images/bind-code-restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/bind-code-restore.png -------------------------------------------------------------------------------- /images/captcha-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/captcha-1.png -------------------------------------------------------------------------------- /images/captcha-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/captcha-2.png -------------------------------------------------------------------------------- /images/captcha.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/captcha.gif -------------------------------------------------------------------------------- /images/code-chaos-restore-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/code-chaos-restore-2.png -------------------------------------------------------------------------------- /images/code-chaos-restore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/code-chaos-restore.png -------------------------------------------------------------------------------- /images/code-chaos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/code-chaos.png -------------------------------------------------------------------------------- /images/e44c02efd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/e44c02efd.jpg -------------------------------------------------------------------------------- /images/get_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/get_a.png -------------------------------------------------------------------------------- /images/login-demo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/login-demo.jpg -------------------------------------------------------------------------------- /images/xx-login-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yanglbme/geetest-crack/d43944a566690e95967abad96a80d3de51a3b2cc/images/xx-login-demo.gif -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | redis 2 | retrying==1.3.3 3 | PyExecJS==1.5.1 4 | requests==2.32.0 5 | Pillow==10.2.0 6 | --------------------------------------------------------------------------------