diff --git a/.gitignore b/.gitignore index f6c0cfb..09fef0b 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,7 @@ typings/ .yarn-integrity # dotenv environment variables file +.idea .env dist diff --git a/package.json b/package.json index 00857ad..34c908a 100644 --- a/package.json +++ b/package.json @@ -18,5 +18,8 @@ "homepage": "https://github.com/hex-ci/smzdm_script", "devDependencies": { "eslint": "^8.36.0" + }, + "dependencies": { + "crypto-js": "^4.1.1" } } diff --git a/smzdm_checkin.js b/smzdm_checkin.js index 102d2cf..45307ab 100644 --- a/smzdm_checkin.js +++ b/smzdm_checkin.js @@ -8,6 +8,7 @@ cron: 10 8 * * * const Env = require('./env'); const { SmzdmBot, requestApi, removeTags, getEnvCookies, wait } = require('./bot'); const notify = require('./sendNotify'); +const CryptoJS = require("crypto-js"); // ------------------------------------ @@ -193,6 +194,38 @@ class SmzdmCheckinBot extends SmzdmBot { } } +function random32() { + const chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + let result = ""; + for (let i = 0; i < 32; i++) { + result += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return result; +} + +function getSk(cookie) { + const matchUserId = cookie.match(/smzdm_id=([^;]*)/); + if (!matchUserId) { + return '' + } + const userId = matchUserId[1]; + const deviceId = getDeviceId(cookie); + const key = CryptoJS.enc.Utf8.parse('geZm53XAspb02exN'); + const cipherText = CryptoJS.DES.encrypt(userId + deviceId, key, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }); + return cipherText.toString(); +} + +function getDeviceId(cookie) { + const matchDeviceId = cookie.match(/device_id=([^;]*)/); + if (matchDeviceId) { + return matchDeviceId[1] + } + return random32() +} + !(async () => { const cookies = getEnvCookies(); @@ -225,7 +258,10 @@ class SmzdmCheckinBot extends SmzdmBot { continue; } - const sk = sks[i]; + let sk = sks[i]; + if (!sk) { + sk = getSk(cookie) + } if (i > 0) { await wait(10, 30);