├── README.md ├── 网易易盾JS分析 ├── my_rid.js ├── test_d.py ├── test_cp_fp.py ├── test_resp.py ├── README.md ├── fp_params.md ├── my_cb.js └── my_trace.js ├── JS混淆 ├── cookies生成.md ├── README.md ├── js加解密.md └── CryptoJS_test.js ├── AES ├── 电信189.js ├── 有赞商场.js └── 百草味.js ├── DES ├── 国鑫所.js └── 融金所.js ├── RSA ├── test.js ├── Barrett.js ├── 手机京东登录.js ├── BigInt.js ├── RSA_Stripped.js └── RSA.js ├── SHA1 ├── 海南航空.js └── e商.js └── md5 ├── 微信公众号.js ├── 万创帮.js └── 叮当快药.js /README.md: -------------------------------------------------------------------------------- 1 | ## 代码目录 2 | 3 | 目录名表示加密方式 4 | 5 | -------------------------------------------------------------------------------- /网易易盾JS分析/my_rid.js: -------------------------------------------------------------------------------- 1 | var my_rid = function() { 2 | var e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 3 | , t = 32 4 | , i = []; 5 | for (; t-- > 0; ) 6 | i[t] = e.charAt(Math.random() * e.length); 7 | return i.join("") 8 | }; 9 | console.log(my_rid()) 10 | -------------------------------------------------------------------------------- /JS混淆/cookies生成.md: -------------------------------------------------------------------------------- 1 | ## 如何找到 cookies 的生成算法 2 | 3 | ### 1.找到 cookies 生成的链接,直接搜参数 4 | 一般搜不到,会有混淆,可以尝试搜索 document.cookies() 或者 $.cookies()。 5 | 6 | ### 2.找生成文件 7 | 判断混淆后,在控制台资源面板中找 cookies 生成的代码文件。 8 | * 1. 先清空 cookies 和缓存 9 | * 2. 对感觉是 cookies 生成算法的文件下断点 10 | * 3. 打开加载 cookies 的页面或者链接 11 | * 4. 是否进入断电,如果进入断点,可以吧 JS 文件拷贝出来,然后自己写个空页面引入 JS 文件,然后看用浏览器打开页面,看是否加载 cookies。 -------------------------------------------------------------------------------- /AES/电信189.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require('crypto-js') 2 | 3 | aesEncrypt = function(e) { 4 | var a = CryptoJS.MD5("login.189.cn"); 5 | var c = CryptoJS.enc.Utf8.parse(a); 6 | var b = CryptoJS.enc.Utf8.parse("1234567812345678"); 7 | var d = CryptoJS.AES.encrypt(e, c, { 8 | iv: b 9 | }); 10 | return d + "" 11 | } 12 | 13 | var encry_pwd = aesEncrypt('a12345678') 14 | console.log(encry_pwd) 15 | -------------------------------------------------------------------------------- /JS混淆/README.md: -------------------------------------------------------------------------------- 1 | ## 常见的混淆方式 2 | 3 | ### 一.字节集混淆 4 | > 将代码的字母逐个转换为 ASCII 码,然后放回一个数组。 5 | > 解决方法:遍历 ASCII 数组,转换后拼接即可。 6 | 7 | ### 二.数组混淆 8 | > 将所有函数名和变量放入一个数组,调用的时候取数组成员调用 9 | > 解决方法:将数组内的值直接替换函数和变量名。 10 | 11 | ### 三.变量名混淆 12 | > 把变量名、函数名、参数名等,替换成没有语义,看着又很像的名字, 13 | > 解决方法:将相同部分用正则替换掉。 14 | > 或者用十六进制文本表示字符串。 15 | > 解决方法:用一些 JS 美化工具,直接将代码中的十六进制转换为字符串。 16 | 17 | ### 四.控制流平坦化 18 | > 将正常的 for 循环等代码转换为 switch-case 代码 19 | > 暂时只能一步一步调试。 20 | -------------------------------------------------------------------------------- /JS混淆/js加解密.md: -------------------------------------------------------------------------------- 1 | ## JS 加解密 2 | 3 | ctypto-js github地址 : https://github.com/brix/crypto-js 4 | 5 | ### 1. 编码 6 | 7 | * unicode 编码: escape unescape 8 | 9 | * URL 编码: encodeURIComponent decodeURIComponent 10 | * Base64/btoa/atob 编码: 所有的数据都能被编码为只用 65 个字符就能表示的文本。 A-Za-z0-9+/= 11 | 12 | 13 | ### 2. 单向散列函数(消息摘要算法) 14 | 15 | * 加密后的密文定长 16 | 17 | * 明文不一样,散列后结果一定不一样 18 | * 不可逆 19 | * 一般用于签名 sign 20 | 21 | 常见的函数有: MD5(解密后密文32位), SHA1(40位), SHA256, SHA512, HmacMD5, HmacSHA1, HmacSHA256 22 | -------------------------------------------------------------------------------- /AES/有赞商场.js: -------------------------------------------------------------------------------- 1 | // https://account.youzan.com/login 2 | 3 | const CryptoJS = require('crypto-js'); 4 | 5 | function test(e){ 6 | var t = CryptoJS; 7 | var r = t.enc.Utf8.parse("youzan.com.aesiv") 8 | var o = t.enc.Utf8.parse("youzan.com._key_"); 9 | return e = t.enc.Utf8.parse(e), 10 | t.AES.encrypt(e, o, { 11 | mode: t.mode.CBC, 12 | padding: t.pad.Iso10126, 13 | iv: r 14 | }).toString() 15 | } 16 | 17 | pwd = 'a12345678' 18 | console.log(test(pwd)) 19 | -------------------------------------------------------------------------------- /DES/国鑫所.js: -------------------------------------------------------------------------------- 1 | // https://wechat.gclfax.com/html/register/login.html?title=%E7%99%BB%E5%BD%95 2 | 3 | 4 | const CryptoJS = require('crypto-js') 5 | 6 | function tripledes(message) { 7 | //required 8 | // 9 | // 10 | var key = 'Pog4iu6OqIkKRpDT'; 11 | var keyHex = CryptoJS.enc.Utf8.parse(key); 12 | var encrypted = CryptoJS.DES.encrypt(message, keyHex, { 13 | mode: CryptoJS.mode.ECB, 14 | padding: CryptoJS.pad.Pkcs7 15 | }); 16 | // console.log('直接 toString' + encrypted.toString()) // 对加密结果直接 toString 就是 base64 17 | // var enstr = CryptoJS.enc.Base64.parse(encrypted.toString()); 18 | // return enstr.toString().toUpperCase(); 19 | return encrypted.ciphertext.toString().toUpperCase() 20 | } 21 | 22 | var pwd = tripledes('15615618453') 23 | console.log(pwd) // DD4428E46F6EEEB059B9FFCA5128F3B5 24 | -------------------------------------------------------------------------------- /网易易盾JS分析/test_d.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import execjs 3 | 4 | headers = { 5 | 'Sec-Fetch-Mode': 'cors', 6 | 'Referer': 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html?cd=https%3A%2F%2Fcc.res.netease.com%2F_next%2F_static%2Fstatic%2Fstyles%2F&cf=urs_component.css%3Fversion%3D20190904&MGID=1570606259476.5786&wdaId=&pkid=PFClpTB&product=cc', 7 | 'Origin': 'https://dl.reg.163.com', 8 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 9 | 'Content-type': 'application/x-www-form-urlencoded', 10 | } 11 | 12 | d_js_path = r'C:\Users\86137\OneDrive\桌面\js_study\JS逆向\滑块验证码js破解\my_d.js' 13 | with open(d_js_path, 'r') as f: 14 | d_code = f.read() 15 | 16 | my_d = execjs.compile(d_code).call('my_d') 17 | # print(my_d) 18 | 19 | 20 | data = { 21 | 'd': 'abc', 22 | 'v': '38eaf165', 23 | 'cb': '_WM_' 24 | } 25 | 26 | response = requests.post('https://webzjac.reg.163.com/v2/d', headers=headers, data=data) 27 | print(response.text) 28 | 29 | data = { 30 | 'd': 'abc', 31 | 'v': '38eaf165', 32 | 'cb': '_WM_' 33 | } 34 | 35 | response = requests.post('https://webzjac.reg.163.com/v2/b', headers=headers, data=data) 36 | print(response.text) -------------------------------------------------------------------------------- /AES/百草味.js: -------------------------------------------------------------------------------- 1 | // https://m.vipbcw.com/register/index 2 | const CryptoJS = require('crypto-js') 3 | 4 | var pwd = 'a12345678' 5 | var phone = '13751685424' 6 | var captcha = '5526' 7 | var timestemp = Date.parse(new Date) / 1e3 8 | 9 | function test(pwd, phone, captcha, timestemp){ 10 | var submit_data = { 11 | mobile_phone: phone, 12 | password: pwd, 13 | phone_captcha: captcha 14 | } 15 | 16 | var submit_json = JSON.stringify(submit_data) 17 | 18 | var md5_data = `data={${submit_json}}&device=WechatMall/1.0/2.2.1×temp=${timestemp}&token=FD92DF750B32765DA01A119BE1601D46` 19 | 20 | var to_encry_data = { 21 | data: submit_json, 22 | device: "WechatMall/1.0/2.2.1", 23 | timestemp: timestemp, 24 | token: "", 25 | sign: CryptoJS.MD5(md5_data), 26 | token: "" 27 | } 28 | 29 | var r = JSON.stringify(to_encry_data) 30 | , o = "b92dff3973ebdc1786803c2ce976a627" 31 | , i = o.substring(0, 16); 32 | o = CryptoJS.enc.Utf8.parse(o), 33 | i = CryptoJS.enc.Utf8.parse(i); 34 | var u = CryptoJS.enc.Utf8.parse(r); 35 | var params = CryptoJS.AES.encrypt(u, o, { 36 | iv: i, 37 | mode: CryptoJS.mode.CBC, 38 | padding: CryptoJS.pad.ZeroPadding 39 | }).toString(); 40 | return params 41 | } 42 | 43 | console.log(test(pwd, phone, captcha, timestemp)) -------------------------------------------------------------------------------- /网易易盾JS分析/test_cp_fp.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import execjs 3 | 4 | js_path = r'C:\\Users\\86137\\OneDrive\\桌面\\js_study\\JS逆向\\滑块验证码js破解\\my_cp.js' 5 | with open(js_path, encoding='utf-8') as f: 6 | js_data = f.read() 7 | 8 | my_cb = execjs.compile(js_data).call('my_cb') 9 | 10 | headers = { 11 | 'Sec-Fetch-Mode': 'no-cors', 12 | 'Referer': 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html?cd=https%3A%2F%2Fcc.res.netease.com%2F_next%2F_static%2Fstatic%2Fstyles%2F&cf=urs_component.css%3Fversion%3D20190904&MGID=1569480120894.9639&wdaId=&pkid=PFClpTB&product=cc', 13 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 14 | } 15 | 16 | fp = r'swL4OvIjzam6f8697KaZ1YnViIP/bKvi6p3lyzLSKIRZsJa23LZT\yIAHur8\1RLpWgIosjhnpqeki\UGMO381vqt\SzdhBciwNhsv4E/z+abwqN+V/dadrJ1oqBe7gPTe++qWSSoLW2\bjoiAl1PickwhhKaS6\rbdDdnAP48RIgOA+:1570447154508' 17 | params = ( 18 | ('id', '744e2a6324ec5370616241baf4507538'), 19 | ('fp', fp), 20 | ('https', 'true'), 21 | ('type', '2'), 22 | ('version', '2.11.4'), 23 | ('dpr', '1.25'), 24 | ('dev', '1'), 25 | ('cb', my_cb), 26 | ('ipv6', 'false'), 27 | ('runEnv', '10'), 28 | ('width', '220'), 29 | ('token', ''), 30 | ('referer', 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html'), 31 | ('callback', '__JSONP_skwoqtr_0'), 32 | ) 33 | 34 | response = requests.get('https://webzjcaptcha.reg.163.com/api/v2/get', headers=headers, params=params) 35 | print(response.text) 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /RSA/test.js: -------------------------------------------------------------------------------- 1 | const JSEncrypt = require('node-jsencrypt') 2 | 3 | const publicKey = `-----BEGIN PUBLIC KEY----- 4 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN 5 | FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76 6 | xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4 7 | gwQco1KRMDSmXSMkDwIDAQAB 8 | -----END PUBLIC KEY-----` 9 | 10 | const privateKey = `-----BEGIN RSA PRIVATE KEY----- 11 | MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ 12 | WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR 13 | aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB 14 | AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv 15 | xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH 16 | m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd 17 | 8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF 18 | z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5 19 | rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM 20 | V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe 21 | aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil 22 | psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz 23 | uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876 24 | -----END RSA PRIVATE KEY-----` 25 | 26 | const fnencrypt = (password) => { 27 | let encryptor = new JSEncrypt(); // JSEncrypt对象 28 | encryptor.setPublicKey(publicKey); // 公钥 29 | let rsaPassWord = encryptor.encrypt(password); // 密码进行加密 30 | return rsaPassWord; 31 | }; 32 | 33 | const fndecrypt = (password) => { 34 | let decryptor = new JSEncrypt(); 35 | decryptor.setPrivateKey(privateKey); // 私钥 36 | let rsaPassWord = decryptor.decrypt(password); 37 | return rsaPassWord; 38 | }; 39 | 40 | const pwd = fnencrypt('a12345678') 41 | console.log(pwd) 42 | 43 | const decrypt_pwd = fndecrypt(pwd) 44 | console.log(`de_pwd: ${decrypt_pwd}`) 45 | 46 | -------------------------------------------------------------------------------- /RSA/Barrett.js: -------------------------------------------------------------------------------- 1 | // BarrettMu, a class for performing Barrett modular reduction computations in 2 | // JavaScript. 3 | // 4 | // Requires BigInt.js. 5 | // 6 | // Copyright 2004-2005 David Shapiro. 7 | // 8 | // You may use, re-use, abuse, copy, and modify this code to your liking, but 9 | // please keep this header. 10 | // 11 | // Thanks! 12 | // 13 | // Dave Shapiro 14 | // dave@ohdave.com 15 | 16 | function BarrettMu(m) 17 | { 18 | this.modulus = biCopy(m); 19 | this.k = biHighIndex(this.modulus) + 1; 20 | var b2k = new BigInt(); 21 | b2k.digits[2 * this.k] = 1; // b2k = b^(2k) 22 | this.mu = biDivide(b2k, this.modulus); 23 | this.bkplus1 = new BigInt(); 24 | this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1) 25 | this.modulo = BarrettMu_modulo; 26 | this.multiplyMod = BarrettMu_multiplyMod; 27 | this.powMod = BarrettMu_powMod; 28 | } 29 | 30 | function BarrettMu_modulo(x) 31 | { 32 | var q1 = biDivideByRadixPower(x, this.k - 1); 33 | var q2 = biMultiply(q1, this.mu); 34 | var q3 = biDivideByRadixPower(q2, this.k + 1); 35 | var r1 = biModuloByRadixPower(x, this.k + 1); 36 | var r2term = biMultiply(q3, this.modulus); 37 | var r2 = biModuloByRadixPower(r2term, this.k + 1); 38 | var r = biSubtract(r1, r2); 39 | if (r.isNeg) { 40 | r = biAdd(r, this.bkplus1); 41 | } 42 | var rgtem = biCompare(r, this.modulus) >= 0; 43 | while (rgtem) { 44 | r = biSubtract(r, this.modulus); 45 | rgtem = biCompare(r, this.modulus) >= 0; 46 | } 47 | return r; 48 | } 49 | 50 | function BarrettMu_multiplyMod(x, y) 51 | { 52 | /* 53 | x = this.modulo(x); 54 | y = this.modulo(y); 55 | */ 56 | var xy = biMultiply(x, y); 57 | return this.modulo(xy); 58 | } 59 | 60 | function BarrettMu_powMod(x, y) 61 | { 62 | var result = new BigInt(); 63 | result.digits[0] = 1; 64 | var a = x; 65 | var k = y; 66 | while (true) { 67 | if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a); 68 | k = biShiftRight(k, 1); 69 | if (k.digits[0] == 0 && biHighIndex(k) == 0) break; 70 | a = this.multiplyMod(a, a); 71 | } 72 | return result; 73 | } 74 | 75 | -------------------------------------------------------------------------------- /JS混淆/CryptoJS_test.js: -------------------------------------------------------------------------------- 1 | const CryptoJS = require("crypto-js"); 2 | 3 | var md5 = CryptoJS.MD5('test') 4 | // 显示转换 5 | console.log('md5: ' + md5.toString()) 6 | // 隐式转换 7 | // console.log(md5 + '') 8 | 9 | var sha1 = CryptoJS.SHA1('test') 10 | console.log('sha1: ' + sha1.toString()) 11 | 12 | // Hmac 系列加密需要 2 个参数,第一个是被加密的字符串,第二个是秘钥 13 | var HmacSHA1 = CryptoJS.HmacSHA1('test', '11111111') 14 | console.log('HmacSHA1: ' + HmacSHA1.toString()) 15 | 16 | 17 | // 通过先创建加密对象的方式加密 18 | // var sha256 = CryptoJS.algo.SHA256.create(); 19 | // sha256.update("Message Part 1"); 20 | // sha256.update("Message Part 2"); 21 | // sha256.update("Message Part 3"); 22 | // var hash = sha256.finalize(); 23 | 24 | /* 将字符串以一定的方式解析成字节集,才能对字节集进行偏移等操作,默认是加密算法以 Utf8 进行解析,以 HEX 输出 25 | var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ=="); 26 | var base64 = CryptoJS.enc.Base64.stringify(words); 27 | 28 | var words = CryptoJS.enc.Latin1.parse("Hello, World!"); 29 | var latin1 = CryptoJS.enc.Latin1.stringify(words); 30 | 31 | var words = CryptoJS.enc.Hex.parse("48656c6c6f2c20576f726c6421"); 32 | var hex = CryptoJS.enc.Hex.stringify(words); 33 | 34 | var words = CryptoJS.enc.Utf8.parse(""); 35 | var utf8 = CryptoJS.enc.Utf8.stringify(words); 36 | 37 | var words = CryptoJS.enc.Utf16.parse("Hello, World!"); 38 | var utf16 = CryptoJS.enc.Utf16.stringify(words); 39 | 40 | var words = CryptoJS.enc.Utf16LE.parse("Hello, World!"); 41 | var utf16 = CryptoJS.enc.Utf16LE.stringify(words); 42 | */ 43 | 44 | 45 | // 密码可以不解析,默认会使用 Utf8 解析 46 | var pwd = CryptoJS.enc.Utf8.parse('hello word') 47 | console.log('直接对 Utf8 的字符串 toString: ', pwd.toString()) // 是 hex 16进制 48 | // 秘钥一定要解析 49 | var key = CryptoJS.enc.Utf8.parse('1234567812345678') // 16位秘钥 50 | var iv = CryptoJS.enc.Utf8.parse('1234567812345678') // 16位秘钥 51 | 52 | var cfg = { 53 | mode: CryptoJS.mode.CBC, // 指明加密方式, ECB 模式不需要 iv 54 | padding: CryptoJS.pad.Pkcs7, // 指明填充方式 55 | iv:iv, // 偏移量 56 | } 57 | //AES 加密 参数 (被加密字符串, 秘钥, 对象(加密模式,加密填充方式,偏移向量)) 58 | var aes = CryptoJS.AES.encrypt(pwd, key, cfg) // 一个位数组 59 | 60 | console.log('aes: ' + aes.toString()) // 对 aes 直接 toString 是 Base64 的输出: 61 | console.log('ciphertext: ' + aes.ciphertext.toString()) 62 | 63 | // AES 解密 64 | var de_aes = CryptoJS.AES.decrypt(aes, key, cfg); 65 | // 要指明 toString 的解析方法 66 | console.log( de_aes.toString(CryptoJS.enc.Utf8) ); 67 | 68 | 69 | var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ=="); 70 | console.log('对 base64 对象直接 toString: ' + words.toString()) // hex 16进制 71 | // console.log(words.toString(CryptoJS.enc.Base64)) 72 | 73 | var base64 = CryptoJS.enc.Base64.stringify(words); 74 | console.log(base64) 75 | 76 | 77 | -------------------------------------------------------------------------------- /SHA1/海南航空.js: -------------------------------------------------------------------------------- 1 | // http://m.hnair.com/#/login/true?_k=ikwtzd 2 | 3 | const CryptoJS = require('crypto-js') 4 | 5 | var certificateHash = '6093941774D84495A5D15D8F909CAA1E'; 6 | var hardCode = '21047C596EAD45209346AE29F0350491'; 7 | 8 | var phoneNum = "13751658555"; 9 | var pwd = "a12345"; 10 | var timestamp = new Date().getTime(); 11 | console.log(timestamp) 12 | 13 | var str = '10149\ 14 | 9E4BBDDEC6C8416EA380E418161A7CD3\ 15 | com.hnair.spa.web.standardstandard\ 16 | 7.5.0\ 17 | defualt_web_diddefualt_web_gtcid' + phoneNum + pwd + 18 | '5d85af4coNPNVSDPti5xzSpYqxfggK2vm7mnKj11\ 19 | HTML5\ 20 | zh-CN\ 21 | slatslng\ 22 | Win32' + timestamp + 23 | '5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1-480true'; 24 | 25 | var sign = CryptoJS.HmacSHA1(str + certificateHash, hardCode) 26 | console.log(sign.toString().toUpperCase()) // 64E4F3CAE3D8FA0F6E3FCD4877FC87159CD40613 27 | 28 | // var desc = "iat%2BQ5z8%2B4dasDscyyGDjMM2vOwzkmj4/HYHyt4USMYv00S0gRAsTIAwcVrh5P1%2BI/2mYkOtSM/qXxx9ijCaeCEXZ5TEWmg8fq7qr5Gp2wO6yzzMQpFq6PbZ00ZDLq4XP8VZR18QAicdVU8RRaljHgylMXRYM2Y0XBPUMR4eJBlp7AgE5HXw/NgIHqxVX65FJJtvQYzAxS/6ZPNSLlROInGvb%2B6APGfVJO/XL1%2BkHN72MAoVtdkETaGopOEeJsj/9EIgBn4bqMs7l1C/3I0mKJJjt3uI4kMF8eCfwMC7JalQVJD%2BKvGG2gC3mBGxtdb0XAuSfMjUxF/IXCC03Or1NGYhNCdGHElU2ZCFR0Lb7C4=".replace(/%2B/g, '+') 29 | // console.log(desc) 30 | 31 | 32 | var process = function(e) { 33 | var t = -979402 34 | , r = 979402; 35 | _nuz = -705100, 36 | _nux = 705102, 37 | _mlq = 1, 38 | _zmmn = -1, 39 | _xhce = 664917, 40 | _pvaa = -713216, 41 | _tmlq = 713456, 42 | _bbm = 933985, 43 | _lxz = 33853, 44 | _sbx = -93056, 45 | _nnuy = "lit", 46 | _uuz = "map", 47 | _jggu = "it", 48 | _yyf = "function", 49 | _oos = "_", 50 | _hsvuz = "sub", 51 | _isus = "cha", 52 | _paww = "str", 53 | _lyydw = "sp", 54 | _qndkq = "cha", 55 | _muzz = "spl", 56 | _unny = "base", 57 | _heeqc = Object(); 58 | var n = { 59 | _base: "", 60 | _baseTable: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", 61 | _baseTables: [-2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -2, -1, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, -2, -2, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, -2, -2, -2, -2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -2, -2, -2, -2, -2, -2, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2], 62 | _baseLink: "120112130113220101010101011201011201121313220101", 63 | _basefunction: function(e, t) { 64 | switch (e = 2 * e, 65 | str_1 = this._baseLink[e], 66 | str_2 = this._baseLink[e + 1], 67 | result = "", 68 | result = t.substring(0, str_2), 69 | parseInt(str_1)) { 70 | case _mlq: 71 | this._base += this._baseTables[result]; 72 | break; 73 | case _mlq + _zmmn: 74 | this._base += this._baseTable[result]; 75 | break; 76 | default: 77 | this._base += result 78 | } 79 | return t.substring(this._baseLink[e + 1]) 80 | } 81 | }; 82 | n._baseLink = n._baseLink[_lyydw + _nnuy](""), 83 | n._baseTable = n._baseTable[_muzz + _jggu](""); 84 | for (var i = t + r; i < n._baseLink.length / (_nux + _nuz); i++) 85 | e = n._basefunction(i, e); 86 | return n._base 87 | }; 88 | 89 | 90 | 91 | var str_json = {"xy":["{\"x\":null,\"y\":null,\"t\":1569060216085}","{\"x\":null,\"y\":null,\"t\":1569060229536}","{\"x\":null,\"y\":null,\"t\":1569060272043}","{\"x\":null,\"y\":null,\"t\":1569060274611}"],"fingerprint":783100800} 92 | str_json = JSON.stringify(str_json) 93 | console.log(JSON.stringify(str_json)) 94 | 95 | var zre = '483991120105853551256740710651221217723' 96 | var zzre = process(zre) 97 | 98 | function eq_u(e, t) { 99 | var r = CryptoJS.enc.Utf8.parse(t) 100 | var encrypted = CryptoJS.DES.encrypt(e, r, { 101 | mode: CryptoJS.mode.ECB, 102 | padding: CryptoJS.pad.Pkcs7, 103 | }); 104 | return encrypted.toString() 105 | } 106 | console.log(zzre) 107 | var des = eq_u(str_json, zzre) 108 | 109 | console.log(des) -------------------------------------------------------------------------------- /网易易盾JS分析/test_resp.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from datetime import datetime 3 | import time 4 | import random 5 | import json 6 | import re 7 | import execjs 8 | import cv2 9 | 10 | session = requests.Session() 11 | headers = { 12 | 'Sec-Fetch-Mode': 'cors', 13 | 'Referer': 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html?cd=https%3A%2F%2Fcc.res.netease.com%2F_next%2F_static%2Fstatic%2Fstyles%2F&cf=urs_component.css%3Fversion%3D20190904&MGID=1570335110013.2468&wdaId=&pkid=PFClpTB&product=cc', 14 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 15 | 'Content-Type': 'application/json', 16 | } 17 | origin_width = 320 18 | wycc_width = 220 19 | wycc_id = '744e2a6324ec5370616241baf4507538' 20 | 21 | def findfic(target='background.jpg', template='front.png'): 22 | """ 23 | 生成滑块匹配距离 24 | :param target: 滑块背景图 25 | :param template: 滑块图片路径 26 | :return: 模板匹配距离 27 | """ 28 | target_rgb = cv2.imread(target) 29 | target_gray = cv2.cvtColor(target_rgb, cv2.COLOR_BGR2GRAY) 30 | template_rgb = cv2.imread(template, 0) 31 | # 使用相关性系数匹配, 结果越接近1 表示越匹配 32 | # https://www.cnblogs.com/ssyfj/p/9271883.html 33 | res = cv2.matchTemplate(target_gray, template_rgb, cv2.TM_CCOEFF_NORMED) 34 | # opencv 的函数 minMaxLoc:在给定的矩阵中寻找最大和最小值,并给出它们的位置 35 | min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res) 36 | # 因为滑块只需要 x 坐标的距离,放回坐标元组的 [0] 即可 37 | if abs(1 - min_val) <= abs(1 - max_val): 38 | distance = min_loc[0] 39 | else: 40 | distance = max_loc[0] 41 | return distance 42 | 43 | 44 | def my_rtid(): 45 | e = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" 46 | t = 32 47 | str_list = [e[int(random.random() * len(e))] for i in range(t)] 48 | return ''.join(str_list) 49 | # print(my_rtid()) 50 | rtid = my_rtid() 51 | timestamp = int(time.time() * 1000) 52 | callback = '__JSONP_qaue9y7_0' 53 | 54 | # 第一个请求, 初始化滑块 55 | init_params = ( 56 | ('pd', 'cc'), 57 | ('pkid', 'PFClpTB'), 58 | ('pkht', 'cc.163.com'), 59 | ('channel', '0'), 60 | ('topURL', 'http://cc.163.com/category/'), 61 | ('rtid', rtid), 62 | # ('nocache', '1570335112543'), 63 | ('nocache', timestamp), 64 | ) 65 | init_resp = session.get('https://dl.reg.163.com/dl/ini', headers=headers, params=init_params) 66 | # print('init_resp: ', init_resp.text) 67 | 68 | # 第二个请求,获得滑块的图片 69 | fp_js_path = r'C:\Users\86137\OneDrive\桌面\js_study\JS逆向\滑块验证码js破解\my_fp.js' 70 | with open(fp_js_path, 'r') as f: 71 | fp_code = f.read() 72 | fp = execjs.compile(fp_code).call('my_fp') 73 | print(fp) 74 | 75 | cb_js_path = r'C:\Users\86137\OneDrive\桌面\js_study\JS逆向\滑块验证码js破解\my_cb.js' 76 | with open(cb_js_path, 'r') as f: 77 | cb_code = f.read() 78 | cb = execjs.compile(cb_code).call('my_cb') 79 | print(cb) 80 | 81 | params = ( 82 | ('id', wycc_id), 83 | ('fp', fp), 84 | ('https', 'true'), 85 | ('type', '2'), 86 | ('version', '2.11.4'), 87 | ('dpr', '1.25'), 88 | ('dev', '1'), 89 | ('cb', cb), 90 | ('ipv6', 'false'), 91 | ('runEnv', '10'), 92 | ('width', '220'), 93 | ('token', ''), 94 | ('referer', 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html'), 95 | ('callback',callback), 96 | ) 97 | 98 | get_resp = session.get('https://webzjcaptcha.reg.163.com/api/v2/get', headers=headers, params=params) 99 | print(get_resp.text) 100 | get_json = re.search(rf'{callback}\((.*?)\)', get_resp.text).group(1) 101 | get_dict = json.loads(get_json) 102 | 103 | bg = get_dict['data']['bg'][0] 104 | front = get_dict['data']['front'][0] 105 | token = get_dict['data']['token'] 106 | print(bg, front, token) 107 | 108 | bg_resp = session.get(bg, headers=headers) 109 | with open('./background.jpg', 'wb') as f: 110 | f.write(bg_resp.content) 111 | 112 | front_resp = session.get(front, headers=headers) 113 | with open('./front.png', 'wb') as f: 114 | f.write(front_resp.content) 115 | 116 | distance = findfic('background.jpg', 'front.png') 117 | true_distance = distance * (wycc_width / origin_width) 118 | print(distance, round(true_distance)) 119 | 120 | trace_js_path = r'C:\Users\86137\OneDrive\桌面\js_study\JS逆向\滑块验证码js破解\my_trace.js' 121 | with open(trace_js_path, 'r', encoding='utf-8') as f: 122 | trace_code = f.read() 123 | trace_data, new_cb = execjs.compile(trace_code).call('my_trace', token, true_distance) 124 | print(trace_data, new_cb) 125 | trace_data = json.loads(trace_data) 126 | 127 | 128 | time.sleep(1) 129 | check_params = ( 130 | ('id', wycc_id), 131 | ('token', token), 132 | # ('acToken', my_actoken), 133 | ('data', json.dumps(trace_data)), 134 | ('width', '220'), 135 | ('type', '2'), 136 | ('version', '2.11.4'), 137 | ('cb', new_cb), 138 | ('extraData', ''), 139 | ('runEnv', '10'), 140 | ('referer', 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html'), 141 | ('callback', callback), 142 | ) 143 | check_resp = session.get('https://webzjcaptcha.reg.163.com/api/v2/check', headers=headers, params=check_params) 144 | print(check_resp.text) 145 | -------------------------------------------------------------------------------- /md5/微信公众号.js: -------------------------------------------------------------------------------- 1 | // https://mp.weixin.qq.com/ 2 | 3 | function e(n, r) { 4 | var t = (65535 & n) + (65535 & r) 5 | return (n >> 16) + (r >> 16) + (t >> 16) << 16 | 65535 & t 6 | } 7 | function u(n, r, t, u, o, c) { 8 | return e(function(n, r) { 9 | return n << r | n >>> 32 - r 10 | }(e(e(r, n), e(u, c)), o), t) 11 | } 12 | function o(n, r, t, e, o, c, f) { 13 | return u(r & t | ~r & e, n, r, o, c, f) 14 | } 15 | function c(n, r, t, e, o, c, f) { 16 | return u(r & e | t & ~e, n, r, o, c, f) 17 | } 18 | function f(n, r, t, e, o, c, f) { 19 | return u(r ^ t ^ e, n, r, o, c, f) 20 | } 21 | function i(n, r, t, e, o, c, f) { 22 | return u(t ^ (r | ~e), n, r, o, c, f) 23 | } 24 | function a(n, r) { 25 | n[r >> 5] |= 128 << r % 32, 26 | n[14 + (r + 64 >>> 9 << 4)] = r 27 | var t, u, a, h, d, g = 1732584193, l = -271733879, v = -1732584194, s = 271733878 28 | for (t = 0; t < n.length; t += 16) 29 | u = g, 30 | a = l, 31 | h = v, 32 | d = s, 33 | l = i(l = i(l = i(l = i(l = f(l = f(l = f(l = f(l = c(l = c(l = c(l = c(l = o(l = o(l = o(l = o(l, v = o(v, s = o(s, g = o(g, l, v, s, n[t], 7, -680876936), l, v, n[t + 1], 12, -389564586), g, l, n[t + 2], 17, 606105819), s, g, n[t + 3], 22, -1044525330), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 4], 7, -176418897), l, v, n[t + 5], 12, 1200080426), g, l, n[t + 6], 17, -1473231341), s, g, n[t + 7], 22, -45705983), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 8], 7, 1770035416), l, v, n[t + 9], 12, -1958414417), g, l, n[t + 10], 17, -42063), s, g, n[t + 11], 22, -1990404162), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 12], 7, 1804603682), l, v, n[t + 13], 12, -40341101), g, l, n[t + 14], 17, -1502002290), s, g, n[t + 15], 22, 1236535329), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 1], 5, -165796510), l, v, n[t + 6], 9, -1069501632), g, l, n[t + 11], 14, 643717713), s, g, n[t], 20, -373897302), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 5], 5, -701558691), l, v, n[t + 10], 9, 38016083), g, l, n[t + 15], 14, -660478335), s, g, n[t + 4], 20, -405537848), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 9], 5, 568446438), l, v, n[t + 14], 9, -1019803690), g, l, n[t + 3], 14, -187363961), s, g, n[t + 8], 20, 1163531501), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 13], 5, -1444681467), l, v, n[t + 2], 9, -51403784), g, l, n[t + 7], 14, 1735328473), s, g, n[t + 12], 20, -1926607734), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 5], 4, -378558), l, v, n[t + 8], 11, -2022574463), g, l, n[t + 11], 16, 1839030562), s, g, n[t + 14], 23, -35309556), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 1], 4, -1530992060), l, v, n[t + 4], 11, 1272893353), g, l, n[t + 7], 16, -155497632), s, g, n[t + 10], 23, -1094730640), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 13], 4, 681279174), l, v, n[t], 11, -358537222), g, l, n[t + 3], 16, -722521979), s, g, n[t + 6], 23, 76029189), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 9], 4, -640364487), l, v, n[t + 12], 11, -421815835), g, l, n[t + 15], 16, 530742520), s, g, n[t + 2], 23, -995338651), v = i(v, s = i(s, g = i(g, l, v, s, n[t], 6, -198630844), l, v, n[t + 7], 10, 1126891415), g, l, n[t + 14], 15, -1416354905), s, g, n[t + 5], 21, -57434055), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 12], 6, 1700485571), l, v, n[t + 3], 10, -1894986606), g, l, n[t + 10], 15, -1051523), s, g, n[t + 1], 21, -2054922799), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 8], 6, 1873313359), l, v, n[t + 15], 10, -30611744), g, l, n[t + 6], 15, -1560198380), s, g, n[t + 13], 21, 1309151649), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 4], 6, -145523070), l, v, n[t + 11], 10, -1120210379), g, l, n[t + 2], 15, 718787259), s, g, n[t + 9], 21, -343485551), 34 | g = e(g, u), 35 | l = e(l, a), 36 | v = e(v, h), 37 | s = e(s, d) 38 | return [g, l, v, s] 39 | } 40 | function h(n) { 41 | var r, t = "" 42 | for (r = 0; r < 32 * n.length; r += 8) 43 | t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255) 44 | return t 45 | } 46 | function d(n) { 47 | var r, t = [] 48 | for (t[(n.length >> 2) - 1] = void 0, 49 | r = 0; r < t.length; r += 1) 50 | t[r] = 0 51 | for (r = 0; r < 8 * n.length; r += 8) 52 | t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32 53 | return t 54 | } 55 | function g(n) { 56 | var r, t, e = "" 57 | for (t = 0; t < n.length; t += 1) 58 | r = n.charCodeAt(t), 59 | e += "0123456789abcdef".charAt(r >>> 4 & 15) + "0123456789abcdef".charAt(15 & r) 60 | return e 61 | } 62 | function l(n) { 63 | return unescape(encodeURIComponent(n)) 64 | } 65 | function v(n) { 66 | return function(n) { 67 | return h(a(d(n), 8 * n.length)) 68 | }(l(n)) 69 | } 70 | function s(n, r) { 71 | return function(n, r) { 72 | var t, e, u = d(n), o = [], c = [] 73 | for (o[15] = c[15] = void 0, 74 | u.length > 16 && (u = a(u, 8 * n.length)), 75 | t = 0; t < 16; t += 1) 76 | o[t] = 909522486 ^ u[t], 77 | c[t] = 1549556828 ^ u[t] 78 | return e = a(o.concat(d(r)), 512 + 8 * r.length), 79 | h(a(c.concat(e), 640)) 80 | }(l(n), l(r)) 81 | } 82 | 83 | var md5 = function(n, r, t) { 84 | return r ? t ? s(r, n) : function(n, r) { 85 | return g(s(n, r)) 86 | }(r, n) : t ? v(n) : function(n) { 87 | return g(v(n)) 88 | }(n) 89 | } 90 | 91 | function test(pwd){ 92 | console.log('123') 93 | return md5(pwd); 94 | } 95 | 96 | 97 | console.log(test('cjx8852077.')) -------------------------------------------------------------------------------- /网易易盾JS分析/README.md: -------------------------------------------------------------------------------- 1 | ## 网易易盾 JS 分析 2 | 3 | 以 网易 cc 的登录为入口 http://cc.163.com/category/live/ 右上角登录 4 | 5 | 6 | 7 | ### 一. 找到网易滑块相关的 url 8 | 9 | * 1. https://dl.reg.163.com/dl/ini?pd=cc&pkid=PFClpTB&pkht=cc.163.com&channel=0&topURL=http%3A%2F%2Fcc.163.com%2Fcategory%2Flive%2F&rtid=Pv7h7Vt1SxFSOXMDaLvtzcQdXqEB4Tmr&nocache=1570326450700 10 | 11 | >作用: 初始化易盾滑块 12 | 参数: (参数名,参数) 13 | ('pd', 'cc') 网易 cc 的标志,固定 14 | ('pkid', 'PFClpTB') 网易 cc 的 id,固定 15 | ('pkht', 'cc.163.com') 网易 cc 的 域名,固定 16 | ('channel', '0') 固定 17 | ('topURL', 'http://cc.163.com/category/') 点击登录的页面,可以固定 18 | ('rtid', rtid) rtid, JS 生成 19 | ('nocache', '1570335112543') 不使用缓存,参数是时间戳。 20 | 21 | 22 | 2. https://webzjcaptcha.reg.163.com/api/v2/get?id=744e2a6324ec5370616241baf4507538&fp=xkgWXll%5CCiMCXJfeNAZ5r6wqufPOotJ1KhT7WVB%2FUHtA9q7%2FCHYSLA2ekaE4smQrAkLHux9S8%5CCh7cLlUv5fddky%2FELCShEDKIuQM%2FeYJsRCRtRGdntvV%2BtubW9KZU0aaaV%2Fb74rJ2SsRVJ4YKq9RT20jS7KjU1AVgh0Y3fRlPezE6qd%3A1570327351808&https=true&type=2&version=2.11.4&dpr=1.25&dev=1&cb=xjFA7%5C%5C6JE0yFfEfmt7Xk40JTPxKgT8p%5C5Ap0e2%5CfYUjl7%5C8%5CMscKxDMSicOiafO&ipv6=false&runEnv=10&width=220&token=&referer=https%3A%2F%2Fdl.reg.163.com%2Fwebzj%2Fv1.0.1%2Fpub%2Findex2_new.html&callback=__JSONP_561dkr0_0 23 | 24 | > 作用:获取滑块背景图和滑块图片, 还有该次滑动请求的 token 25 | > 参数: 26 | ('id', '744e2a6324ec5370616241baf4507538') 网易 cc 的请求易盾的 id (固定) 27 | ('fp', 'xkgWXll%5CCiMCXJfeNAZ5r6wqufPOotJ1KhT7WVB%2FUHtA9q7%2FCHYSLA2ekaE4smQrAkLHux9S8%5CCh7cLlUv5fddky%2FELCShEDKIuQM%2FeYJsRCRtRGdntvV%2BtubW9KZU0aaaV%2Fb74rJ2SsRVJ4YKq9RT20jS7KjU1AVgh0Y3fRlPezE6qd%3A1570327351808') 指纹算法, JS 生成 28 | ('https', 'true') 固定 29 | ('type', '2') 固定 30 | ('version', '2.11.4') 易盾版本号 (固定) 31 | ('dpr', '1.25') 固定 32 | ('dev', '1') 固定 33 | ('cb', 'xjFA7%5C%5C6JE0yFfEfmt7Xk40JTPxKgT8p%5C5Ap0e2%5CfYUjl7%5C8%5CMscKxDMSicOiafO') JS 生成 34 | ('ipv6', 'false') 固定 35 | ('runEnv', '10') 固定 36 | ('width', '220') 滑块的实际宽度 37 | ('token', '') 空值 固定 38 | ('referer', 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html') 固定 39 | ('callback','__JSONP_561dkr0_0') 放回 JSON 数据的前缀,可自己随意指定,例如: 'abc' 40 | 41 | > 重点: fp: 指纹算法,对应 cookies 中的 gdxidpyhxdE 42 | 特征: 一般指纹算法会取浏览器的一组数据放入一个数组,再用数组的 join 方法拼接,再进入一个摘要算法取一个哈希值。 43 | 解决方法: 找到 join 的数组,随机改变一些值,例如浏览器版本号,屏幕大小等等。 44 | 45 | 3. https://webzjcaptcha.reg.163.com/api/v2/check?id=744e2a6324ec5370616241baf4507538&token=e60692d05e1c47328f77c9f401e65364&acToken=9ca17ae2e6ffcda170e2e6ee8eb6688b88feafb86de9968ea7d44e968f9a84f365b194bcd4ef3aa793998aec2af0feaec3b92ab2b2e188e15f95928b91ee5f969b9fb6d55a8ab1f791ce80b89e8ab0b76295b6ee9e&data=%7B%22d%22%3A%22BfQ1UDLNIcrm1r8cwIu%2FCwzZnCoFNrz4n%2FExJSS9bJGTnk5hazmLfVqRxypkKbEx%2FUuKBpb%2FVyPTSsMvqB7pHMlaptfJtOjgHDogOIAh8%5C%5CdwKb5eZcizMuFrt0eNt%2FZ0k2BamUbgE%2BX6MsKE%2Byqr%5C%5CvBTMWoxe2khXsgP2IVzaaiJw6zRcQ2Xa7F9zNQRqgxmcOdT%2FEExql1x0GtiFZ889OCQVvQXSY5c7BerCsbLfcDVf%2FQ2tkOs1ZJzGh%2FyiiY%2Bal6F7pYaUPgwqBAyI%2FIcL%2BvpD4JmxcgAQRqyglfQGBr5mP2lsL%5C%5CN7R1wfbWHKbmxjp1JagxU%2Fwj%5C%5Chk8I1z7cEkygkwJaMsktXc51Z8gMwwnVj5oxysXQow8vM7VAmudC%2BRhlzeNi4WLawa6AVNBaEjKgSWPitTF2Ej7ehm2ieD%2FjemzrwB7F8ez9qEgl9vCjh2qZ5kwzrCpzi%2Ba5xquT4cTnSfvDJ61rYSNB9u%2BxmaHRh8GHlX60VSHT8vXn09OIPf6HrdQbuCLQng1eXc1GR8nUqWAPZB7E6I7cE%2F0qkf6J2250wFBX5YYQfKd0hU7UXhzPtID9rDdWKTOnRh7paiIiQeH9wb7I%2F8nT92FAq%2BOaeoJEMmgweLLMC9DCjV1s55DRLo2bRDibWORjutMgkkI97mkknCUAxP9Y%5C%5C%5C%5C4EGRnlRkMrhEPH9jydxNRRLaPHPyGRVWLKVPXbJY257h%5C%5CNfbGF7o%5C%5Ca0pX4MITuwwX5qojIHU5i%2FtxaEkLd5f%5C%5CB6E%5C%5C0a%2BYE5hXqalmP2vLxXSvx6Id2rDdWnX7ERtAY7v%2FbFqqH4aVJj8PkhIw0SZ2vtTF2An9ZLCbnI4SMkQ7Aq%5C%5ClmgCDKcgqM6IUhdG2225tIrDdhmr7%5C%5CxOE0BVdKbNAhkMRXl6TIvz67DPZ3%22%2C%22m%22%3A%22%22%2C%22p%22%3A%22vcFH9K7I%5C%5C%2BdKLNnZyT%5C%5CXQcc4gqEd72pssbWXzjFBhywxvnvSdkqgXp33%22%2C%22ext%22%3A%22t9hyjeLOLM%2BF47azSHf5cNmHFGzrI9GV%22%7D&width=220&type=2&version=2.11.4&cb=kpTz%5C55I77EvE7PK88JZf0W%5C61IjJ8P6baf2indJhw%2BCo%5CpY%2FGNb4kWfoXWh0Ifx&extraData=%40163.com&runEnv=10&referer=https%3A%2F%2Fdl.reg.163.com%2Fwebzj%2Fv1.0.1%2Fpub%2Findex2_new.html&callback=__JSONP_deqjc4q_1 46 | 47 | >作用:提交轨迹数据,返回滑动成功的标志 48 | >参数: 49 | ('id', '744e2a6324ec5370616241baf4507538') 固定 50 | ('token', 'e60692d05e1c47328f77c9f401e65364') 链接 2 中返回的 token 51 | ('acToken', '9ca17ae2e6ffcda170e2e6ee8eb6688b88feafb86de9968ea7d44e968f9a84f365b194bcd4ef3aa793998aec2af0feaec3b92ab2b2e188e15f95928b91ee5f969b9fb6d55a8ab1f791ce80b89e8ab0b76295b6ee9e') 目前网易无验证这个参数,实测可以携带 52 | ('data', '%7B%22d%22%3A%22BfQ1UDLNIcrm1r8cwIu%2FCwzZnCoFNrz4n%2FExJSS9bJGTnk5hazmLfVqRxypkKbEx%2FUuKBpb%2FVyPTSsMvqB7pHMlaptfJtOjgHDogOIAh8%5C%5CdwKb5eZcizMuFrt0eNt%2FZ0k2BamUbgE%2BX6MsKE%2Byqr%5C%5CvBTMWoxe2khXsgP2IVzaaiJw6zRcQ2Xa7F9zNQRqgxmcOdT%2FEExql1x0GtiFZ889OCQVvQXSY5c7BerCsbLfcDVf%2FQ2tkOs1ZJzGh%2FyiiY%2Bal6F7pYaUPgwqBAyI%2FIcL%2BvpD4JmxcgAQRqyglfQGBr5mP2lsL%5C%5CN7R1wfbWHKbmxjp1JagxU%2Fwj%5C%5Chk8I1z7cEkygkwJaMsktXc51Z8gMwwnVj5oxysXQow8vM7VAmudC%2BRhlzeNi4WLawa6AVNBaEjKgSWPitTF2Ej7ehm2ieD%2FjemzrwB7F8ez9qEgl9vCjh2qZ5kwzrCpzi%2Ba5xquT4cTnSfvDJ61rYSNB9u%2BxmaHRh8GHlX60VSHT8vXn09OIPf6HrdQbuCLQng1eXc1GR8nUqWAPZB7E6I7cE%2F0qkf6J2250wFBX5YYQfKd0hU7UXhzPtID9rDdWKTOnRh7paiIiQeH9wb7I%2F8nT92FAq%2BOaeoJEMmgweLLMC9DCjV1s55DRLo2bRDibWORjutMgkkI97mkknCUAxP9Y%5C%5C%5C%5C4EGRnlRkMrhEPH9jydxNRRLaPHPyGRVWLKVPXbJY257h%5C%5CNfbGF7o%5C%5Ca0pX4MITuwwX5qojIHU5i%2FtxaEkLd5f%5C%5CB6E%5C%5C0a%2BYE5hXqalmP2vLxXSvx6Id2rDdWnX7ERtAY7v%2FbFqqH4aVJj8PkhIw0SZ2vtTF2An9ZLCbnI4SMkQ7Aq%5C%5ClmgCDKcgqM6IUhdG2225tIrDdhmr7%5C%5CxOE0BVdKbNAhkMRXl6TIvz67DPZ3%22%2C%22m%22%3A%22%22%2C%22p%22%3A%22vcFH9K7I%5C%5C%2BdKLNnZyT%5C%5CXQcc4gqEd72pssbWXzjFBhywxvnvSdkqgXp33%22%2C%22ext%22%3A%22t9hyjeLOLM%2BF47azSHf5cNmHFGzrI9GV%22%7D') 加密后的轨迹, JS 生成 53 | ('width', '220') 滑块图片实际宽度, 固定 54 | ('type', '2') 固定 55 | ('version', '2.11.4') 固定 56 | ('cb', 'kpTz%5C55I77EvE7PK88JZf0W%5C61IjJ8P6baf2indJhw%2BCo%5CpY%2FGNb4kWfoXWh0Ifx') 和链接 2 中的 cb 是同一个算法, 重新生成的 cb 57 | ('extraData', '') 这是请求登录对应的网易账号,可使用空值 58 | ('runEnv', '10') 固定 59 | ('referer', 'https://dl.reg.163.com/webzj/v1.0.1/pub/index2_new.html') 固定 60 | ('callback', callback) 放回 JSON 数据的前缀,可自己随意指定,例如: 'abc' 61 | 62 | > 注意点: width 参数,这是真正的滑块图片宽度,和链接 2 中返回的图片的宽度是不一样的,实际提交的距离要按原图像的宽度除以这个宽度进行计算。 63 | 64 | ### 二. 找出加密函数的 JS 代码,在本地 node 环境模拟生成。 65 | 66 | 1. rtid 修改后的 JS 文件 --> my_rtid.js 67 | 68 | 2. cb 修改后的 JS 文件 --> my_cb.js 69 | 70 | 3. fp 修改后的 JS 文件 --> my_fp.js 71 | 72 | 4. 利用 opencv 识别滑块滑动距离 --> test_resp 中的 findfic 函数。 73 | 74 | 5. data 生成轨迹和轨迹加密,修改后的 JS 文件 --> my_trace.js 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /md5/万创帮.js: -------------------------------------------------------------------------------- 1 | // https://m.wcbchina.com/login/other-login.html 2 | 3 | function c(x, c) { 4 | x[c >> 5] |= 128 << c % 32, 5 | x[(c + 64 >>> 9 << 4) + 14] = c; 6 | for (var a = 1732584193, _ = -271733879, y = -1732584194, d = 271733878, i = 0; i < x.length; i += 16) { 7 | var b = a 8 | , B = _ 9 | , D = y 10 | , E = d; 11 | a = h(a, _, y, d, x[i + 0], 7, -680876936), 12 | d = h(d, a, _, y, x[i + 1], 12, -389564586), 13 | y = h(y, d, a, _, x[i + 2], 17, 606105819), 14 | _ = h(_, y, d, a, x[i + 3], 22, -1044525330), 15 | a = h(a, _, y, d, x[i + 4], 7, -176418897), 16 | d = h(d, a, _, y, x[i + 5], 12, 1200080426), 17 | y = h(y, d, a, _, x[i + 6], 17, -1473231341), 18 | _ = h(_, y, d, a, x[i + 7], 22, -45705983), 19 | a = h(a, _, y, d, x[i + 8], 7, 1770035416), 20 | d = h(d, a, _, y, x[i + 9], 12, -1958414417), 21 | y = h(y, d, a, _, x[i + 10], 17, -42063), 22 | _ = h(_, y, d, a, x[i + 11], 22, -1990404162), 23 | a = h(a, _, y, d, x[i + 12], 7, 1804603682), 24 | d = h(d, a, _, y, x[i + 13], 12, -40341101), 25 | y = h(y, d, a, _, x[i + 14], 17, -1502002290), 26 | _ = h(_, y, d, a, x[i + 15], 22, 1236535329), 27 | a = g(a, _, y, d, x[i + 1], 5, -165796510), 28 | d = g(d, a, _, y, x[i + 6], 9, -1069501632), 29 | y = g(y, d, a, _, x[i + 11], 14, 643717713), 30 | _ = g(_, y, d, a, x[i + 0], 20, -373897302), 31 | a = g(a, _, y, d, x[i + 5], 5, -701558691), 32 | d = g(d, a, _, y, x[i + 10], 9, 38016083), 33 | y = g(y, d, a, _, x[i + 15], 14, -660478335), 34 | _ = g(_, y, d, a, x[i + 4], 20, -405537848), 35 | a = g(a, _, y, d, x[i + 9], 5, 568446438), 36 | d = g(d, a, _, y, x[i + 14], 9, -1019803690), 37 | y = g(y, d, a, _, x[i + 3], 14, -187363961), 38 | _ = g(_, y, d, a, x[i + 8], 20, 1163531501), 39 | a = g(a, _, y, d, x[i + 13], 5, -1444681467), 40 | d = g(d, a, _, y, x[i + 2], 9, -51403784), 41 | y = g(y, d, a, _, x[i + 7], 14, 1735328473), 42 | _ = g(_, y, d, a, x[i + 12], 20, -1926607734), 43 | a = v(a, _, y, d, x[i + 5], 4, -378558), 44 | d = v(d, a, _, y, x[i + 8], 11, -2022574463), 45 | y = v(y, d, a, _, x[i + 11], 16, 1839030562), 46 | _ = v(_, y, d, a, x[i + 14], 23, -35309556), 47 | a = v(a, _, y, d, x[i + 1], 4, -1530992060), 48 | d = v(d, a, _, y, x[i + 4], 11, 1272893353), 49 | y = v(y, d, a, _, x[i + 7], 16, -155497632), 50 | _ = v(_, y, d, a, x[i + 10], 23, -1094730640), 51 | a = v(a, _, y, d, x[i + 13], 4, 681279174), 52 | d = v(d, a, _, y, x[i + 0], 11, -358537222), 53 | y = v(y, d, a, _, x[i + 3], 16, -722521979), 54 | _ = v(_, y, d, a, x[i + 6], 23, 76029189), 55 | a = v(a, _, y, d, x[i + 9], 4, -640364487), 56 | d = v(d, a, _, y, x[i + 12], 11, -421815835), 57 | y = v(y, d, a, _, x[i + 15], 16, 530742520), 58 | _ = v(_, y, d, a, x[i + 2], 23, -995338651), 59 | a = A(a, _, y, d, x[i + 0], 6, -198630844), 60 | d = A(d, a, _, y, x[i + 7], 10, 1126891415), 61 | y = A(y, d, a, _, x[i + 14], 15, -1416354905), 62 | _ = A(_, y, d, a, x[i + 5], 21, -57434055), 63 | a = A(a, _, y, d, x[i + 12], 6, 1700485571), 64 | d = A(d, a, _, y, x[i + 3], 10, -1894986606), 65 | y = A(y, d, a, _, x[i + 10], 15, -1051523), 66 | _ = A(_, y, d, a, x[i + 1], 21, -2054922799), 67 | a = A(a, _, y, d, x[i + 8], 6, 1873313359), 68 | d = A(d, a, _, y, x[i + 15], 10, -30611744), 69 | y = A(y, d, a, _, x[i + 6], 15, -1560198380), 70 | _ = A(_, y, d, a, x[i + 13], 21, 1309151649), 71 | a = A(a, _, y, d, x[i + 4], 6, -145523070), 72 | d = A(d, a, _, y, x[i + 11], 10, -1120210379), 73 | y = A(y, d, a, _, x[i + 2], 15, 718787259), 74 | _ = A(_, y, d, a, x[i + 9], 21, -343485551), 75 | a = C(a, b), 76 | _ = C(_, B), 77 | y = C(y, D), 78 | d = C(d, E) 79 | } 80 | return Array(a, _, y, d) 81 | } 82 | function a(q, c, a, x, s, t) { 83 | return C(y(C(C(c, q), C(x, t)), s), a) 84 | } 85 | function h(c, h, g, d, x, s, t) { 86 | return a(h & g | ~h & d, c, h, x, s, t) 87 | } 88 | function g(c, h, g, d, x, s, t) { 89 | return a(h & d | g & ~d, c, h, x, s, t) 90 | } 91 | function v(c, h, g, d, x, s, t) { 92 | return a(h ^ g ^ d, c, h, x, s, t) 93 | } 94 | function A(c, h, g, d, x, s, t) { 95 | return a(g ^ (h | ~d), c, h, x, s, t) 96 | } 97 | function _(a, h) { 98 | var g = b(a); 99 | g.length > 16 && (g = c(g, a.length * U)); 100 | for (var v = Array(16), A = Array(16), i = 0; 16 > i; i++) 101 | v[i] = 909522486 ^ g[i], 102 | A[i] = 1549556828 ^ g[i]; 103 | var _ = c(v.concat(b(h)), 512 + h.length * U); 104 | return c(A.concat(_), 640) 105 | } 106 | function C(x, c) { 107 | var a = (65535 & x) + (65535 & c) 108 | , h = (x >> 16) + (c >> 16) + (a >> 16); 109 | return h << 16 | 65535 & a 110 | } 111 | function y(c, a) { 112 | return c << a | c >>> 32 - a 113 | } 114 | function b(c) { 115 | for (var a = Array(), h = (1 << U) - 1, i = 0; i < c.length * U; i += U) 116 | a[i >> 5] |= (c.charCodeAt(i / U) & h) << i % 32; 117 | return a 118 | } 119 | function B(c) { 120 | for (var a = "", h = (1 << U) - 1, i = 0; i < 32 * c.length; i += U) 121 | a += String.fromCharCode(c[i >> 5] >>> i % 32 & h); 122 | return a 123 | } 124 | function D(c) { 125 | for (var a = F ? "0123456789ABCDEF" : "0123456789abcdef", h = "", i = 0; i < 4 * c.length; i++) 126 | h += a.charAt(c[i >> 2] >> i % 4 * 8 + 4 & 15) + a.charAt(c[i >> 2] >> i % 4 * 8 & 15); 127 | return h 128 | } 129 | function E(c) { 130 | for (var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", h = "", i = 0; i < 4 * c.length; i += 3) 131 | for (var g = (c[i >> 2] >> 8 * (i % 4) & 255) << 16 | (c[i + 1 >> 2] >> 8 * ((i + 1) % 4) & 255) << 8 | c[i + 2 >> 2] >> 8 * ((i + 2) % 4) & 255, v = 0; 4 > v; v++) 132 | h += 8 * i + 6 * v > 32 * c.length ? S : a.charAt(g >> 6 * (3 - v) & 63); 133 | return h 134 | } 135 | var F = 0 136 | , S = "" 137 | , U = 8 138 | , j = { 139 | hex_md5: function(s) { 140 | return D(c(b(s), s.length * U)).toUpperCase() 141 | }, 142 | b64_md5: function(s) { 143 | return E(c(b(s), s.length * U)) 144 | }, 145 | str_md5: function(s) { 146 | return B(c(b(s), s.length * U)) 147 | }, 148 | hex_hmac_md5: function(c, a) { 149 | return D(_(c, a)) 150 | }, 151 | b64_hmac_md5: function(c, a) { 152 | return E(_(c, a)) 153 | }, 154 | str_hmac_md5: function(c, a) { 155 | return B(_(c, a)) 156 | } 157 | }; 158 | md5 = j; 159 | 160 | var time = new Date().getTime(); 161 | time = '1568564879630'; 162 | console.log(time); 163 | var sign = md5.hex_md5(time).toUpperCase(); 164 | console.log(sign); 165 | 166 | 167 | -------------------------------------------------------------------------------- /md5/叮当快药.js: -------------------------------------------------------------------------------- 1 | // https://m.ddky.com/regsiter.html 2 | 3 | function md5(t) { 4 | function e(t, e) { 5 | return t << e | t >>> 32 - e 6 | } 7 | function s(t, e) { 8 | var s, i, o, n, a; 9 | return o = 2147483648 & t, 10 | n = 2147483648 & e, 11 | s = 1073741824 & t, 12 | i = 1073741824 & e, 13 | a = (1073741823 & t) + (1073741823 & e), 14 | s & i ? 2147483648 ^ a ^ o ^ n : s | i ? 1073741824 & a ? 3221225472 ^ a ^ o ^ n : 1073741824 ^ a ^ o ^ n : a ^ o ^ n 15 | } 16 | function i(t, e, s) { 17 | return t & e | ~t & s 18 | } 19 | function o(t, e, s) { 20 | return t & s | e & ~s 21 | } 22 | function n(t, e, s) { 23 | return t ^ e ^ s 24 | } 25 | function a(t, e, s) { 26 | return e ^ (t | ~s) 27 | } 28 | function r(t, o, n, a, r, c, d) { 29 | return t = s(t, s(s(i(o, n, a), r), d)), 30 | s(e(t, c), o) 31 | } 32 | function c(t, i, n, a, r, c, d) { 33 | return t = s(t, s(s(o(i, n, a), r), d)), 34 | s(e(t, c), i) 35 | } 36 | function d(t, i, o, a, r, c, d) { 37 | return t = s(t, s(s(n(i, o, a), r), d)), 38 | s(e(t, c), i) 39 | } 40 | function l(t, i, o, n, r, c, d) { 41 | return t = s(t, s(s(a(i, o, n), r), d)), 42 | s(e(t, c), i) 43 | } 44 | function u(t) { 45 | var e, s = t.length, i = s + 8, o = (i - i % 64) / 64, n = 16 * (o + 1), a = Array(n - 1), r = 0, c = 0; 46 | while (c < s) 47 | e = (c - c % 4) / 4, 48 | r = c % 4 * 8, 49 | a[e] = a[e] | t.charCodeAt(c) << r, 50 | c++; 51 | return e = (c - c % 4) / 4, 52 | r = c % 4 * 8, 53 | a[e] = a[e] | 128 << r, 54 | a[n - 2] = s << 3, 55 | a[n - 1] = s >>> 29, 56 | a 57 | } 58 | function h(t) { 59 | var e, s, i = "", o = ""; 60 | for (s = 0; s <= 3; s++) 61 | e = t >>> 8 * s & 255, 62 | o = "0" + e.toString(16), 63 | i += o.substr(o.length - 2, 2); 64 | return i 65 | } 66 | function m(t) { 67 | t = t.replace(/\r\n/g, "\n"); 68 | for (var e = "", s = 0; s < t.length; s++) { 69 | var i = t.charCodeAt(s); 70 | i < 128 ? e += String.fromCharCode(i) : i > 127 && i < 2048 ? (e += String.fromCharCode(i >> 6 | 192), 71 | e += String.fromCharCode(63 & i | 128)) : (e += String.fromCharCode(i >> 12 | 224), 72 | e += String.fromCharCode(i >> 6 & 63 | 128), 73 | e += String.fromCharCode(63 & i | 128)) 74 | } 75 | return e 76 | } 77 | var p, g, f, A, v, I, y, C, b, w = Array(), k = 7, S = 12, V = 17, E = 22, B = 5, x = 9, O = 14, j = 20, T = 4, Q = 11, D = 16, U = 23, N = 6, F = 10, R = 15, L = 21; 78 | for (t = m(t), 79 | w = u(t), 80 | I = 1732584193, 81 | y = 4023233417, 82 | C = 2562383102, 83 | b = 271733878, 84 | p = 0; p < w.length; p += 16) 85 | g = I, 86 | f = y, 87 | A = C, 88 | v = b, 89 | I = r(I, y, C, b, w[p + 0], k, 3614090360), 90 | b = r(b, I, y, C, w[p + 1], S, 3905402710), 91 | C = r(C, b, I, y, w[p + 2], V, 606105819), 92 | y = r(y, C, b, I, w[p + 3], E, 3250441966), 93 | I = r(I, y, C, b, w[p + 4], k, 4118548399), 94 | b = r(b, I, y, C, w[p + 5], S, 1200080426), 95 | C = r(C, b, I, y, w[p + 6], V, 2821735955), 96 | y = r(y, C, b, I, w[p + 7], E, 4249261313), 97 | I = r(I, y, C, b, w[p + 8], k, 1770035416), 98 | b = r(b, I, y, C, w[p + 9], S, 2336552879), 99 | C = r(C, b, I, y, w[p + 10], V, 4294925233), 100 | y = r(y, C, b, I, w[p + 11], E, 2304563134), 101 | I = r(I, y, C, b, w[p + 12], k, 1804603682), 102 | b = r(b, I, y, C, w[p + 13], S, 4254626195), 103 | C = r(C, b, I, y, w[p + 14], V, 2792965006), 104 | y = r(y, C, b, I, w[p + 15], E, 1236535329), 105 | I = c(I, y, C, b, w[p + 1], B, 4129170786), 106 | b = c(b, I, y, C, w[p + 6], x, 3225465664), 107 | C = c(C, b, I, y, w[p + 11], O, 643717713), 108 | y = c(y, C, b, I, w[p + 0], j, 3921069994), 109 | I = c(I, y, C, b, w[p + 5], B, 3593408605), 110 | b = c(b, I, y, C, w[p + 10], x, 38016083), 111 | C = c(C, b, I, y, w[p + 15], O, 3634488961), 112 | y = c(y, C, b, I, w[p + 4], j, 3889429448), 113 | I = c(I, y, C, b, w[p + 9], B, 568446438), 114 | b = c(b, I, y, C, w[p + 14], x, 3275163606), 115 | C = c(C, b, I, y, w[p + 3], O, 4107603335), 116 | y = c(y, C, b, I, w[p + 8], j, 1163531501), 117 | I = c(I, y, C, b, w[p + 13], B, 2850285829), 118 | b = c(b, I, y, C, w[p + 2], x, 4243563512), 119 | C = c(C, b, I, y, w[p + 7], O, 1735328473), 120 | y = c(y, C, b, I, w[p + 12], j, 2368359562), 121 | I = d(I, y, C, b, w[p + 5], T, 4294588738), 122 | b = d(b, I, y, C, w[p + 8], Q, 2272392833), 123 | C = d(C, b, I, y, w[p + 11], D, 1839030562), 124 | y = d(y, C, b, I, w[p + 14], U, 4259657740), 125 | I = d(I, y, C, b, w[p + 1], T, 2763975236), 126 | b = d(b, I, y, C, w[p + 4], Q, 1272893353), 127 | C = d(C, b, I, y, w[p + 7], D, 4139469664), 128 | y = d(y, C, b, I, w[p + 10], U, 3200236656), 129 | I = d(I, y, C, b, w[p + 13], T, 681279174), 130 | b = d(b, I, y, C, w[p + 0], Q, 3936430074), 131 | C = d(C, b, I, y, w[p + 3], D, 3572445317), 132 | y = d(y, C, b, I, w[p + 6], U, 76029189), 133 | I = d(I, y, C, b, w[p + 9], T, 3654602809), 134 | b = d(b, I, y, C, w[p + 12], Q, 3873151461), 135 | C = d(C, b, I, y, w[p + 15], D, 530742520), 136 | y = d(y, C, b, I, w[p + 2], U, 3299628645), 137 | I = l(I, y, C, b, w[p + 0], N, 4096336452), 138 | b = l(b, I, y, C, w[p + 7], F, 1126891415), 139 | C = l(C, b, I, y, w[p + 14], R, 2878612391), 140 | y = l(y, C, b, I, w[p + 5], L, 4237533241), 141 | I = l(I, y, C, b, w[p + 12], N, 1700485571), 142 | b = l(b, I, y, C, w[p + 3], F, 2399980690), 143 | C = l(C, b, I, y, w[p + 10], R, 4293915773), 144 | y = l(y, C, b, I, w[p + 1], L, 2240044497), 145 | I = l(I, y, C, b, w[p + 8], N, 1873313359), 146 | b = l(b, I, y, C, w[p + 15], F, 4264355552), 147 | C = l(C, b, I, y, w[p + 6], R, 2734768916), 148 | y = l(y, C, b, I, w[p + 13], L, 1309151649), 149 | I = l(I, y, C, b, w[p + 4], N, 4149444226), 150 | b = l(b, I, y, C, w[p + 11], F, 3174756917), 151 | C = l(C, b, I, y, w[p + 2], R, 718787259), 152 | y = l(y, C, b, I, w[p + 9], L, 3951481745), 153 | I = s(I, g), 154 | y = s(y, f), 155 | C = s(C, A), 156 | b = s(b, v); 157 | var M = h(I) + h(y) + h(C) + h(b); 158 | return M.toUpperCase() 159 | } 160 | 161 | function l(t, e) { 162 | var s = Object.keys(t).sort() 163 | , i = s.reduce(function(e, s) { 164 | return e + s + t[s] 165 | }, "") 166 | , o = "".concat(t.method).concat(i).concat(e); 167 | return md5(o) 168 | } 169 | 170 | 171 | var password = 'qwer1234' 172 | var userName = '13751678541' 173 | var now = new Date() 174 | var time = now.getFullYear() + '-' + (now.getMonth()+1) + '-' + now.getDate() + ' ' + now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds() 175 | // console.log(time) 176 | 177 | var data = { 178 | method: "ddsy.user.reg.reguser", 179 | password: md5(password).toLowerCase(), 180 | plat: "H5", 181 | platform: "H5", 182 | smsCode: "3752", 183 | t: time, 184 | userName: userName, 185 | v: "1.0", 186 | versionName: "5.3.0" 187 | } 188 | var key = '6C57AB91A1308E26B797F4CD382AC79D' 189 | 190 | console.log(l(data, key)) -------------------------------------------------------------------------------- /网易易盾JS分析/fp_params.md: -------------------------------------------------------------------------------- 1 | i = "true###true###true###undefined###function######Win32###data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAX+ElEQVR4Xu2ce3iU1Z3Hv+9ck8l1kkwS7uEWLuGWkEuxXdraPrrVP7bbR+0+7a51VRKkxVa3rWL7uLS7KrbWXbHCTBSl7Xa3W9uCIhSRm5cCchNBjZRbwEBCCAlJyH1mzj7nTSZMMjPJSQT3IN/zPD6PD/m+Z37v53fe75zzO+cdA7HagvIbYYiNEybsQ+7kXb0qp6OlNjOrcp9hDZwKxOGhVXmoj9lH/z/8068TENf+e2fcxZuKi9ciwXWhV5GR8dHbCQkN5yDwK18R/qDcpxRejljvei4N1sDG/PwNRVmZJ3o/3m5vv5CVdfxti9X/P+WF+BVKfd8CsNrlakRR0UuIj2uG3dFen5V1fLfV4vcL4A+mLtTKvPOdjpZNxcUvOXvv1xAiI6Nqtyuh4YDJcLk3HcLYAmDMrJmbMXLkYfPqpOS6w2nuM0cAdMGCZ3wFkJrYbdEz2fDbthQWvjw9I/2jPjqHs60u03N8t9UW8PrmYt2Q+A5HvHSpDadHemGIuzyeSuTlbUdbWxLOnctBdXUu2toTb4Vv4dDyPJw45DWlvnsBPBXOVv6zy9V40uM5eUgIVJQX4YfD6r7MOxvC2DxixJGMGTO2wGoJmN3YbJ0Xs7KO7bRZu+oswI9XFuF41P5jxCbz5cmofMdm6+owrxOot1qwbMVcVCR8b9n9c/JffSIp8bzRv8+4+OYzae4zy56f1/H0kO9nQflKGGJhSckf4U6tMS83LEG/x3NyV1xcc7UI4ufPFmPPkPsNv2BB+XIYYnHMXBg4HeErpb6bAdMT4iJuuLfvy2ECV5NhQRgoLX98zOj3fzBt+huwGEEzeosl0OnJrNzldLTsGrl+6ZKl1dleCGPBiBFHEBqgCQn1xzIyqioE0BaR1LueGwdrYGt+/oYJ4UYor0nPqNpv6ld5x0EYL9rt7SgpXoPExPregRIf13xBGKiFwI/LC1E98GARBsp8v5wwfv+i8C8Zc+AZwaD8UoiPb1zvexb//rEGncLFHyIbX8J9OINU5ObuxITx+3uvcqET8/3HMeZiJ6ZVAdNOK3T4MSTLcT2+i6/jajKskJmaXmWgVvjx+LMl+KuJYfHy5HHZhzfkTt75WavV35eMIURS0vl30lPP3OMtwu4hYYtiWPL69IxTuxNcF6oMK57yFeCNIfUZLl683IkO528A3No/Fykpte+nptacEAYq/W146PnPoTl0r+h0rIEwrrdau0DDCgda5v3bxIQLrxQVrrU6na29f3G7qw8kJ587eOzDeU9sfuOOVQCKpk97A2PHHgJ6ZksJroZzUY2lJ0njxh28derUt2BAmP2as7LM47uFRfxqVfnKr8AQt8uZyOzZm2CzdiE0s7Na/V1CYFd5ER5RGiilvi+mpNT+uXDuOqc0wPAmv309Gac2/eK3gTuS2pR6G7bocdyIB/E1yAeqqGgtUlPO9vY1FvWYidMmi4ITwLzux/CKtavasATOWoBHI2ZoC1fmz5n12rbsrKMp/cFZrP52d+rZPzmzzy98fmrPg69CN4ZhJSfXfpDqrvmrxYDXOxevqnQVVdOzAgAwvbh4DdLcZ7pl8hlKP/V2QkJjXcRst8xbCGG8BiB10sQ9NKw+YEt9Yw1DvFY4d11uetiSKj6+uSojs3LPkcOfWb/99TseNwyRLqfN8iG0Wv2tWVnHd9rt7W0CeKe8EA9HJKvUd29a2umnCvI3yKWC+WeL1d+R6Tm5KyAs+3/z6ydulEkMn4mEzdr8Qxooi5cnG132NcVFa693p/adkMlZVlr6mT3f/0t9yZzKYQ+7QS+sRDq+jPtwDB5kZp7A7FmbTOMy7xtBlEAqLsLhB256BxilXlQY9LOjCa5mw4q9XBVG+gMP/2h63uv/lpBwqbQSun+ns6UmPe3Mk89f1/ZzZWgxDEsuBz2Zle9YreI33gL8Trm//sJS3xcBbLDb2+NkSSgp8bypsFoDbZme47sczrYWANt8hXiy99KeEkx8fDOKi9bSsPow7a67rJowce/t4Usqm62zOSvr2K7KE/lntmy761uJCQ3mrEHOwpzOlrOZmZX7LUbAHxT4r2eL8fsohlVit7dvLi5emxhKktSkpZ3eFwhaz69b9/0vdXQkWEuK/4Tk5HO9yzeXq1FmtN4axI9XFKNvUWqgUVPquzUn58DvpkzZYQnN6EJym72j6av1lcnf3NOBuK5hD72YF3bBiu/hNqzAF0zNnDkbkZ11rFefgYsoRCVsCCKrEfjqHsDWXfa5Yu3TaVjdS8PxIz54bdKk3cVRl4aJ599NSam997kS/5tKcGMYVtiX8kZfIZ5Q6itC1F1yAfCDlJRaFM5dJ1cRpipUF5fPkGHBC965WNN7+YLyZTDEA6NGfYi86dtpWBFcy7y3pKVWv5hfsAF2W3e9UxYeM9JP7q6pznVv3X7ntKzM45gxY6usb10qjBtoEQKPlBfiUESfPVPhWTM3Tw8V1KXGldBYKYJG585dt+XKgnQoiTZbR2NW1om3bbbOzpiztoFGzT0r3Ilxjevnzl0/Lz6+KUKZhWbcebQK849dXscSMPBLfAH34TYEYEF6ehXmzPkz7D2zSnMJiFMYgUZz4F13GLiSM73QjX9qDUsW98u882bMfnVLdtax+P6JlkvD1NSadfGe+oVKm2MxDEv2K2tMKe6abX3qS0NxrlLfVMDcNBqZk3MAU6bs6C2PpKbWHExJqT0VtQbcE1OoBMMaVn/oZd7JVsO/taRkzWg52wm1xKT6IxcvutN27rwtfdTID836VXch+9Qul6tJLmqqOqxYsjofkfPznpnbmDHv3d6noG/1m4549Gix0+939O7GSiPzZJx8TwgEYeCF8kKsHcrYMLULyj8/depbm3JyDjiiXTu6swUPHKjCpIZuU/64TZrVy5iFb+ButMIBWSAtLFyH8GVpNpqQj1OwIojktu7Z1ZWupcn7+jQblizJux9c+sjMvK1L5M51/yZXAKlpp59aPa99mdF/ut1fPIBhWa1dbRkZp7Y741oeiPqlPNAAKvXZYYhyCOMOwxDmF3Oo5GK1dbVkZR7fZbd3tIloO4Q9M6zCwpchd75pWP1B3/FCHBydv83N3fm18J0tOcsKBm1GRcXnrKNHVZhLt9BSUW49D1oYL/V9KyWldnX4VDj00Q0XRiAQsJkJ6VfEb7BY8LA3H0OvOC1daktrFc/MnLW5VK7/o7WkFgse2ncac9ouGfNwjEsuA6UpLMHfQ/6/HJRyB3VUz/EM2WcculCESqSgu9r/SRTbr4UZlnmP96xwT8x55/WJE/bOlLP+Pk3uGiaef9edVnt/eaF/24D5HcCw5HXS/GQt9oXr2h9THyfmzvV3IIz/kOWq/jXNxMT6o+npVR/K/oTAxvIiPNOn71LfPQBWhI5a0LCikS/13evxVD4V2rELl5yrG4fkpHNm/UoW4z2Zle9CiIBhwXMDnm8q8862WvxbSorXpIfP3GTfgaDN/AirxY8+3zgCH/gK8eCg34yxRs/i5clTcvZszhl3sEiaSLR2sSkD8w7EY0nbNrhxaWdUZUDKWVUFsrEI38DryDUvkZ8zadJuTBi/z/x/898gkIczyEF3kdXdAvzdHiDh8kzuBg310z3D6r5928KVX5g1e+OmzMwT9v5AuncNa15Jctd/2zsbtTGBDWJY8jqHs60yLq75zt9/uWZg85PipUstqM7+NoTxC7kxLmfdstiektwdgtXa1ZqZeWKXw9HeKgQuWoBHvEV4r098Zd75EMarhYUvx3GGFStzZd5CWSQvKVqbIs9EhbegsJgPonwIQ2dHINCMAP7V9xnIQ57RW8/B1OnT3igyj0PEaK74plMZmScPGUIEYxbxB31ELwmyHlw6YeLU13ckJ53PinVZe3sijn1wHW4+V4278RZmoQp2xK6ENyEO2zEFT+LLeAuTzHpVzwDEjBnbkJ19pHfqLjmNRx2mocZkZg8An/8AmNKzoz2EWxm29FowLLk0TF/y8PIZeVu/E21G7XS01qamV/3ngEtDBcOSSejsjKs79VHeLUd/+PwbckkQNTF3rhoJe9fPIIx/kN4UMes2hEhzn9mflHTe3Mo2DOxbWYCfRHw5L16eLM9hzcjbdr1c2XCGFY12qU+ebXl51szN88OL5OHS0AlgebATAkcdqXjw6ckYYM7QfahzRPbRReEnovt/vNw5lEmM+Y0zjMd22vJvfmaE59h6h6M1LdblctSdPz8GFRXz0d6SjNFowHU4jkxcKtofwigcRjZOI7VPN3Iwyqn+1ClvyVln79/6m5X8gzSqL70Xc5gP4+4Gv+TaMCzzRP+ISZN2vzlxwt6J0WbU5tIw/ex9MZeG0U66G0FZRw2KoKV7GdDTGps84uDBG/a0XHT7YIgdCFoa5CwKhiiAIb4K4OtyX0nK5TI1L2+b+QZHyHASEi6cSM/46AMDQgiBFsOKx3wFeDdqNheU3zEu58CqqVP/YqFhxRrvC8qXjRpd8YDcSo2oC8jM9LyyIw92RpwdidVnmfeWRNeFF0NHIvrL+p3pOuxMwY8GNsHBH9aQ4ob/LZpvsXW8CCBzoKuEMHChMQtVVXmoqZmIQCBihdF7uTSnUaMqIDch+n+rS7OSsyo5uwrVekfXAzfthznL+iTbNWNYcipzz4qvFOS/8lJ6elXk0tAS6HS7q9cnuesXRl0aRjEs+aZHcsq5iqamjCnBgC0uPG8dnS5UVPwNzp6dCDluojV5VnF63nYkJ9X1/tnlulApzcpiiCAEhGHBn7xzsTrmmFi8PDnR3vLi3IL1N9CwYpvLfFd806aiopec8n3B/q13Jw9QP9hZ5p1sAFuKi9eM6X+oU/YfOqAnExnxTuJleMK/udX92Zb21JUdbYkz5aJWpfn9drS2pcDf5exjVA5Hm7kTGK0lod1cVobXxP6/zErGdy0ZFkp99uwRR56bNvWt252OyJqkw9l6zu2uemr1de2PRiy/YhiWfDXN73c66+pGFxhyFtWvyZJC7bkc1NWNhfx/eSZM7gJ6PCfNem/vbM8QIjGx4ajbffqIaVbd7VBHOn66ejz6vpbR/0Pufnb07Dl/3knDivXUDvAisbyk53WdqiEd7Fz0TCL8tj/m5u68IXwHMhRCb58DnelScZkBNAveRu7Mo/GH98dl4SySoGpcKh9rQwBTUQP56o2l5xUkOcAm1QBffO+Tn1mFYr6mDEve9N3Pjp4y/c03c8a+mxNtaZiQ2PB+hrv6u75if9+X6QcwLKejpa6mJreyszNuYWippzImQhqLxd+R6q45lJRY3/1Wtfk+N97zJ+JR1deHispvzKNhxaTeXXMaN/bQovB3AKU89EJ0nLOlSQx1J29B+TJP5okH+u9Ahr+eEPEC6FBGhoK27dsQW2YChz128yWZj+BGe+QXp0JP3RI5o5qMWmShyTxjFWrxXUDxEWCG+hl95c8civCaMywA8fc/duus6dv/2+2u7lN7ktwMS7DLnVqzITmtrrTP0nAQw5IvP7e3JE1sbnEvaW1NmQRhDDpNNwwRcLkaKt3u6iNWa6D7/SwBISzY50/Ak6pmFcr3oB9Ytge3wID8SZU+LeohL8VRdNf7SLO241FDYFTEJcP5eZmeTq5ErGW7MBlW/AQGkqLdniHwircIPsVbN2Wle5FhAI8CGHG5+hzK54vS7ulPpQfYMQVoSAA6YMMFuFAPFxrhQhvspomFdgDNgQ5hnqeS/6WhFfI1m1S0RuwoWgUwqRr43Ie4Iq//DOVew7ULS/EvAOT7bH3H8sf5eZnQ2NuP+SKA7xoG+h7UFWge8OdlQtfvxf2XO7ZF+zAtEMRDMPrtkly6+x3euYg4UFq6Bz8zDEwLhyQEOkO/1lC6FzcH/LYFrW2pY1ta3GP8fkdSMGDtrhkYQtisXS0OR9v5hIQLZ+LimxrCln9S0Y4gXvIW4bfDOa5Dwxpk9AsBo2yvmdTpUQZ6bxKH+hCV7sVPDSA/os9oP1Ez1M4Hu6cewwrJalKBvROBM26gyzr8D5MzqimngfxKwPUJnbEaSrTXmmFJNmW78Y/CwK2G0XP2pC+wLgRR7ivGxvB/HsywpPaf98NjD2IxBOYYhlJBNCCAg10WPP1CAYZ9UnlQwxrKgKD26iAQmmFFmKUB1CUBJzIBaWKNLqDD3m1iwX4jRf7SgiMAuC8CsqA+/mz3gVCdm1Gu9GDpfAvaxbZwB0bBiZtEECUCcIdmmELu/gEXBVAFAzv87djS+xtXH+MuaFgfA97Vemksw7pa70c1bhqWKil9dTQsfXNzxSKjYV0xtOz4ChOgYV1hwDp2T8PSMSuMSYUADUuFEjUkQAJaEKBhaZEGBkECJKBCgIalQokaEiABLQjQsLRIA4MgARJQIUDDUqFEDQmQgBYEaFhapIFBkAAJqBCgYalQooYESEALAjQsLdLAIEiABFQI0LBUKFFDAiSgBQEalhZpYBAkQAIqBGhYKpSoIQES0IIADUuLNDAIEiABFQI0LBVK1JAACWhBgIalRRoYBAmQgAoBGpYKJWpIgAS0IEDD0iINDIIESECFAA1LhRI1JEACWhCgYWmRBgZBAiSgQoCGpUKJGhIgAS0I0LC0SAODIAESUCFAw1KhRA0JkIAWBGhYWqSBQZAACagQoGGpUKKGBEhACwI0LC3SwCBIgARUCNCwVChRQwIkoAUBGpYWaWAQJEACKgRoWCqUqCEBEtCCAA1LizQwCBIgARUCNCwVStSQAAloQYCGpUUaGAQJkIAKARqWCiVqSIAEtCBAw9IiDQyCBEhAhQANS4USNSRAAloQoGFpkQYGQQIkoEKAhqVCiRoSIAEtCNCwtEgDgyABElAhQMNSoUQNCZCAFgRoWFqkgUGQAAmoEKBhqVCihgRIQAsCNCwt0sAgSIAEVAjQsFQoUUMCJKAFARqWFmlgECRAAioEaFgqlKghARLQggANS4s0MAgSIAEVAjQsFUrUkAAJaEGAhqVFGhgECZCACgEalgolakiABLQgQMPSIg0MggRIQIUADUuFEjUkQAJaEKBhaZEGBkECJKBCgIalQokaEiABLQjQsLRIA4MgARJQIUDDUqFEDQmQgBYEaFhapIFBkAAJqBCgYalQooYESEALAjQsLdLAIEiABFQI0LBUKFFDAiSgBQEalhZpYBAkQAIqBGhYKpSoIQES0IIADUuLNDAIEiABFQI0LBVK1JAACWhBgIalRRoYBAmQgAoBGpYKJWpIgAS0IEDD0iINDIIESECFAA1LhRI1JEACWhCgYWmRBgZBAiSgQoCGpUKJGhIgAS0I0LC0SAODIAESUCFAw1KhRA0JkIAWBGhYWqSBQZAACagQoGGpUKKGBEhACwI0LC3SwCBIgARUCNCwVChRQwIkoAUBGpYWaWAQJEACKgRoWCqUqCEBEtCCAA1LizQwCBIgARUCNCwVStSQAAloQYCGpUUaGAQJkIAKARqWCiVqSIAEtCBAw9IiDQyCBEhAhQANS4USNSRAAloQoGFpkQYGQQIkoEKAhqVCiRoSIAEtCNCwtEgDgyABElAhQMNSoUQNCZCAFgRoWFqkgUGQAAmoEKBhqVCihgRIQAsCNCwt0sAgSIAEVAjQsFQoUUMCJKAFARqWFmlgECRAAioEaFgqlKghARLQggANS4s0MAgSIAEVAjQsFUrUkAAJaEGAhqVFGhgECZCACgEalgolakiABLQgQMPSIg0MggRIQIUADUuFEjUkQAJaEKBhaZEGBkECJKBCgIalQokaEiABLQjQsLRIA4MgARJQIUDDUqFEDQmQgBYEaFhapIFBkAAJqBCgYalQooYESEALAjQsLdLAIEiABFQI0LBUKFFDAiSgBQEalhZpYBAkQAIqBGhYKpSoIQES0IIADUuLNDAIEiABFQI0LBVK1JAACWhBgIalRRoYBAmQgAoBGpYKJWpIgAS0IEDD0iINDIIESECFAA1LhRI1JEACWhCgYWmRBgZBAiSgQoCGpUKJGhIgAS0I0LC0SAODIAESUCFAw1KhRA0JkIAWBGhYWqSBQZAACagQoGGpUKKGBEhACwI0LC3SwCBIgARUCNCwVChRQwIkoAUBGpYWaWAQJEACKgRoWCqUqCEBEtCCAA1LizQwCBIgARUCNCwVStSQAAloQYCGpUUaGAQJkIAKARqWCiVqSIAEtCBAw9IiDQyCBEhAhQANS4USNSRAAloQ+D8Z5wq6+kVkigAAAABJRU5ErkJggg==###ActiveBorder:rgb(255, 255, 255):ActiveCaption:rgb(204, 204, 204):AppWorkspace:rgb(255, 255, 255):Background:rgb(99, 99, 206):ButtonFace:rgb(221, 221, 221):ButtonHighlight:rgb(221, 221, 221):ButtonShadow:rgb(136, 136, 136):ButtonText:rgb(0, 0, 0):CaptionText:rgb(0, 0, 0):GrayText:rgb(128, 128, 128):Highlight:rgb(181, 213, 255):HighlightText:rgb(0, 0, 0):InactiveBorder:rgb(255, 255, 255):InactiveCaption:rgb(255, 255, 255):InactiveCaptionText:rgb(127, 127, 127):InfoBackground:rgb(251, 252, 197):InfoText:rgb(0, 0, 0):Menu:rgb(247, 247, 247):MenuText:rgb(0, 0, 0):Scrollbar:rgb(255, 255, 255):ThreeDDarkShadow:rgb(102, 102, 102):ThreeDFace:rgb(192, 192, 192):ThreeDHighlight:rgb(221, 221, 221):ThreeDLightShadow:rgb(192, 192, 192):ThreeDShadow:rgb(136, 136, 136):Window:rgb(255, 255, 255):WindowFrame:rgb(204, 204, 204):WindowText:rgb(0, 0, 0)" 2 | 3 | 4 | o = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36###zh-CN###24###864x1536###-480######Chrome PDF Plugin::Portable Document Format::application/x-google-chrome-pdf~pdf$Chrome PDF Viewer::::application/pdf~pdf$Native Client::::application/x-nacl~,application/x-pnacl~;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;" 5 | 6 | w = "{'v':'v1.1','fp':'18746497805452,32690818154358','u':'Dlp1570420186524Ovw','h':'dl.reg.163.com'}" -------------------------------------------------------------------------------- /SHA1/e商.js: -------------------------------------------------------------------------------- 1 | // http://xayrtx.cn/ebtouch/ 2 | 3 | var hexcase = 1; 4 | /* hex output format. 0 - lowercase; 1 - uppercase */ 5 | var b64pad = ""; 6 | /* base-64 pad character. "=" for strict RFC compliance */ 7 | var chrsz = 8; 8 | /* bits per input character. 8 - ASCII; 16 - Unicode */ 9 | 10 | /* 11 | * These are the functions you'll usually want to call 12 | * They take string arguments and return either hex or base-64 encoded strings 13 | */ 14 | function hex_sha1(s) { 15 | return binb2hex(core_sha1(str2binb(s), s.length * chrsz)); 16 | } 17 | function b64_sha1(s) { 18 | return binb2b64(core_sha1(str2binb(s), s.length * chrsz)); 19 | } 20 | function str_sha1(s) { 21 | return binb2str(core_sha1(str2binb(s), s.length * chrsz)); 22 | } 23 | function hex_hmac_sha1(key, data) { 24 | return binb2hex(core_hmac_sha1(key, data)); 25 | } 26 | function b64_hmac_sha1(key, data) { 27 | return binb2b64(core_hmac_sha1(key, data)); 28 | } 29 | function str_hmac_sha1(key, data) { 30 | return binb2str(core_hmac_sha1(key, data)); 31 | } 32 | 33 | /* 34 | * Perform a simple self-test to see if the VM is working 35 | */ 36 | function sha1_vm_test() { 37 | return hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d"; 38 | } 39 | 40 | /* 41 | * Calculate the SHA-1 of an array of big-endian words, and a bit length 42 | */ 43 | function core_sha1(x, len) { 44 | /* append padding */ 45 | x[len >> 5] |= 0x80 << (24 - len % 32); 46 | x[((len + 64 >> 9) << 4) + 15] = len; 47 | 48 | var w = Array(80); 49 | var a = 1732584193; 50 | var b = -271733879; 51 | var c = -1732584194; 52 | var d = 271733878; 53 | var e = -1009589776; 54 | 55 | for (var i = 0; i < x.length; i += 16) { 56 | var olda = a; 57 | var oldb = b; 58 | var oldc = c; 59 | var oldd = d; 60 | var olde = e; 61 | 62 | for (var j = 0; j < 80; j++) { 63 | if (j < 16) 64 | w[j] = x[i + j]; 65 | else 66 | w[j] = rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1); 67 | var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)), safe_add(safe_add(e, w[j]), sha1_kt(j))); 68 | e = d; 69 | d = c; 70 | c = rol(b, 30); 71 | b = a; 72 | a = t; 73 | } 74 | 75 | a = safe_add(a, olda); 76 | b = safe_add(b, oldb); 77 | c = safe_add(c, oldc); 78 | d = safe_add(d, oldd); 79 | e = safe_add(e, olde); 80 | } 81 | return Array(a, b, c, d, e); 82 | 83 | } 84 | 85 | /* 86 | * Perform the appropriate triplet combination function for the current 87 | * iteration 88 | */ 89 | function sha1_ft(t, b, c, d) { 90 | if (t < 20) 91 | return (b & c) | ((~b) & d); 92 | if (t < 40) 93 | return b ^ c ^ d; 94 | if (t < 60) 95 | return (b & c) | (b & d) | (c & d); 96 | return b ^ c ^ d; 97 | } 98 | 99 | /* 100 | * Determine the appropriate additive constant for the current iteration 101 | */ 102 | function sha1_kt(t) { 103 | return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 : (t < 60) ? -1894007588 : -899497514; 104 | } 105 | 106 | /* 107 | * Calculate the HMAC-SHA1 of a key and some data 108 | */ 109 | function core_hmac_sha1(key, data) { 110 | var bkey = str2binb(key); 111 | if (bkey.length > 16) 112 | bkey = core_sha1(bkey, key.length * chrsz); 113 | 114 | var ipad = Array(16) 115 | , opad = Array(16); 116 | for (var i = 0; i < 16; i++) { 117 | ipad[i] = bkey[i] ^ 0x36363636; 118 | opad[i] = bkey[i] ^ 0x5C5C5C5C; 119 | } 120 | 121 | var hash = core_sha1(ipad.concat(str2binb(data)), 512 + data.length * chrsz); 122 | return core_sha1(opad.concat(hash), 512 + 160); 123 | } 124 | 125 | /* 126 | * Add integers, wrapping at 2^32. This uses 16-bit operations internally 127 | * to work around bugs in some JS interpreters. 128 | */ 129 | function safe_add(x, y) { 130 | var lsw = (x & 0xFFFF) + (y & 0xFFFF); 131 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 132 | return (msw << 16) | (lsw & 0xFFFF); 133 | } 134 | 135 | /* 136 | * Bitwise rotate a 32-bit number to the left. 137 | */ 138 | function rol(num, cnt) { 139 | return (num << cnt) | (num >>> (32 - cnt)); 140 | } 141 | 142 | /* 143 | * Convert an 8-bit or 16-bit string to an array of big-endian words 144 | * In 8-bit function, characters >255 have their hi-byte silently ignored. 145 | */ 146 | function str2binb(str) { 147 | var bin = Array(); 148 | var mask = (1 << chrsz) - 1; 149 | for (var i = 0; i < str.length * chrsz; i += chrsz) 150 | bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i % 32); 151 | return bin; 152 | } 153 | 154 | /* 155 | * Convert an array of big-endian words to a string 156 | */ 157 | function binb2str(bin) { 158 | var str = ""; 159 | var mask = (1 << chrsz) - 1; 160 | for (var i = 0; i < bin.length * 32; i += chrsz) 161 | str += String.fromCharCode((bin[i >> 5] >>> (24 - i % 32)) & mask); 162 | return str; 163 | } 164 | 165 | /* 166 | * Convert an array of big-endian words to a hex string. 167 | */ 168 | function binb2hex(binarray) { 169 | var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; 170 | var str = ""; 171 | for (var i = 0; i < binarray.length * 4; i++) { 172 | str += hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((3 - i % 4) * 8)) & 0xF); 173 | } 174 | return str; 175 | } 176 | 177 | /* 178 | * Convert an array of big-endian words to a base-64 string 179 | */ 180 | function binb2b64(binarray) { 181 | var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 182 | var str = ""; 183 | for (var i = 0; i < binarray.length * 4; i += 3) { 184 | var triplet = (((binarray[i >> 2] >> 8 * (3 - i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * (3 - (i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * (3 - (i + 2) % 4)) & 0xFF); 185 | for (var j = 0; j < 4; j++) { 186 | if (i * 8 + j * 6 > binarray.length * 32) 187 | str += b64pad; 188 | else 189 | str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F); 190 | } 191 | } 192 | return str; 193 | } 194 | var bDebug; 195 | try { 196 | execScript('\nfunction StrConv(v)\ndim i, n, s, s2, c, nc\nn =LenB(v): i =1: s =""\ndo while i<= n\nc =MidB(v, i, 1)\nnc =AscB(c)\nif nc >128 then\ni =i +1\nc =MidB(v, i, 1)\nnc =nc*256 +AscB(c)\nend if\nc =Chr(nc)\ns = s & c\ni =i +1\nloop\nStrConv =s\nend function\n\nFunction IsVBDate(v)\nIsVBDate =IsDate(v)\nEnd Function\n\nFunction vbTrim(v)\nvbTrim =Trim(v)\nEnd Function\n', 'VBScript'); 197 | } catch (e) {} 198 | function http_Get(szUrl, strType) { 199 | var ohttp = new ActiveXObject('Microsoft.xmlhttp') 200 | , strText = '' 201 | , isTest = 0; 202 | try { 203 | isTest = new ActiveXObject("NetBox"); 204 | isTest = 1 205 | } catch (e) {} 206 | if (isTest) { 207 | ohttp.open("GET", "/XMLHttp.asp?url=" + szUrl, false); 208 | } else { 209 | ohttp.open("GET", szUrl, false); 210 | } 211 | ohttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 212 | ohttp.send(); 213 | strType = validInt(strType); 214 | if (strType) 215 | strText = StrConv(ohttp.responseBody); 216 | else 217 | strText = ohttp.responseText; 218 | if (ohttp.status == 200) 219 | return (strText); 220 | return (parseError2(strText)); 221 | } 222 | function http_POST(szUrl, strData, strType) { 223 | var ohttp = new ActiveXObject('Microsoft.xmlhttp') 224 | , strText = ''; 225 | ohttp.open("POST", "/XMLHttp.asp?url=" + szUrl, false); 226 | ohttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 227 | ohttp.send(strData); 228 | strType = validInt(strType); 229 | if (strType) 230 | strText = StrConv(ohttp.responseBody); 231 | else 232 | strText = ohttp.responseText; 233 | if (ohttp.status == 200) 234 | return (strText); 235 | return (parseError2(strText)); 236 | } 237 | function parseError2(strData) { 238 | if (strData.length == 0) 239 | return (strData); 240 | var n, a = strData.split("
");
241 | n = a[1].length;
242 | s = a[2].substr(0, a[2].length - 2);
243 | if (bDebug == 0)
244 | alert(s);
245 | s = "Err.Number=" + parseInt(a[1].substr(n - 7, 4), 16) + "\nErr.Description=" + s + "\nErr.Source=" + a[1].substr(0, n - 13);
246 | n = a[3].indexOf(", line ");
247 | s += "\nErr.ASPFile=" + a[3].substr(0, n);
248 | s += "\nErr.ASPLine=" + parseInt(a[3].substr(n + 7));
249 | if (bDebug == 1)
250 | alert(s);
251 | return (s);
252 | }
253 |
254 | function test(pwd){
255 | var random = '4B93E772AE273FE03784AEFF3339C72CE41A48DE5BD79D8E49D6DABF8401435DA5B59A347EBD2407331D5BED3CD96FE506663766EA96AE822E905423F8B0B4769DE17DC4AC59D0CCDAFB1764CA7C85ABB15FB8C47DD0AF0BBFA901E83CE2FD98A9441A4C812B8E08BC6456134E647D0D15611777CA124EFAC186B787B843A1DF40B0E95FE24CEB1D9E154AF8B2AFAEAA34328BF20EA50CBEADEBF7A0B5F42B3C185E0744A0BEAE3115B405ED0FAE1B136AB21D9D0E485249456D0AB3AE6D4C86BDC0305C88104EFFDD3C41883305DC75B74B92F94702CD9C0AD3180E22D87784B55DA80EE15B2702DD45895DBEC0B701424040C3AD17583FE56634807108D1CF';
256 | var SharedKey = hex_sha1(pwd);
257 | var password = hex_sha1(SharedKey + random);
258 | return password
259 | }
260 |
261 | console.log(test('88888888'))
262 |
263 |
--------------------------------------------------------------------------------
/DES/融金所.js:
--------------------------------------------------------------------------------
1 | // https://weixin.tjinsuo.com/#login/mine
2 |
3 | var des_createKeys = function(e) {
4 | var t = new Array(0,4,536870912,536870916,65536,65540,536936448,536936452,512,516,536871424,536871428,66048,66052,536936960,536936964)
5 | , s = new Array(0,1,1048576,1048577,67108864,67108865,68157440,68157441,256,257,1048832,1048833,67109120,67109121,68157696,68157697)
6 | , a = new Array(0,8,2048,2056,16777216,16777224,16779264,16779272,0,8,2048,2056,16777216,16777224,16779264,16779272)
7 | , i = new Array(0,2097152,134217728,136314880,8192,2105344,134225920,136323072,131072,2228224,134348800,136445952,139264,2236416,134356992,136454144)
8 | , n = new Array(0,262144,16,262160,0,262144,16,262160,4096,266240,4112,266256,4096,266240,4112,266256)
9 | , r = new Array(0,1024,32,1056,0,1024,32,1056,33554432,33555456,33554464,33555488,33554432,33555456,33554464,33555488)
10 | , o = new Array(0,268435456,524288,268959744,2,268435458,524290,268959746,0,268435456,524288,268959744,2,268435458,524290,268959746)
11 | , l = new Array(0,65536,2048,67584,536870912,536936448,536872960,536938496,131072,196608,133120,198656,537001984,537067520,537004032,537069568)
12 | , p = new Array(0,262144,0,262144,2,262146,2,262146,33554432,33816576,33554432,33816576,33554434,33816578,33554434,33816578)
13 | , d = new Array(0,268435456,8,268435464,0,268435456,8,268435464,1024,268436480,1032,268436488,1024,268436480,1032,268436488)
14 | , u = new Array(0,32,0,32,1048576,1048608,1048576,1048608,8192,8224,8192,8224,1056768,1056800,1056768,1056800)
15 | , c = new Array(0,16777216,512,16777728,2097152,18874368,2097664,18874880,67108864,83886080,67109376,83886592,69206016,85983232,69206528,85983744)
16 | , h = new Array(0,4096,134217728,134221824,524288,528384,134742016,134746112,16,4112,134217744,134221840,524304,528400,134742032,134746128)
17 | , f = new Array(0,4,256,260,0,4,256,260,1,5,257,261,1,5,257,261);
18 | var m = e.length > 8 ? 3 : 1;
19 | var v = new Array(32 * m);
20 | var g = new Array(0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0);
21 | var y, b, w = 0, _ = 0, x;
22 | for (var T = 0; T < m; T++) {
23 | var L = e.charCodeAt(w++) << 24 | e.charCodeAt(w++) << 16 | e.charCodeAt(w++) << 8 | e.charCodeAt(w++);
24 | var C = e.charCodeAt(w++) << 24 | e.charCodeAt(w++) << 16 | e.charCodeAt(w++) << 8 | e.charCodeAt(w++);
25 | x = (L >>> 4 ^ C) & 252645135;
26 | C ^= x;
27 | L ^= x << 4;
28 | x = (C >>> -16 ^ L) & 65535;
29 | L ^= x;
30 | C ^= x << -16;
31 | x = (L >>> 2 ^ C) & 858993459;
32 | C ^= x;
33 | L ^= x << 2;
34 | x = (C >>> -16 ^ L) & 65535;
35 | L ^= x;
36 | C ^= x << -16;
37 | x = (L >>> 1 ^ C) & 1431655765;
38 | C ^= x;
39 | L ^= x << 1;
40 | x = (C >>> 8 ^ L) & 16711935;
41 | L ^= x;
42 | C ^= x << 8;
43 | x = (L >>> 1 ^ C) & 1431655765;
44 | C ^= x;
45 | L ^= x << 1;
46 | x = L << 8 | C >>> 20 & 240;
47 | L = C << 24 | C << 8 & 16711680 | C >>> 8 & 65280 | C >>> 24 & 240;
48 | C = x;
49 | for (var S = 0; S < g.length; S++) {
50 | if (g[S]) {
51 | L = L << 2 | L >>> 26;
52 | C = C << 2 | C >>> 26
53 | } else {
54 | L = L << 1 | L >>> 27;
55 | C = C << 1 | C >>> 27
56 | }
57 | L &= -15;
58 | C &= -15;
59 | y = t[L >>> 28] | s[L >>> 24 & 15] | a[L >>> 20 & 15] | i[L >>> 16 & 15] | n[L >>> 12 & 15] | r[L >>> 8 & 15] | o[L >>> 4 & 15];
60 | b = l[C >>> 28] | p[C >>> 24 & 15] | d[C >>> 20 & 15] | u[C >>> 16 & 15] | c[C >>> 12 & 15] | h[C >>> 8 & 15] | f[C >>> 4 & 15];
61 | x = (b >>> 16 ^ y) & 65535;
62 | v[_++] = y ^ x;
63 | v[_++] = b ^ x << 16
64 | }
65 | }
66 | return v
67 | };
68 |
69 |
70 | var des = function(e, s, a, i, n, r) {
71 | var o = new Array(16843776,0,65536,16843780,16842756,66564,4,65536,1024,16843776,16843780,1024,16778244,16842756,16777216,4,1028,16778240,16778240,66560,66560,16842752,16842752,16778244,65540,16777220,16777220,65540,0,1028,66564,16777216,65536,16843780,4,16842752,16843776,16777216,16777216,1024,16842756,65536,66560,16777220,1024,4,16778244,66564,16843780,65540,16842752,16778244,16777220,1028,66564,16843776,1028,16778240,16778240,0,65540,66560,0,16842756);
72 | var l = new Array(-2146402272,-2147450880,32768,1081376,1048576,32,-2146435040,-2147450848,-2147483616,-2146402272,-2146402304,-2147483648,-2147450880,1048576,32,-2146435040,1081344,1048608,-2147450848,0,-2147483648,32768,1081376,-2146435072,1048608,-2147483616,0,1081344,32800,-2146402304,-2146435072,32800,0,1081376,-2146435040,1048576,-2147450848,-2146435072,-2146402304,32768,-2146435072,-2147450880,32,-2146402272,1081376,32,32768,-2147483648,32800,-2146402304,1048576,-2147483616,1048608,-2147450848,-2147483616,1048608,1081344,0,-2147450880,32800,-2147483648,-2146435040,-2146402272,1081344);
73 | var p = new Array(520,134349312,0,134348808,134218240,0,131592,134218240,131080,134217736,134217736,131072,134349320,131080,134348800,520,134217728,8,134349312,512,131584,134348800,134348808,131592,134218248,131584,131072,134218248,8,134349320,512,134217728,134349312,134217728,131080,520,131072,134349312,134218240,0,512,131080,134349320,134218240,134217736,512,0,134348808,134218248,131072,134217728,134349320,8,131592,131584,134217736,134348800,134218248,520,134348800,131592,8,134348808,131584);
74 | var d = new Array(8396801,8321,8321,128,8396928,8388737,8388609,8193,0,8396800,8396800,8396929,129,0,8388736,8388609,1,8192,8388608,8396801,128,8388608,8193,8320,8388737,1,8320,8388736,8192,8396928,8396929,129,8388736,8388609,8396800,8396929,129,0,0,8396800,8320,8388736,8388737,1,8396801,8321,8321,128,8396929,129,1,8192,8388609,8193,8396928,8388737,8193,8320,8388608,8396801,128,8388608,8192,8396928);
75 | var u = new Array(256,34078976,34078720,1107296512,524288,256,1073741824,34078720,1074266368,524288,33554688,1074266368,1107296512,1107820544,524544,1073741824,33554432,1074266112,1074266112,0,1073742080,1107820800,1107820800,33554688,1107820544,1073742080,0,1107296256,34078976,33554432,1107296256,524544,524288,1107296512,256,33554432,1073741824,34078720,1107296512,1074266368,33554688,1073741824,1107820544,34078976,1074266368,256,33554432,1107820544,1107820800,524544,1107296256,1107820800,34078720,0,1074266112,1107296256,524544,33554688,1073742080,524288,0,1074266112,34078976,1073742080);
76 | var c = new Array(536870928,541065216,16384,541081616,541065216,16,541081616,4194304,536887296,4210704,4194304,536870928,4194320,536887296,536870912,16400,0,4194320,536887312,16384,4210688,536887312,16,541065232,541065232,0,4210704,541081600,16400,4210688,541081600,536870912,536887296,16,541065232,4210688,541081616,4194304,16400,536870928,4194304,536887296,536870912,16400,536870928,541081616,4210688,541065216,4210704,541081600,0,541065232,16,16384,541065216,4210704,16384,4194320,536887312,0,541081600,536870912,4194320,536887312);
77 | var h = new Array(2097152,69206018,67110914,0,2048,67110914,2099202,69208064,69208066,2097152,0,67108866,2,67108864,69206018,2050,67110912,2099202,2097154,67110912,67108866,69206016,69208064,2097154,69206016,2048,2050,69208066,2099200,2,67108864,2099200,67108864,2099200,2097152,67110914,67110914,69206018,69206018,2,2097154,67108864,67110912,2097152,69208064,2050,2099202,69208064,2050,67108866,69208066,69206016,2099200,0,2,69208066,0,2099202,69206016,2048,67108866,67110912,2048,2097154);
78 | var f = new Array(268439616,4096,262144,268701760,268435456,268439616,64,268435456,262208,268697600,268701760,266240,268701696,266304,4096,64,268697600,268435520,268439552,4160,266240,262208,268697664,268701696,4160,0,0,268697664,268435520,268439552,266304,262144,266304,262144,268701696,4096,64,268697664,4096,266304,268439552,64,268435520,268697600,268697664,268435456,262144,268439616,0,268701760,262208,268435520,268697600,268439552,268439616,0,268701760,266240,266240,4160,4160,262208,268435456,268701696);
79 | var m = des_createKeys(e);
80 | var v = 0, g, y, b, w, _, x, T, L, C;
81 | var S, I, P, k;
82 | var A, M;
83 | var D = s.length;
84 | var R = 0;
85 | var N = m.length == 32 ? 3 : 9;
86 | if (N == 3) {
87 | C = a ? new Array(0,32,2) : new Array(30,-2,-2)
88 | } else {
89 | C = a ? new Array(0,32,2,62,30,-2,64,96,2) : new Array(94,62,-2,32,64,2,30,-2,-2)
90 | }
91 | if (r == 2)
92 | s += " ";
93 | else if (r == 1) {
94 | b = 8 - D % 8;
95 | s += String.fromCharCode(b, b, b, b, b, b, b, b);
96 | if (b == 8)
97 | D += 8
98 | } else if (!r)
99 | s += "\x00\x00\x00\x00\x00\x00\x00\x00";
100 | var E = "";
101 | var z = "";
102 | if (i == 1) {
103 | S = n.charCodeAt(v++) << 24 | n.charCodeAt(v++) << 16 | n.charCodeAt(v++) << 8 | n.charCodeAt(v++);
104 | P = n.charCodeAt(v++) << 24 | n.charCodeAt(v++) << 16 | n.charCodeAt(v++) << 8 | n.charCodeAt(v++);
105 | v = 0
106 | }
107 | while (v < D) {
108 | T = s.charCodeAt(v++) << 24 | s.charCodeAt(v++) << 16 | s.charCodeAt(v++) << 8 | s.charCodeAt(v++);
109 | L = s.charCodeAt(v++) << 24 | s.charCodeAt(v++) << 16 | s.charCodeAt(v++) << 8 | s.charCodeAt(v++);
110 | if (i == 1) {
111 | if (a) {
112 | T ^= S;
113 | L ^= P
114 | } else {
115 | I = S;
116 | k = P;
117 | S = T;
118 | P = L
119 | }
120 | }
121 | b = (T >>> 4 ^ L) & 252645135;
122 | L ^= b;
123 | T ^= b << 4;
124 | b = (T >>> 16 ^ L) & 65535;
125 | L ^= b;
126 | T ^= b << 16;
127 | b = (L >>> 2 ^ T) & 858993459;
128 | T ^= b;
129 | L ^= b << 2;
130 | b = (L >>> 8 ^ T) & 16711935;
131 | T ^= b;
132 | L ^= b << 8;
133 | b = (T >>> 1 ^ L) & 1431655765;
134 | L ^= b;
135 | T ^= b << 1;
136 | T = T << 1 | T >>> 31;
137 | L = L << 1 | L >>> 31;
138 | for (y = 0; y < N; y += 3) {
139 | A = C[y + 1];
140 | M = C[y + 2];
141 | for (g = C[y]; g != A; g += M) {
142 | _ = L ^ m[g];
143 | x = (L >>> 4 | L << 28) ^ m[g + 1];
144 | b = T;
145 | T = L;
146 | L = b ^ (l[_ >>> 24 & 63] | d[_ >>> 16 & 63] | c[_ >>> 8 & 63] | f[_ & 63] | o[x >>> 24 & 63] | p[x >>> 16 & 63] | u[x >>> 8 & 63] | h[x & 63])
147 | }
148 | b = T;
149 | T = L;
150 | L = b
151 | }
152 | T = T >>> 1 | T << 31;
153 | L = L >>> 1 | L << 31;
154 | b = (T >>> 1 ^ L) & 1431655765;
155 | L ^= b;
156 | T ^= b << 1;
157 | b = (L >>> 8 ^ T) & 16711935;
158 | T ^= b;
159 | L ^= b << 8;
160 | b = (L >>> 2 ^ T) & 858993459;
161 |
162 | T ^= b;
163 | L ^= b << 2;
164 | b = (T >>> 16 ^ L) & 65535;
165 | L ^= b;
166 | T ^= b << 16;
167 | b = (T >>> 4 ^ L) & 252645135;
168 | L ^= b;
169 | T ^= b << 4;
170 | if (i == 1) {
171 | if (a) {
172 | S = T;
173 | P = L
174 | } else {
175 | T ^= I;
176 | L ^= k
177 | }
178 | }
179 | z += String.fromCharCode(T >>> 24, T >>> 16 & 255, T >>> 8 & 255, T & 255, L >>> 24, L >>> 16 & 255, L >>> 8 & 255, L & 255);
180 | R += 8;
181 | if (R == 512) {
182 | E += z;
183 | z = "";
184 | R = 0
185 | }
186 | }
187 | return E + z
188 | }
189 |
190 | var stringToHexForDES = function(e) {
191 | var t = "0x";
192 | var s = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");
193 | for (var a = 0; a < e.length; a++) {
194 | t += s[e.charCodeAt(a) >> 4] + s[e.charCodeAt(a) & 15]
195 | }
196 | return t
197 | }
198 |
199 | var getRandomString = function(e) {
200 | var t = "";
201 | var s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/-_=";
202 | for (var a = 0; a < e; a++) {
203 | t += s.charAt(Math.floor(Math.random() * s.length))
204 | }
205 | return t
206 | }
207 |
208 | var do_generate = function() {
209 | var e = getRandomString(24);
210 | var generateKey = encodeURI(encodeURI(e));
211 | return generateKey
212 | }
213 | // console.log(do_generate())
214 |
215 | // 加 8 个空格; suffix:后缀
216 | var suffix_8Blank = function(e) {
217 | for (var t = 0; t < 8; t++) {
218 | e += " "
219 | }
220 | return e
221 | }
222 |
223 | var do_encrypt = function(generateKey, pw) {
224 | return stringToHexForDES(des(generateKey, suffix_8Blank(pw), 1, 0))
225 | }
226 |
227 | var generateKey = do_generate();
228 | // generateKey = "2ODksGTW=h+/n17IGQ6G72b9";
229 | var pw = 'a12345678';
230 | console.log(do_encrypt(generateKey, pw));
231 |
232 |
233 |
234 |
--------------------------------------------------------------------------------
/网易易盾JS分析/my_cb.js:
--------------------------------------------------------------------------------
1 | // cb
2 | wy_encode = {}
3 |
4 | function test(e, t) {
5 | function n(e, t) {
6 | function n(e, t) {
7 | return e.charCodeAt(Math.floor(t % e.length))
8 | }
9 | function i(e, t) {
10 | return t.split("").map(function(t, i) {
11 | return t.charCodeAt(0) ^ n(e, i)
12 | })
13 | }
14 | return t = i(e, t),
15 | _(t)
16 | }
17 | wy_encode.trace = n;
18 | __toByte = function(e) {
19 | function t(t) {
20 | return e.apply(this, arguments)
21 | }
22 | return t.toString = function() {
23 | return e.toString()
24 | }
25 | ,
26 | t
27 | }(function(e) {
28 | if (e < -128)
29 | return __toByte(128 - (-128 - e));
30 | if (e >= -128 && e <= 127)
31 | return e;
32 | if (e > 127)
33 | return __toByte(-129 + e - 127);
34 | throw new Error("1001")
35 | });
36 | var i = function(e, t) {
37 | return __toByte(e + t)
38 | }
39 | , r = function(e, t) {
40 | if (null == e)
41 | return null;
42 | if (null == t)
43 | return e;
44 | for (var n = [], r = t.length, o = 0, a = e.length; o < a; o++)
45 | n[o] = i(e[o], t[o % r]);
46 | return n
47 | }
48 | , o = function(e, t) {
49 | return e = __toByte(e),
50 | t = __toByte(t),
51 | __toByte(e ^ t)
52 | }
53 | , a = function(e, t) {
54 | if (null == e || null == t || e.length != t.length)
55 | return e;
56 | for (var n = [], i = e.length, r = 0, a = i; r < a; r++)
57 | n[r] = o(e[r], t[r]);
58 | return n
59 | }
60 | , l = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]
61 | , u = function(e) {
62 | var t = [];
63 | return t.push(l[e >>> 4 & 15]),
64 | t.push(l[15 & e]),
65 | t.join("")
66 | }
67 | , s = function(e) {
68 | var t = e.length;
69 | if (null == e || t < 0)
70 | return new String("");
71 | for (var n = [], i = 0; i < t; i++)
72 | n.push(u(e[i]));
73 | return n.join("")
74 | }
75 | , f = function(e) {
76 | if (null == e || 0 == e.length)
77 | return [];
78 | for (var t = new String(e), n = [], i = t.length / 2, r = 0, o = 0; o < i; o++) {
79 | var a = parseInt(t.charAt(r++), 16) << 4
80 | , l = parseInt(t.charAt(r++), 16);
81 | n[o] = __toByte(a + l)
82 | }
83 | return n
84 | }
85 | , j = function(e) {
86 | if (null == e || void 0 == e)
87 | return e;
88 | for (var t = encodeURIComponent(e), n = [], i = t.length, r = 0; r < i; r++)
89 | if ("%" == t.charAt(r)) {
90 | if (!(r + 2 < i))
91 | throw new Error("1009");
92 | n.push(f(t.charAt(++r) + "" + t.charAt(++r))[0])
93 | } else
94 | n.push(t.charCodeAt(r));
95 | return n
96 | }
97 | , c = function(e) {
98 | var t = [];
99 | return t[0] = e >>> 24 & 255,
100 | t[1] = e >>> 16 & 255,
101 | t[2] = e >>> 8 & 255,
102 | t[3] = 255 & e,
103 | t
104 | }
105 | , d = function(e) {
106 | var t = c(e);
107 | return s(t)
108 | }
109 | , p = function(e, t, n) {
110 | var i = [];
111 | if (null == e || 0 == e.length)
112 | return i;
113 | if (e.length < n)
114 | throw new Error("1003");
115 | for (var r = 0; r < n; r++)
116 | i[r] = e[t + r];
117 | return i
118 | }
119 | , h = function(e, t, n, i, r) {
120 | if (null == e || 0 == e.length)
121 | return n;
122 | if (null == n)
123 | throw new Error("1004");
124 | if (e.length < r)
125 | throw new Error("1003");
126 | for (var o = 0; o < r; o++)
127 | n[i + o] = e[t + o];
128 | return n
129 | }
130 | , y = function(e) {
131 | for (var t = [], n = 0; n < e; n++)
132 | t[n] = 0;
133 | return t
134 | }
135 | , v = function(e) {
136 | return null == e || void 0 == e || "" == e
137 | }
138 | , b = function() {
139 | return ["i", "/", "x", "1", "X", "g", "U", "0", "z", "7", "k", "8", "N", "+", "l", "C", "p", "O", "n", "P", "r", "v", "6", "\\", "q", "u", "2", "G", "j", "9", "H", "R", "c", "w", "T", "Y", "Z", "4", "b", "f", "S", "J", "B", "h", "a", "W", "s", "t", "A", "e", "o", "M", "I", "E", "Q", "5", "m", "D", "d", "V", "F", "L", "K", "y"]
140 | }
141 | , g = function() {
142 | return "3"
143 | }
144 | , m = function(e, t, n) {
145 | var i, r, o, a = b(), l = g(), u = [];
146 | if (1 == n)
147 | i = e[t],
148 | r = 0,
149 | o = 0,
150 | u.push(a[i >>> 2 & 63]),
151 | u.push(a[(i << 4 & 48) + (r >>> 4 & 15)]),
152 | u.push(l),
153 | u.push(l);
154 | else if (2 == n)
155 | i = e[t],
156 | r = e[t + 1],
157 | o = 0,
158 | u.push(a[i >>> 2 & 63]),
159 | u.push(a[(i << 4 & 48) + (r >>> 4 & 15)]),
160 | u.push(a[(r << 2 & 60) + (o >>> 6 & 3)]),
161 | u.push(l);
162 | else {
163 | if (3 != n)
164 | throw new Error("1010");
165 | i = e[t],
166 | r = e[t + 1],
167 | o = e[t + 2],
168 | u.push(a[i >>> 2 & 63]),
169 | u.push(a[(i << 4 & 48) + (r >>> 4 & 15)]),
170 | u.push(a[(r << 2 & 60) + (o >>> 6 & 3)]),
171 | u.push(a[63 & o])
172 | }
173 | return u.join("")
174 | }
175 | , _ = function(e) {
176 | if (null == e || void 0 == e)
177 | return null;
178 | if (0 == e.length)
179 | return "";
180 | var t = 3;
181 | try {
182 | for (var n = [], i = 0; i < e.length; ) {
183 | if (!(i + t <= e.length)) {
184 | n.push(m(e, i, e.length - i));
185 | break
186 | }
187 | n.push(m(e, i, t)),
188 | i += t
189 | }
190 | return n.join("")
191 | } catch (r) {
192 | throw new Error("1010")
193 | }
194 | }
195 | , S = function(e) {
196 | return _(j(e))
197 | }
198 | , T = [0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 936918e3, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 3272380065, 1510334235, 755167117]
199 | , w = function(e) {
200 | var t = 4294967295;
201 | if (null != e)
202 | for (var n = 0; n < e.length; n++) {
203 | var i = e[n];
204 | t = t >>> 8 ^ T[255 & (t ^ i)]
205 | }
206 | return d(4294967295 ^ t, 8)
207 | }
208 | , E = function(e) {
209 | return w(null == e ? [] : j(e))
210 | }
211 | , R = [120, 85, -95, -84, 122, 38, -16, -53, -11, 16, 55, 3, 125, -29, 32, -128, -94, 77, 15, 106, -88, -100, -34, 88, 78, 105, -104, -90, -70, 90, -119, -28, -19, -47, -111, 117, -105, -62, -35, 2, -14, -32, 114, 23, -21, 25, -7, -92, 96, -103, 126, 112, -113, -65, -109, -44, 47, 48, 86, 75, 62, -26, 72, -56, -27, 66, -42, 63, 14, 92, 59, -101, 19, -33, 12, -18, -126, -50, -67, 42, 7, -60, -81, -93, -86, 40, -69, -37, 98, -63, -59, 108, 46, -45, 93, 102, 65, -79, 73, -23, -46, 37, -114, -15, 44, -54, 99, -10, 60, -96, 76, 26, 61, -107, 18, -116, -55, -40, 57, -76, -82, 45, 0, -112, -77, 29, 43, -30, 109, -91, -83, 107, 101, 81, -52, -71, 84, 36, -41, 68, 39, -75, -122, -6, 11, -80, -17, -74, -73, 35, 49, -49, -127, 80, 103, 79, -25, 52, -43, 56, 41, -61, -24, 17, -118, 115, -38, 8, -78, 33, -85, -106, 58, -98, -108, 94, 116, -125, -51, -9, 71, 82, 87, -115, 9, 69, -123, 123, -117, 113, -22, -124, -87, 64, 13, 21, -89, -2, -99, -97, 1, -4, 34, 20, 83, 119, 30, -12, -110, -66, 118, -48, 6, -36, 104, -58, -102, 97, 5, -20, 31, -72, 70, -39, 67, -68, -57, 110, 89, 51, 10, -120, 28, 111, 127, 22, -3, 54, 53, -1, 100, 74, 50, 91, 27, -31, -5, -64, 124, -121, 24, -13, 95, 121, -8, 4]
212 | , k = 4
213 | , C = 4
214 | , X = 4
215 | , O = 4
216 | , $ = function(e) {
217 | var t = [];
218 | if (null == e || void 0 == e || 0 == e.length)
219 | return y(C);
220 | if (e.length >= C)
221 | return p(e, 0, C);
222 | for (var n = 0; n < C; n++)
223 | t[n] = e[n % e.length];
224 | return t
225 | }
226 | , I = function(e) {
227 | if (null == e || void 0 == e || 0 == e.length)
228 | return y(k);
229 | var t = e.length
230 | , n = 0;
231 | n = t % k <= k - X ? k - t % k - X : 2 * k - t % k - X;
232 | var i = [];
233 | h(e, 0, i, 0, t);
234 | for (var r = 0; r < n; r++)
235 | i[t + r] = 0;
236 | var o = c(t);
237 | return h(o, 0, i, t + n, X),
238 | i
239 | }
240 | , x = function(e) {
241 | if (null == e || e.length % k != 0)
242 | throw new Error("1005");
243 | for (var t = [], n = 0, i = e.length / k, r = 0; r < i; r++) {
244 | t[r] = [];
245 | for (var o = 0; o < k; o++)
246 | t[r][o] = e[n++]
247 | }
248 | return t
249 | }
250 | , A = function(e) {
251 | var t = e >>> 4 & 15
252 | , n = 15 & e
253 | , i = 16 * t + n;
254 | return R[i]
255 | }
256 | , N = function(e) {
257 | if (null == e)
258 | return null;
259 | for (var t = [], n = 0, i = e.length; n < i; n++)
260 | t[n] = A(e[n]);
261 | return t
262 | }
263 | , P = function() {
264 | for (var e = [], t = 0; t < O; t++) {
265 | var n = 256 * Math.random();
266 | n = Math.floor(n),
267 | e[t] = __toByte(n)
268 | }
269 | return e
270 | }
271 | , M = function(e, t) {
272 | if (null == e)
273 | return null;
274 | for (var n = __toByte(t), i = [], r = e.length, a = 0; a < r; a++)
275 | i.push(o(e[a], n));
276 | return i
277 | }
278 | , L = function(e, t) {
279 | if (null == e)
280 | return null;
281 | for (var n = __toByte(t), r = [], o = e.length, a = 0; a < o; a++)
282 | r.push(i(e[a], n));
283 | return r
284 | }
285 | , M = function(e, t) {
286 | if (null == e)
287 | return null;
288 | for (var n = __toByte(t), i = [], r = e.length, a = 0; a < r; a++)
289 | i.push(o(e[a], n));
290 | return i
291 | }
292 | , D = function(e) {
293 | var t = M(e, 56)
294 | , n = L(t, -40)
295 | , i = M(n, 103);
296 | return i
297 | }
298 | , Y = function(e, t) {
299 | null == e && (e = []);
300 | var n = P();
301 | t = $(t),
302 | t = a(t, $(n)),
303 | t = $(t);
304 | var i = t
305 | , o = I(e)
306 | , l = x(o)
307 | , u = [];
308 | h(n, 0, u, 0, O);
309 | for (var s = l.length, f = 0; f < s; f++) {
310 | var j = D(l[f])
311 | , c = a(j, t)
312 | , d = r(c, i);
313 | c = a(d, i);
314 | var p = N(c);
315 | p = N(p),
316 | h(p, 0, u, f * k + O, k),
317 | i = p
318 | }
319 | return u
320 | }
321 | , B = function(e) {
322 | var t = "14731382d816714fC59E47De5dA0C871D3F";
323 | if (null == t || void 0 == t)
324 | throw new Error("1008");
325 | null != e && void 0 != e || (e = "");
326 | var n = e + E(e)
327 | , i = j(n)
328 | , r = j(t)
329 | , o = Y(i, r);
330 | return _(o)
331 | };
332 | wy_encode.cp = B,
333 | t.eypt = B,
334 | t.xor_encode = n,
335 | t.toByte = __toByte,
336 | t.str2Bytes = j,
337 | t.arrayCopy = p,
338 | t.arrayCopy2 = h,
339 | t.createEmptyArray = y,
340 | t.isEmptyString = v,
341 | t.base64Encode = S,
342 | t.getStringCRC32 = E,
343 | t.toByte = __toByte
344 | }
345 |
346 |
347 | function uuid(e, t) {
348 | var n = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("")
349 | , a = []
350 | , i = void 0;
351 | if (t = t || n.length,
352 | e)
353 | for (i = 0; i < e; i++)
354 | a[i] = n[0 | Math.random() * t];
355 | else {
356 | var r = void 0;
357 | for (a[8] = a[13] = a[18] = a[23] = "-",
358 | a[14] = "4",
359 | i = 0; i < 36; i++)
360 | a[i] || (r = 0 | 16 * Math.random(),
361 | a[i] = n[19 === i ? 3 & r | 8 : r])
362 | }
363 | return a.join("")
364 | }
365 |
366 |
367 | function my_cb(){
368 | test('', {})
369 | return wy_encode.cp(uuid(32))
370 | }
371 |
372 | console.log(my_cb())
373 |
--------------------------------------------------------------------------------
/RSA/手机京东登录.js:
--------------------------------------------------------------------------------
1 | var CryptoJS = require('crypto-js');
2 |
3 | function CtoH(obj) {
4 | var pos = obj.selectionEnd;
5 | var str = obj.value;
6 | var result = "";
7 | for (var i = 0; i < str.length; i++) {
8 | if (str.charCodeAt(i) == 12288) {
9 | result += String.fromCharCode(str.charCodeAt(i) - 12256);
10 | continue
11 | }
12 | if (str.charCodeAt(i) > 65280 && str.charCodeAt(i) < 65375) {
13 | result += String.fromCharCode(str.charCodeAt(i) - 65248)
14 | } else {
15 | result += String.fromCharCode(str.charCodeAt(i))
16 | }
17 | }
18 | obj.value = result;
19 | obj.setSelectionRange(pos, pos);
20 | return result
21 | }
22 | function BarrettMu(i) {
23 | this.modulus = biCopy(i),
24 | this.k = biHighIndex(this.modulus) + 1;
25 | var t = new BigInt;
26 | t.digits[2 * this.k] = 1,
27 | this.mu = biDivide(t, this.modulus),
28 | this.bkplus1 = new BigInt,
29 | this.bkplus1.digits[this.k + 1] = 1,
30 | this.modulo = BarrettMu_modulo,
31 | this.multiplyMod = BarrettMu_multiplyMod,
32 | this.powMod = BarrettMu_powMod
33 | }
34 | function BarrettMu_modulo(i) {
35 | var t = biDivideByRadixPower(i, this.k - 1)
36 | , r = biMultiply(t, this.mu)
37 | , e = biDivideByRadixPower(r, this.k + 1)
38 | , n = biModuloByRadixPower(i, this.k + 1)
39 | , g = biMultiply(e, this.modulus)
40 | , s = biModuloByRadixPower(g, this.k + 1)
41 | , d = biSubtract(n, s);
42 | d.isNeg && (d = biAdd(d, this.bkplus1));
43 | for (var o = biCompare(d, this.modulus) >= 0; o; )
44 | d = biSubtract(d, this.modulus),
45 | o = biCompare(d, this.modulus) >= 0;
46 | return d
47 | }
48 | function BarrettMu_multiplyMod(i, t) {
49 | var r = biMultiply(i, t);
50 | return this.modulo(r)
51 | }
52 | function BarrettMu_powMod(i, t) {
53 | var r = new BigInt;
54 | r.digits[0] = 1;
55 | for (var e = i, n = t; ; ) {
56 | if (0 != (1 & n.digits[0]) && (r = this.multiplyMod(r, e)),
57 | n = biShiftRight(n, 1),
58 | 0 == n.digits[0] && 0 == biHighIndex(n))
59 | break;
60 | e = this.multiplyMod(e, e)
61 | }
62 | return r
63 | }
64 | function setMaxDigits(i) {
65 | maxDigits = i,
66 | ZERO_ARRAY = new Array(maxDigits);
67 | for (var t = 0; t < ZERO_ARRAY.length; t++)
68 | ZERO_ARRAY[t] = 0;
69 | bigZero = new BigInt,
70 | bigOne = new BigInt,
71 | bigOne.digits[0] = 1
72 | }
73 | function BigInt(i) {
74 | "boolean" == typeof i && 1 == i ? this.digits = null : this.digits = ZERO_ARRAY.slice(0),
75 | this.isNeg = !1
76 | }
77 | function biFromDecimal(i) {
78 | for (var t, r = "-" == i.charAt(0), e = r ? 1 : 0; e < i.length && "0" == i.charAt(e); )
79 | ++e;
80 | if (e == i.length)
81 | t = new BigInt;
82 | else {
83 | var n = i.length - e
84 | , g = n % dpl10;
85 | for (0 == g && (g = dpl10),
86 | t = biFromNumber(Number(i.substr(e, g))),
87 | e += g; e < i.length; )
88 | t = biAdd(biMultiply(t, lr10), biFromNumber(Number(i.substr(e, dpl10)))),
89 | e += dpl10;
90 | t.isNeg = r
91 | }
92 | return t
93 | }
94 | function biCopy(i) {
95 | var t = new BigInt((!0));
96 | return t.digits = i.digits.slice(0),
97 | t.isNeg = i.isNeg,
98 | t
99 | }
100 | function biFromNumber(i) {
101 | var t = new BigInt;
102 | t.isNeg = i < 0,
103 | i = Math.abs(i);
104 | for (var r = 0; i > 0; )
105 | t.digits[r++] = i & maxDigitVal,
106 | i >>= biRadixBits;
107 | return t
108 | }
109 | function reverseStr(i) {
110 | for (var t = "", r = i.length - 1; r > -1; --r)
111 | t += i.charAt(r);
112 | return t
113 | }
114 | function biToString(i, t) {
115 | var r = new BigInt;
116 | r.digits[0] = t;
117 | for (var e = biDivideModulo(i, r), n = hexatrigesimalToChar[e[1].digits[0]]; 1 == biCompare(e[0], bigZero); )
118 | e = biDivideModulo(e[0], r),
119 | digit = e[1].digits[0],
120 | n += hexatrigesimalToChar[e[1].digits[0]];
121 | return (i.isNeg ? "-" : "") + reverseStr(n)
122 | }
123 | function biToDecimal(i) {
124 | var t = new BigInt;
125 | t.digits[0] = 10;
126 | for (var r = biDivideModulo(i, t), e = String(r[1].digits[0]); 1 == biCompare(r[0], bigZero); )
127 | r = biDivideModulo(r[0], t),
128 | e += String(r[1].digits[0]);
129 | return (i.isNeg ? "-" : "") + reverseStr(e)
130 | }
131 | function digitToHex(t) {
132 | var r = 15
133 | , e = "";
134 | for (i = 0; i < 4; ++i)
135 | e += hexToChar[t & r],
136 | t >>>= 4;
137 | return reverseStr(e)
138 | }
139 | function biToHex(i) {
140 | for (var t = "", r = (biHighIndex(i),
141 | biHighIndex(i)); r > -1; --r)
142 | t += digitToHex(i.digits[r]);
143 | return t
144 | }
145 | function charToHex(i) {
146 | var t, r = 48, e = r + 9, n = 97, g = n + 25, s = 65, d = 90;
147 | return t = i >= r && i <= e ? i - r : i >= s && i <= d ? 10 + i - s : i >= n && i <= g ? 10 + i - n : 0
148 | }
149 | function hexToDigit(i) {
150 | for (var t = 0, r = Math.min(i.length, 4), e = 0; e < r; ++e)
151 | t <<= 4,
152 | t |= charToHex(i.charCodeAt(e));
153 | return t
154 | }
155 | function biFromHex(i) {
156 | for (var t = new BigInt, r = i.length, e = r, n = 0; e > 0; e -= 4,
157 | ++n)
158 | t.digits[n] = hexToDigit(i.substr(Math.max(e - 4, 0), Math.min(e, 4)));
159 | return t
160 | }
161 | function biFromString(i, t) {
162 | var r = "-" == i.charAt(0)
163 | , e = r ? 1 : 0
164 | , n = new BigInt
165 | , g = new BigInt;
166 | g.digits[0] = 1;
167 | for (var s = i.length - 1; s >= e; s--) {
168 | var d = i.charCodeAt(s)
169 | , o = charToHex(d)
170 | , a = biMultiplyDigit(g, o);
171 | n = biAdd(n, a),
172 | g = biMultiplyDigit(g, t)
173 | }
174 | return n.isNeg = r,
175 | n
176 | }
177 | function biToBytes(i) {
178 | for (var t = "", r = biHighIndex(i); r > -1; --r)
179 | t += digitToBytes(i.digits[r]);
180 | return t
181 | }
182 | function digitToBytes(i) {
183 | var t = String.fromCharCode(255 & i);
184 | i >>>= 8;
185 | var r = String.fromCharCode(255 & i);
186 | return r + t
187 | }
188 | function biDump(i) {
189 | return (i.isNeg ? "-" : "") + i.digits.join(" ")
190 | }
191 | function biAdd(i, t) {
192 | var r;
193 | if (i.isNeg != t.isNeg)
194 | t.isNeg = !t.isNeg,
195 | r = biSubtract(i, t),
196 | t.isNeg = !t.isNeg;
197 | else {
198 | r = new BigInt;
199 | for (var e, n = 0, g = 0; g < i.digits.length; ++g)
200 | e = i.digits[g] + t.digits[g] + n,
201 | r.digits[g] = 65535 & e,
202 | n = Number(e >= biRadix);
203 | r.isNeg = i.isNeg
204 | }
205 | return r
206 | }
207 | function biSubtract(i, t) {
208 | var r;
209 | if (i.isNeg != t.isNeg)
210 | t.isNeg = !t.isNeg,
211 | r = biAdd(i, t),
212 | t.isNeg = !t.isNeg;
213 | else {
214 | r = new BigInt;
215 | var e, n;
216 | n = 0;
217 | for (var g = 0; g < i.digits.length; ++g)
218 | e = i.digits[g] - t.digits[g] + n,
219 | r.digits[g] = 65535 & e,
220 | r.digits[g] < 0 && (r.digits[g] += biRadix),
221 | n = 0 - Number(e < 0);
222 | if (n == -1) {
223 | n = 0;
224 | for (var g = 0; g < i.digits.length; ++g)
225 | e = 0 - r.digits[g] + n,
226 | r.digits[g] = 65535 & e,
227 | r.digits[g] < 0 && (r.digits[g] += biRadix),
228 | n = 0 - Number(e < 0);
229 | r.isNeg = !i.isNeg
230 | } else
231 | r.isNeg = i.isNeg
232 | }
233 | return r
234 | }
235 | function biHighIndex(i) {
236 | for (var t = i.digits.length - 1; t > 0 && 0 == i.digits[t]; )
237 | --t;
238 | return t
239 | }
240 | function biNumBits(i) {
241 | var t, r = biHighIndex(i), e = i.digits[r], n = (r + 1) * bitsPerDigit;
242 | for (t = n; t > n - bitsPerDigit && 0 == (32768 & e); --t)
243 | e <<= 1;
244 | return t
245 | }
246 | function biMultiply(i, t) {
247 | for (var r, e, n, g = new BigInt, s = biHighIndex(i), d = biHighIndex(t), o = 0; o <= d; ++o) {
248 | for (r = 0,
249 | n = o,
250 | j = 0; j <= s; ++j,
251 | ++n)
252 | e = g.digits[n] + i.digits[j] * t.digits[o] + r,
253 | g.digits[n] = e & maxDigitVal,
254 | r = e >>> biRadixBits;
255 | g.digits[o + s + 1] = r
256 | }
257 | return g.isNeg = i.isNeg != t.isNeg,
258 | g
259 | }
260 | function biMultiplyDigit(i, t) {
261 | var r, e, n;
262 | result = new BigInt,
263 | r = biHighIndex(i),
264 | e = 0;
265 | for (var g = 0; g <= r; ++g)
266 | n = result.digits[g] + i.digits[g] * t + e,
267 | result.digits[g] = n & maxDigitVal,
268 | e = n >>> biRadixBits;
269 | return result.digits[1 + r] = e,
270 | result
271 | }
272 | function arrayCopy(i, t, r, e, n) {
273 | for (var g = Math.min(t + n, i.length), s = t, d = e; s < g; ++s,
274 | ++d)
275 | r[d] = i[s]
276 | }
277 | function biShiftLeft(i, t) {
278 | var r = Math.floor(t / bitsPerDigit)
279 | , e = new BigInt;
280 | arrayCopy(i.digits, 0, e.digits, r, e.digits.length - r);
281 | for (var n = t % bitsPerDigit, g = bitsPerDigit - n, s = e.digits.length - 1, d = s - 1; s > 0; --s,
282 | --d)
283 | e.digits[s] = e.digits[s] << n & maxDigitVal | (e.digits[d] & highBitMasks[n]) >>> g;
284 | return e.digits[0] = e.digits[s] << n & maxDigitVal,
285 | e.isNeg = i.isNeg,
286 | e
287 | }
288 | function biShiftRight(i, t) {
289 | var r = Math.floor(t / bitsPerDigit)
290 | , e = new BigInt;
291 | arrayCopy(i.digits, r, e.digits, 0, i.digits.length - r);
292 | for (var n = t % bitsPerDigit, g = bitsPerDigit - n, s = 0, d = s + 1; s < e.digits.length - 1; ++s,
293 | ++d)
294 | e.digits[s] = e.digits[s] >>> n | (e.digits[d] & lowBitMasks[n]) << g;
295 | return e.digits[e.digits.length - 1] >>>= n,
296 | e.isNeg = i.isNeg,
297 | e
298 | }
299 | function biMultiplyByRadixPower(i, t) {
300 | var r = new BigInt;
301 | return arrayCopy(i.digits, 0, r.digits, t, r.digits.length - t),
302 | r
303 | }
304 | function biDivideByRadixPower(i, t) {
305 | var r = new BigInt;
306 | return arrayCopy(i.digits, t, r.digits, 0, r.digits.length - t),
307 | r
308 | }
309 | function biModuloByRadixPower(i, t) {
310 | var r = new BigInt;
311 | return arrayCopy(i.digits, 0, r.digits, 0, t),
312 | r
313 | }
314 | function biCompare(i, t) {
315 | if (i.isNeg != t.isNeg)
316 | return 1 - 2 * Number(i.isNeg);
317 | for (var r = i.digits.length - 1; r >= 0; --r)
318 | if (i.digits[r] != t.digits[r])
319 | return i.isNeg ? 1 - 2 * Number(i.digits[r] > t.digits[r]) : 1 - 2 * Number(i.digits[r] < t.digits[r]);
320 | return 0
321 | }
322 | function biDivideModulo(i, t) {
323 | var r, e, n = biNumBits(i), g = biNumBits(t), s = t.isNeg;
324 | if (n < g)
325 | return i.isNeg ? (r = biCopy(bigOne),
326 | r.isNeg = !t.isNeg,
327 | i.isNeg = !1,
328 | t.isNeg = !1,
329 | e = biSubtract(t, i),
330 | i.isNeg = !0,
331 | t.isNeg = s) : (r = new BigInt,
332 | e = biCopy(i)),
333 | new Array(r,e);
334 | r = new BigInt,
335 | e = i;
336 | for (var d = Math.ceil(g / bitsPerDigit) - 1, o = 0; t.digits[d] < biHalfRadix; )
337 | t = biShiftLeft(t, 1),
338 | ++o,
339 | ++g,
340 | d = Math.ceil(g / bitsPerDigit) - 1;
341 | e = biShiftLeft(e, o),
342 | n += o;
343 | for (var a = Math.ceil(n / bitsPerDigit) - 1, u = biMultiplyByRadixPower(t, a - d); biCompare(e, u) != -1; )
344 | ++r.digits[a - d],
345 | e = biSubtract(e, u);
346 | for (var b = a; b > d; --b) {
347 | var l = b >= e.digits.length ? 0 : e.digits[b]
348 | , h = b - 1 >= e.digits.length ? 0 : e.digits[b - 1]
349 | , f = b - 2 >= e.digits.length ? 0 : e.digits[b - 2]
350 | , c = d >= t.digits.length ? 0 : t.digits[d]
351 | , m = d - 1 >= t.digits.length ? 0 : t.digits[d - 1];
352 | l == c ? r.digits[b - d - 1] = maxDigitVal : r.digits[b - d - 1] = Math.floor((l * biRadix + h) / c);
353 | for (var x = r.digits[b - d - 1] * (c * biRadix + m), v = l * biRadixSquared + (h * biRadix + f); x > v; )
354 | --r.digits[b - d - 1],
355 | x = r.digits[b - d - 1] * (c * biRadix | m),
356 | v = l * biRadix * biRadix + (h * biRadix + f);
357 | u = biMultiplyByRadixPower(t, b - d - 1),
358 | e = biSubtract(e, biMultiplyDigit(u, r.digits[b - d - 1])),
359 | e.isNeg && (e = biAdd(e, u),
360 | --r.digits[b - d - 1])
361 | }
362 | return e = biShiftRight(e, o),
363 | r.isNeg = i.isNeg != s,
364 | i.isNeg && (r = s ? biAdd(r, bigOne) : biSubtract(r, bigOne),
365 | t = biShiftRight(t, o),
366 | e = biSubtract(t, e)),
367 | 0 == e.digits[0] && 0 == biHighIndex(e) && (e.isNeg = !1),
368 | new Array(r,e)
369 | }
370 | function biDivide(i, t) {
371 | return biDivideModulo(i, t)[0]
372 | }
373 | function biModulo(i, t) {
374 | return biDivideModulo(i, t)[1]
375 | }
376 | function biMultiplyMod(i, t, r) {
377 | return biModulo(biMultiply(i, t), r)
378 | }
379 | function biPow(i, t) {
380 | for (var r = bigOne, e = i; ; ) {
381 | if (0 != (1 & t) && (r = biMultiply(r, e)),
382 | t >>= 1,
383 | 0 == t)
384 | break;
385 | e = biMultiply(e, e)
386 | }
387 | return r
388 | }
389 | function biPowMod(i, t, r) {
390 | for (var e = bigOne, n = i, g = t; ; ) {
391 | if (0 != (1 & g.digits[0]) && (e = biMultiplyMod(e, n, r)),
392 | g = biShiftRight(g, 1),
393 | 0 == g.digits[0] && 0 == biHighIndex(g))
394 | break;
395 | n = biMultiplyMod(n, n, r)
396 | }
397 | return e
398 | }
399 | function RSAKeyPair(i, t, r, e) {
400 | this.e = biFromHex(i),
401 | this.d = biFromHex(t),
402 | this.m = biFromHex(r),
403 | "number" != typeof e ? this.chunkSize = 2 * biHighIndex(this.m) : this.chunkSize = e / 8,
404 | this.radix = 16,
405 | this.barrett = new BarrettMu(this.m)
406 | }
407 | function encryptedString(i, t, r, e) {
408 | var n, g, s, d, o, a, u, b, l, h, f = new Array, c = t.length, m = "";
409 | for (d = "string" == typeof r ? r == RSAAPP.NoPadding ? 1 : r == RSAAPP.PKCS1Padding ? 2 : 0 : 0,
410 | o = "string" == typeof e && e == RSAAPP.RawEncoding ? 1 : 0,
411 | 1 == d ? c > i.chunkSize && (c = i.chunkSize) : 2 == d && c > i.chunkSize - 11 && (c = i.chunkSize - 11),
412 | n = 0,
413 | g = 2 == d ? c - 1 : i.chunkSize - 1; n < c; )
414 | d ? f[g] = t.charCodeAt(n) : f[n] = t.charCodeAt(n),
415 | n++,
416 | g--;
417 | for (1 == d && (n = 0),
418 | g = i.chunkSize - c % i.chunkSize; g > 0; ) {
419 | if (2 == d) {
420 | for (a = Math.floor(256 * Math.random()); !a; )
421 | a = Math.floor(256 * Math.random());
422 | f[n] = a
423 | } else
424 | f[n] = 0;
425 | n++,
426 | g--
427 | }
428 | for (2 == d && (f[c] = 0,
429 | f[i.chunkSize - 2] = 2,
430 | f[i.chunkSize - 1] = 0),
431 | u = f.length,
432 | n = 0; n < u; n += i.chunkSize) {
433 | for (b = new BigInt,
434 | g = 0,
435 | s = n; s < n + i.chunkSize; ++g)
436 | b.digits[g] = f[s++],
437 | b.digits[g] += f[s++] << 8;
438 | l = i.barrett.powMod(b, i.e),
439 | h = 1 == o ? biToBytes(l) : 16 == i.radix ? biToHex(l) : biToString(l, i.radix),
440 | m += h
441 | }
442 | return m
443 | }
444 | function decryptedString(i, t) {
445 | var r, e, n, g, s = t.split(" "), d = "";
446 | for (e = 0; e < s.length; ++e)
447 | for (g = 16 == i.radix ? biFromHex(s[e]) : biFromString(s[e], i.radix),
448 | r = i.barrett.powMod(g, i.d),
449 | n = 0; n <= biHighIndex(r); ++n)
450 | d += String.fromCharCode(255 & r.digits[n], r.digits[n] >> 8);
451 | return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
452 | d
453 | }
454 | var biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998, maxDigits, ZERO_ARRAY, bigZero, bigOne;
455 | setMaxDigits(20);
456 | var dpl10 = 15
457 | , lr10 = biFromNumber(1e15)
458 | , hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
459 | , hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f")
460 | , highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535)
461 | , lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535)
462 | , RSAAPP = {};
463 | RSAAPP.NoPadding = "NoPadding";
464 | RSAAPP.PKCS1Padding = "PKCS1Padding";
465 | RSAAPP.RawEncoding = "RawEncoding";
466 | RSAAPP.NumericEncoding = "NumericEncoding";
467 |
468 | function test(pwd){
469 | pK = 'DDE714AAD710B922A46F376FC9D883D0B073688C38F6D30A88FAD8073D9F630D3ED774C9B82746EAB06E8E6B4AD0B9FB94C2B2E42BD78C33E0BDAA0F4B679306C7B570743F8A2E378B6D1CCFC863365A2446AE18020742B7840905B3B56FADEABA8166AD6401C9B6AE8DB7B82729BE21A92C83C14A1881A20F85CDF61FF8BC75'
470 | setMaxDigits(131);
471 | var c = new RSAKeyPair("3","10001",pK,1024)
472 | , t = (encryptedString(c, pwd, RSAAPP.PKCS1Padding, RSAAPP.RawEncoding));
473 | return Buffer.from(t).toString('base64')
474 | }
475 |
476 | var username = '137512654824';
477 | var pwd = 'a12345678'
478 |
479 | console.log(test(username))
480 | console.log(test(pwd))
481 |
482 | var bat = CryptoJS.MD5('YGwTkAQs'.substr(0)+'kfKe8Gmz'.toUpperCase()+'HMSjVh+V'.toLowerCase()+'Z3csXx+J');
483 | console.log(bat+'')
484 | // t = new Buffer(t, 'base64')
485 |
486 |
487 |
--------------------------------------------------------------------------------
/RSA/BigInt.js:
--------------------------------------------------------------------------------
1 | // BigInt, a suite of routines for performing multiple-precision arithmetic in
2 | // JavaScript.
3 | //
4 | // Copyright 1998-2005 David Shapiro.
5 | //
6 | // You may use, re-use, abuse,
7 | // copy, and modify this code to your liking, but please keep this header.
8 | // Thanks!
9 | //
10 | // Dave Shapiro
11 | // dave@ohdave.com
12 |
13 | // IMPORTANT THING: Be sure to set maxDigits according to your precision
14 | // needs. Use the setMaxDigits() function to do this. See comments below.
15 | //
16 | // Tweaked by Ian Bunning
17 | // Alterations:
18 | // Fix bug in function biFromHex(s) to allow
19 | // parsing of strings of length != 0 (mod 4)
20 |
21 | // Changes made by Dave Shapiro as of 12/30/2004:
22 | //
23 | // The BigInt() constructor doesn't take a string anymore. If you want to
24 | // create a BigInt from a string, use biFromDecimal() for base-10
25 | // representations, biFromHex() for base-16 representations, or
26 | // biFromString() for base-2-to-36 representations.
27 | //
28 | // biFromArray() has been removed. Use biCopy() instead, passing a BigInt
29 | // instead of an array.
30 | //
31 | // The BigInt() constructor now only constructs a zeroed-out array.
32 | // Alternatively, if you pass