当前位置:网站首页>Easyclick, EC Quanlang network verification source code
Easyclick, EC Quanlang network verification source code
2022-07-02 23:00:00 【Jiuli AJ】
Complete Quanlang network verification
Register connection : Click quick registration
let LocalStorage = {
};
let center_id = '';// Here is the developer shown in the upper left corner of the background id
let api_password = '';// Here is the background setting api password
let software = '';// Here is the name of the background software
let Carmie =" Your Carmi "
//readConfigString(" Carmie ")
let api_list = ['https://napi.2cccc.cc/','http://api2.2cccc.cc/','http://api3.2cccc.cc/'];
// Server array , If you buy an independent server , It can be changed into yours
if(!kami_login( Carmie ,software,center_id)){
toast(' Software deactivation , Please contact the author ')
sleep(10000)
exit()
}else{
if(kami_login( Carmie ,software,center_id)){
toast(' Kami's effectiveness was successful ')
// Write your code here
}else{
toast(' Please check when the card expires ')
sleep(10000)
exit()
}
}
if( Quanlang technology card binding device ( Carmie ,software,center_id)){
logd(' Carmi called the verification over ')
}else{
logd(" The device does not match the card ")
toast(" The device does not match the card ")
sleep(10000)
exit()
}
// Heartbeat function , Can't get rid of , Some content will be updated in real time here , Discretionary access
function card_ping(){
var ping_result = ql_request('apiv3/card_ping',{
card: Carmie ,needle: LocalStorage.get('card_login_needle') });
console.log(ping_result)
if(ping_result[0] == 1){
// Heart beat successful
console.log(' The latest expiration date of the card secret :' + ping_result[1]['endtime']);
console.log(' The latest Cami time remaining :' + ping_result[1]['less_time']);
sleep( ping_result[1]['heartbeat_second']*1000 );// Try not to change the heartbeat interval , Be consistent with the backstage
card_ping();
}else{
// Heart failure , There are abnormal
console.log(' Heart failure , What is the reason for the failure :' + ping_result[1]);
}
}
// Get the network timestamp
function get_net_timestamp(){
var net_connect_times = 0;
if( net_connect_times> 20 ){
console.log('1 Minute connection to Taobao failed ');
return [false,' Failed to get the network timestamp , Please check your network '];
}
return [true,time().toString().substring(0, 10) ];
}
//-------MD5---------------------
function hex_md5(s){
return binl2hex(core_md5(str2binl(s), s.length * 8));}
function core_md5(x, len) {
x[len >> 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for (var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); a = safe_add(a, olda); b = safe_add(b, oldb); c = safe_add(c, oldc); d = safe_add(d, oldd); } return Array(a, b, c, d); } function md5_cmn(q, a, b, x, s, t) { return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); } function md5_gg(a, b, c, d, x, s, t) { return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
function core_hmac_md5(key, data) {
var bkey = str2binl(key);
if (bkey.length > 16) bkey = core_md5(bkey, key.length * 8);
var ipad = Array(16),
opad = Array(16);
for (var i = 0; i < 16; i++) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * 8);
return core_md5(opad.concat(hash), 512 + 128);
}
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
function str2binl(str) {
var bin = Array();
var mask = (1 << 8) - 1;
for (var i = 0; i < str.length * 8; i += 8)
bin[i >> 5] |= (str.charCodeAt(i / 8) & mask) << (i % 32);
return bin;
}
function binl2hex(binarray) {
var hex_tab = 0 ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) +
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
}
return str;
}
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str = "";
for (var i = 0; i < binarray.length * 4; i += 3) {
var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) |
(((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) |
((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF);
for (var j = 0; j < 4; j++) {
if (i * 8 + j * 6 > binarray.length * 32) str += b64pad;
else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F);
}
}
return str;
}
function cache(key,val){
if(null === val) return LocalStorage.get(key);
return LocalStorage.put(key,val);
}
// Send Quan Lang request ( With encryption )
function ql_request(api,param){
var timestamp_info = [];
var api_complete_path = '';
var api_list = ['https://napi.2cccc.cc/','http://api2.2cccc.cc/','http://api3.2cccc.cc/'];
var connect_server_times = 0;
var server_return_json = '';
param['center_id'] = center_id;
param['software'] = software;
if(connect_server_times > 0) sleep(6000);
if(connect_server_times > 20){
console.log(' Failed to connect to server , Please check the network or contact the Administrator ');
return [false,' Failed to connect to server , Please check the network or contact the Administrator '];
}
timestamp_info = get_net_timestamp();
if(!timestamp_info[0]) return timestamp_info;
api_complete_path = api_list[ parseInt(Math.random()*( api_list.length ),10) ] + api;
param['timestamp'] = timestamp_info[1];
param['sign'] = hex_md5( api_password + timestamp_info[1] );
server_return_json = http.postJSON( api_complete_path,param,5000,"")
var server_return_data = JSON.parse(server_return_json);
if(server_return_data['code']==0) return [false,server_return_data['msg']];
// Verify that the signature is correct
if( hex_md5(server_return_data['timestamp'] + api_password) != server_return_data['sign'] || Math.abs( timestamp_info[1] - server_return_data['timestamp'] > 600 ) ) return [false,' Algorithm validation error , Please contact the Administrator '];// Generally, there is no change in the background api password , This is not going to happen , Changed api password , Or someone tries to crack your software , This is going to happen .
return [true,server_return_data['data']];
}
function kami_login( Activation code , Software ,ID){
let card_login_result = ql_request('apiv3/card_login',{
card: Carmie });
// logd(card_login_result[0]);
if (card_login_result[0]) {
let r = card_login_result[1]
logd(" Cami type :",r.type);// Cami type
logd(" Due time :",r.endtime);// Due time
logd(" The rest of the time :",r.less_time);// The rest of the time
thread.execAsync(function () {
while(ql_request('apiv3/card_login',{
card: Activation code })[0]){
sleep(1000*5);
}
exit();
})
return true
}else{
toast(card_login_result[1]);
exit()
return false
}
}
function Quanlang technology card binding device ( Activation code , Software ,ID){
let url = api_list[0]+'apiv3/config'
let equipment mac = device.tcDeviceId()
// logd(' The physical address is :'+ equipment mac)
let data = {
'center_id':ID,
"software": Software ,
'client_type':'card',
'client_content': Activation code ,
'type':'read',
'timestamp':time(),
'sign':hex_md5( api_password + time() ),
}
let res = http.postJSON(url,data,10000)
let result = JSON.parse(res).data.config
if( result == ""){
toast(' Carmi logs in for the first time ')
let data2 = {
'center_id':ID,
"software": Software ,
'client_type':'card',
'client_content': Activation code ,
'type':'write',
'value': equipment mac+"",
'timestamp':time(),
'sign':hex_md5( api_password + time() ),
}
let res = http.postJSON(url,data2,10000)
return true
}else{
if( result != equipment mac){
return false
}else{
return true
}
}
}
边栏推荐
- 高并发介绍及应对
- 牛客网:最大子矩阵
- odoo13搭建医院HRP环境(详细步骤)
- xshell配置xforward转发火狐浏览器
- 情感对话识别与生成简述
- [chestnut sugar GIS] ArcMap - why should the tick of classic capture be removed when using custom capture?
- 【硬件】标准阻值的由来
- Golang interview finishing three resumes how to write
- Rails 3 activerecord: sort by association count - rails 3 activerecord: order by count on Association
- 数组进阶提高
猜你喜欢

Xiaopeng P7 had an accident and the airbag did not pop up. Is this normal?

牛客网:最大子矩阵

Local dealers play the community group purchase mode and share millions of operations
![[leetcode] most elements [169]](/img/72/d3e46a820796a48b458cd2d0a18f8f.png)
[leetcode] most elements [169]

成功改变splunk 默认URL root path
![[chestnut sugar GIS] ArcMap - how to batch modify the font, color, size, etc. of annotation elements](/img/b1/1fae909fb6a9231096a93d741d6426.png)
[chestnut sugar GIS] ArcMap - how to batch modify the font, color, size, etc. of annotation elements

kubernetes 使用主机名将 pod 分配在指定节点上

【板栗糖GIS】arcscene—如何做出有高度的高程图

Hanging mirror security won four global infosec awards on rsac2022
![[chestnut sugar GIS] ArcMap - why should the tick of classic capture be removed when using custom capture?](/img/b5/e746dd115995e82c93f667c58a601c.png)
[chestnut sugar GIS] ArcMap - why should the tick of classic capture be removed when using custom capture?
随机推荐
To myself who is about to work
Graphic view frame
Jerry's modification does not require long press the boot function [chapter]
Jerry's prototype has no touch, and the reinstallation becomes normal after dismantling [chapter]
悬镜安全在RSAC2022上斩获Global InfoSec Awards四项大奖
P1007 独木桥
位的高阶运算
Analyse des données dossiers d'apprentissage - - analyse simple de la variance à facteur unique avec Excel
Qt QProgressBar详解
What is the'function'keyword used in some bash scripts- What is the 'function' keyword used in some bash scripts?
【洛谷P1541】乌龟棋【DP】
移动端 1px 像素兼容性问题,实现1px 边框
Golang's learning route
Jerry's built-in short press and long press, no matter how long it is, it is a short press [chapter]
[LeetCode] 存在重复元素【217】
數據分析學習記錄--用EXCEL完成簡單的單因素方差分析
Xshell configuration xforward forwarding Firefox browser
Golang的学习路线
stop slave卡住--事务的事件没有复制完整
Niuke network: maximum submatrix