normalhamal-temp-oicq
Version:
QQ protocol!
184 lines (183 loc) • 6.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getApkInfo = exports.Platform = exports.generateFullDevice = exports.generateShortDevice = void 0;
const crypto_1 = require("crypto");
const constants_1 = require("./constants");
function generateImei(uin) {
let imei = uin % 2 ? "86" : "35";
const buf = Buffer.alloc(4);
buf.writeUInt32BE(uin);
let a = buf.readUInt16BE();
let b = Buffer.concat([Buffer.alloc(1), buf.slice(1)]).readUInt32BE();
if (a > 9999)
a = Math.trunc(a / 10);
else if (a < 1000)
a = String(uin).substr(0, 4);
while (b > 9999999)
b = b >>> 1;
if (b < 1000000)
b = String(uin).substr(0, 4) + String(uin).substr(0, 3);
imei += a + "0" + b;
function calcSP(imei) {
let sum = 0;
for (let i = 0; i < imei.length; ++i) {
if (i % 2) {
let j = parseInt(imei[i]) * 2;
sum += j % 10 + Math.floor(j / 10);
}
else {
sum += parseInt(imei[i]);
}
}
return (100 - sum) % 10;
}
return imei + calcSP(imei);
}
/** 生成短设备信息 */
function generateShortDevice(uin) {
const randstr = (length, num = false) => {
let result = '';
const map = num ? '0123456789' : '0123456789abcdef';
for (let i = length; i > 0; --i)
result += map[Math.floor(Math.random() * map.length)];
return result;
};
return {
"--begin--": "该设备由账号作为seed固定生成,账号不变则永远相同",
product: `ILPP-${randstr(5).toUpperCase()}`,
device: `${randstr(5).toUpperCase()}`,
board: `${randstr(5).toUpperCase()}`,
brand: `${randstr(4).toUpperCase()}`,
model: `ILPP ${randstr(4).toUpperCase()}`,
wifi_ssid: `HUAWEI-${randstr(7)}`,
bootloader: `U-boot`,
android_id: `IL.${randstr(7, true)}.${randstr(4, true)}`,
boot_id: `${randstr(8)}-${randstr(4)}-${randstr(4)}-${randstr(4)}-${randstr(12)}`,
proc_version: `Linux version 5.10.101-android12-${randstr(8)}`,
mac_address: `2D:${randstr(2).toUpperCase()}:${randstr(2).toUpperCase()}:${randstr(2).toUpperCase()}:${randstr(2).toUpperCase()}:${randstr(2).toUpperCase()}`,
ip_address: `192.168.${randstr(2, true)}.${randstr(2, true)}`,
imei: `86${randstr(13, true)}`,
incremental: `${randstr(10).toUpperCase()}`,
"--end--": "修改后可能需要重新验证设备",
};
}
exports.generateShortDevice = generateShortDevice;
/** 生成完整设备信息 */
function generateFullDevice(d) {
if (typeof d === "number")
d = generateShortDevice(d);
return {
display: d.android_id,
product: d.product,
device: d.device,
board: d.board,
brand: d.brand,
model: d.model,
bootloader: d.bootloader,
fingerprint: `${d.brand}/${d.product}/${d.device}:10/${d.android_id}/${d.incremental}:user/release-keys`,
boot_id: d.boot_id,
proc_version: d.proc_version,
baseband: "",
sim: "T-Mobile",
os_type: "android",
mac_address: d.mac_address,
ip_address: d.ip_address,
wifi_bssid: d.mac_address,
wifi_ssid: d.wifi_ssid,
imei: d.imei,
android_id: d.android_id,
apn: "wifi",
version: {
incremental: d.incremental,
release: "10",
codename: "REL",
sdk: 29,
},
imsi: (0, crypto_1.randomBytes)(16),
guid: (0, constants_1.md5)(Buffer.concat([Buffer.from(d.imei), Buffer.from(d.mac_address)])),
};
}
exports.generateFullDevice = generateFullDevice;
// ----------
/** 支持的登录设备平台 */
var Platform;
(function (Platform) {
Platform[Platform["Android"] = 1] = "Android";
Platform[Platform["aPad"] = 2] = "aPad";
Platform[Platform["Watch"] = 3] = "Watch";
Platform[Platform["iMac"] = 4] = "iMac";
Platform[Platform["iPad"] = 5] = "iPad";
})(Platform = exports.Platform || (exports.Platform = {}));
const mobile = {
id: "com.tencent.mobileqq",
app_key: '0S200MNJT807V3GE',
name: "A8.9.33.10335",
version: "8.9.33.10335",
ver: "8.9.33",
sign: Buffer.from([0xA6, 0xB7, 0x45, 0xBF, 0x24, 0xA2, 0xC2, 0x77, 0x52, 0x77, 0x16, 0xF6, 0xF3, 0x6E, 0xB6, 0x8D]),
buildtime: 1673599898,
appid: 16,
subid: 537151682,
bitmap: 150470524,
main_sig_map: 16724722,
sub_sig_map: 0x10400,
sdkver: "6.0.0.2534",
display: "Android",
ssover: 19,
};
const watch = {
id: "com.tencent.qqlite",
app_key: '0S200MNJT807V3GE',
name: "A2.0.5",
version: "2.0.5",
ver: "2.0.5",
sign: Buffer.from([166, 183, 69, 191, 36, 162, 194, 119, 82, 119, 22, 246, 243, 110, 182, 141]),
buildtime: 1559564731,
appid: 16,
subid: 537064446,
bitmap: 16252796,
main_sig_map: 16724722,
sub_sig_map: 0x10400,
sdkver: "6.0.0.2534",
display: "Watch",
ssover: 5
};
const hd = {
id: "com.tencent.minihd.qq",
app_key: '0S200MNJT807V3GE',
name: "A5.9.3.3468",
version: "5.9.3.3468",
ver: "5.9.3",
sign: Buffer.from([0xAA, 0x39, 0x78, 0xF4, 0x1F, 0xD9, 0x6F, 0xF9, 0x91, 0x4A, 0x66, 0x9E, 0x18, 0x64, 0x74, 0xC7]),
buildtime: 1637427966,
appid: 16,
subid: 537128930,
bitmap: 150470524,
main_sig_map: 1970400,
sub_sig_map: 66560,
sdkver: "6.0.0.2487",
display: "iMac",
ssover: 12
};
const apklist = {
[Platform.Android]: mobile,
[Platform.aPad]: {
...mobile,
subid: 537151218,
display: 'aPad'
},
[Platform.Watch]: watch,
[Platform.iMac]: { ...hd },
[Platform.iPad]: {
...mobile,
subid: 537151363,
sign: hd.sign,
name: 'A8.9.33.614',
version: 'A8.9.33.614',
display: 'iPad'
},
};
function getApkInfo(p) {
return apklist[p] || apklist[Platform.Android];
}
exports.getApkInfo = getApkInfo;