开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3060|回复: 10
收起左侧

[JS例程分享] EasyClick对接梦亚网络验证源码

[复制链接]
结帖率:100% (19/19)
发表于 2022-2-26 22:03:36 | 显示全部楼层 |阅读模式   辽宁省大连市
本帖最后由 yuan71058 于 2022-2-26 22:05 编辑

[JavaScript] 纯文本查看 复制代码
//调用方法
/*init("http://127.0.0.1", 1, "bYyCDWr0nxaBfFp7LAXjlzSKIP2REohZgG69cqtUu8TvwJHQimkM", "Ia9Ho5SKpmT3jY2vAVN4duX10DbMexytslcrUE6kOJC8gWBPqLh7");
sleep(1000);
KMlogin("ZKTW7XsG8tzsUazDV2");
sleep(1000);
XT("ZKTW7XsG8tzsUazDV2");
sleep(1000);
logoutk("ZKTW7XsG8tzsUazDV2");*/

//只写了卡密部分 //本人不懂PHP JavaScript //全是照着文档一点一点翻译的 //写的烂不要喷 谢谢

var WEB;    //全局API
var WEB1;   //心跳包 用
var TOKEN;  //用户TOKEN
var SOFTID; //软件ID
var SOFTKEY;    //软件秘钥
var PWD;    //软件加密密码

function POST_v4(url, data) {
    if (TOKEN != "") {
        var header = {"token": TOKEN};
    } else {
        header = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36"}
    }

    let params = {
        "url": WEB + url,
        "timeout": 5000,
        "method": "POST",
        "userAgent": null,
        "referrer": "baidu.com",
        "cookie": null,
        "data": data,
        "file": null,
        "header": header
    };

    let ret = http.request(params);
    return ret.body;
}

//梦亚验证初始化
function init(webUrl, id, Key, Pwd) {
    WEB = webUrl + "/apiv4/v4/";    //全局API
    SOFTID = id;                  //全局ID
    SOFTKEY = Key;                //全局秘钥
    PWD = Pwd;                      //全局加密密钥
    WEB1 = webUrl;                                        //心跳包 用
    let url = "apply";
    let secretKey = DynamicEncryption(SOFTKEY);
    // logd(secretKey);
    let data = {
        "id": SOFTID,
        "secretKey": secretKey
    }
    let ret = POST_v4(url, data);
    let tmp = JSON.parse(ret);
    logd("初始化: " + tmp.msg);

}


//卡密登录
function KMlogin(camilo) {
    machine = DynamicEncryption(getDeviceId());//机器码
    let secretKey = DynamicEncryption(SOFTKEY);
    let kami = camilo + "MYKCKM";
    let url = "kmlogin"
    let data = {
        "id": SOFTID,
        "secretKey": secretKey,
        "camilo": kami,//卡密
        "machine": machine//机器码
    }
    let ret = POST_v4(url, data);

    if (ret) {
        let tmp = JSON.parse(ret);
        TOKEN = tmp.data.token;
        //logd("token: " + TOKEN);
        logd("卡密登录: " + tmp.msg);
    } else {
        logd("卡密登录 无结果");

    }

}

//卡密强制注销
function logoutk(camilo) {
    machine = DynamicEncryption(getDeviceId());//机器码
    let secretKey = DynamicEncryption(SOFTKEY);
    let kami = camilo + "MYKCKM";
    let url = "logoutk"
    let data = {
        "id": SOFTID,
        "secretKey": secretKey,
        "camilo": kami,
        "machine": machine
    }
    let ret = POST_v4(url, data);
    let tmp = JSON.parse(ret);
    logd("卡密强制注销: " + tmp.msg);

}

// 心跳
function XT(camilo) {
    let url = WEB + "xintiao";
    machine = DynamicEncryption(getDeviceId());//机器码
    let secretKey = DynamicEncryption(SOFTKEY);
    let data = {
        "id": SOFTID,
        "secretKey": secretKey,
        "api":DynamicEncryption(WEB1),
        "machine": machine,
        "username": "wohenni",
        "camilo": camilo + "MYKCKM"
    }
    let ret = http.postJSON(url, data, 1000, {
        "token": TOKEN
    })
    let tmp = JSON.parse(ret);
    logd("心跳: " + tmp.msg);


}


//文本数据动态加密,每次加密结果不一致,但解密数据相同
function DynamicEncryption(data) {
    if (typeof (data) == "string") {
        data = stringToByte(data);
    }
    if (data.length % 2 == 1) {
        data.push([0]);
    }
    data = _DataDisruption(data);
    let datalen = data.length;
    let code = _DataDisruption(stringToByte("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"));
    let codelen = code.length;
    let pas = _DataDisruption(stringToByte(PWD));
    let paslen = pas.length;
    let j = 0, k = 0;
    let ret = new Array();
    for (let i = 1; i <= datalen; i++) {
        j = j + 1
        if (j > codelen) {
            j = 1;
        }
        k = k + 1
        if (k > paslen) {
            k = 1;
        }
        let r = Math.floor((Math.random() * 10) + 1);   //1 - 10之间的随机数
        let Bus = Math.floor(r / codelen + 1);
        let yu = r % codelen + 1;
        ret = ret.concat(code.slice(Math.floor(Bus) - 1, Math.floor(Bus)), code.slice(Math.floor(yu) - 1, Math.floor(yu)));
        let tembit = data[i - 1] ^ code[j - 1] ^ pas[k - 1] ^ r;
        Bus = tembit / codelen + 1;
        yu = tembit % codelen + 1;
        ret = ret.concat(code.slice(Math.floor(Bus) - 1, Math.floor(Bus)), code.slice(Math.floor(yu) - 1, Math.floor(yu)));
    }
//    logd(ret);
    return (arrToHex(ret));
}

//文本数据动态解密
function DynamicDecryption(data) {
    if (typeof (data) == "string") {
        data = stringToByte(data);
    }
    let datalen = data.length;
    let code = (_DataDisruption(stringToByte("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")));
    let codelen = code.length;
    let pas = _DataDisruption(stringToByte(PWD));
    let paslen = pas.length;
    let j = 0, k = 0;
    let ret = new Array();

    for (let i = 1; i <= (datalen / 4); i++) {
        j = j + 1;
        if (j > codelen) {
            j = 1;
        }
        k = k + 1;
        if (k > paslen) {
            k = 1;
        }
        let Bus = (data.slice(Math.floor((i - 1) * 4 + 1) - 1, Math.floor((i - 1) * 4 + 1)));
        Bus = code.indexOf(Number(Bus));
        let yu = (data.slice(Math.floor((i - 1) * 4 + 2) - 1, Math.floor((i - 1) * 4 + 2)));
        yu = code.indexOf(Number(yu));
        let r = Bus * codelen + yu;
        Bus = (data.slice(Math.floor((i - 1) * 4 + 3) - 1, Math.floor((i - 1) * 4 + 3)));
        Bus = code.indexOf(Number(Bus));
        yu = (data.slice(Math.floor((i - 1) * 4 + 4) - 1, Math.floor((i - 1) * 4 + 4)));
        yu = code.indexOf(Number(yu));
        let tembit = Bus * codelen + yu;

        tembit = tembit ^ code[j - 1] ^ pas[k - 1] ^ r;
        ret.push(tembit);
    }

//    logd(_DataDisruption(ret));
    return (arrToStr(_DataDisruption(ret)));
}


//数据打乱
function _DataDisruption(data) {
    let arr1 = new Array();
    let arr2 = new Array();
    arr1 = data.slice(0, Math.floor(data.length / 2));
    arr2 = data.slice(Math.ceil(data.length / 2), data.length);
    arr1 = arr1.reverse();
    arr2 = arr2.reverse();
    return arr1.concat(arr2);
}


//数据倒序
function _DataReverse(data) {
    return data.reverse();
}


//字符串转字节
function stringToByte(str) {
    var len, c;
    len = str.length;
    var bytes = [];
    for (var i = 0; i < len; i++) {
        c = str.charCodeAt(i);
        if (c >= 0x010000 && c <= 0x10FFFF) {
            bytes.push(((c >> 18) & 0x07) | 0xF0);
            bytes.push(((c >> 12) & 0x3F) | 0x80);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if (c >= 0x000800 && c <= 0x00FFFF) {
            bytes.push(((c >> 12) & 0x0F) | 0xE0);
            bytes.push(((c >> 6) & 0x3F) | 0x80);
            bytes.push((c & 0x3F) | 0x80);
        } else if (c >= 0x000080 && c <= 0x0007FF) {
            bytes.push(((c >> 6) & 0x1F) | 0xC0);
            bytes.push((c & 0x3F) | 0x80);
        } else {
            bytes.push(c & 0xFF);
        }
    }
    return (bytes);
}


//字节转字符串
function byteToString(arr) {
    if (typeof arr === 'string') {
        return arr;
    }
    let str = '',
        _arr = arr;
    for (let i = 0; i < _arr.length; i++) {
        let one = _arr.toString(2),
            v = one.match(/^1+?(?=0)/);
        if (v && one.length == 8) {
            let bytesLength = v[0].length;
            let store = _arr.toString(2).slice(7 - bytesLength);
            for (let st = 1; st < bytesLength; st++) {
                store += _arr[st + i].toString(2).slice(2);
            }
            str += String.fromCharCode(parseInt(store, 2));
            i += bytesLength - 1;
        } else {
            str += String.fromCharCode(_arr);
        }
    }
    return str;
}


//数组转换为十六进制
function arrToHex(arr) {
    let hex = "";
    for (let i = 0; i < arr.length; i++) {
        hex = hex + String.fromCharCode(arr);
    }
    return hex;
}

//数组转字符串
function arrToStr(arr) {
    let str = "";
    for (let i = 0; i < arr.length; i++) {
        str = str + String.fromCharCode(arr);
    }
    return (str);
}

//获取机器码
function getDeviceId() {
    return device.getIMEI();
}


梦亚验证
https://bbs.125.la/thread-14719052-1-1.html

如果本源码对您有帮助 请为我加好评 当初被 爱死比 乱扣了好评,看着难受 谢谢
发表于 2022-7-25 02:43:00 | 显示全部楼层   重庆市重庆市
EasyClick对接梦亚网络验证源码
回复 支持 反对

使用道具 举报

发表于 2022-7-23 21:58:51 | 显示全部楼层   山东省滨州市
62626262626262626262626262
回复 支持 反对

使用道具 举报

结帖率:50% (4/8)

签到天数: 5 天

发表于 2022-7-14 11:32:21 | 显示全部楼层   山西省太原市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
发表于 2022-7-9 16:32:15 | 显示全部楼层   山东省泰安市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)

签到天数: 24 天

 楼主| 发表于 2022-4-22 05:17:24 | 显示全部楼层   辽宁省大连市
精易神 发表于 2022-4-21 21:24
没,作者好像没发,而且好像用的是作者的api。。。

之前在群里有 后来删了
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 10 天

发表于 2022-4-21 21:24:13 | 显示全部楼层   江西省新余市
yuan71058 发表于 2022-4-21 18:55
你有没有3.6.6完整版,发我一份

没,作者好像没发,而且好像用的是作者的api。。。
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)

签到天数: 24 天

 楼主| 发表于 2022-4-21 18:55:01 | 显示全部楼层   辽宁省大连市
精易神 发表于 2022-4-9 00:30
不知道为啥,这个版本的梦亚我装不上,直接空白。。

你有没有3.6.6完整版,发我一份
回复 支持 反对

使用道具 举报

结帖率:100% (19/19)

签到天数: 24 天

 楼主| 发表于 2022-4-21 18:39:51 | 显示全部楼层   辽宁省大连市
精易神 发表于 2022-4-9 00:30
不知道为啥,这个版本的梦亚我装不上,直接空白。。

php\版本  伪静态
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 10 天

发表于 2022-4-9 00:30:38 | 显示全部楼层   江西省新余市
不知道为啥,这个版本的梦亚我装不上,直接空白。。
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 2022-4-8 09:02:00 | 显示全部楼层   山西省吕梁市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表