IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 一个不那么复杂的jsvmp还原算法源码(js逆向) -> 正文阅读

[开发测试]一个不那么复杂的jsvmp还原算法源码(js逆向)

前言:本文不是教学篇,我是跟着阿J哥和小小白的文章才弄出来的,其次我目前对jsvmp还不够熟悉,感觉没这个能力讲明白。唉这也太难了,时常深夜辗转反侧就是因为太菜了。

这是qq_music的sign,还原后的算法如下:

function get_sign(word){
    md5_str = MD5_Encrypt(word).toUpperCase()

    filx_list = [212, 45, 80, 68, 195, 163, 163, 203, 157, 220, 254, 91, 204, 79, 104, 6];
    ys_dict = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15};
    base64_str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
    two_list = [];

    number = 0
    for(var i = 0;i<filx_list.length;i++){
        aa = ys_dict[md5_str[number]] * 16;
        bb = aa + ys_dict[md5_str[number+1]];
        cc = bb ^ filx_list[i];
        two_list.push(cc);
        number+=2
    }

    i = 0
    str_m = ''
    for (var j = 0; j < 5; j++) {
        aa = [two_list[i], two_list[i + 1], two_list[i + 2]]
        one_number = aa[0] >> 2
        two_number = ((aa[0] & 3) << 4) + (aa[1] >> 4)
        three_number = ((aa[1] & 15) << 2) + (aa[2] >> 6)
        four_number = aa[2] & 63;
        i += 3
        str_m += [base64_str[one_number], base64_str[two_number], base64_str[three_number], base64_str[four_number]].join("")
    }

    last_t_number = base64_str[two_list[15] >> 2];
    last_o_number = base64_str[(two_list[15] & 3) << 4];

    s3 = str_m+last_t_number+last_o_number;

    s1 = ''
    s1_list = [21,4,9,26,16,20,27,30]
    for(var i = 0;i<s1_list.length;i++){
           s1+=md5_str[s1_list[i]]
    }

    s2 = ''
    s2_list = [18,11,3,2,1,7,6,25]
    for(var i = 0;i<s2_list.length;i++){
           s2+=md5_str[s2_list[i]]
    }

    final_str = ('zzb' + s1 + s3 + s2).toLowerCase().replace(RegExp("/", "g"), "");
    return final_str
}

var word ='{"comm":{"cv":4747474,"ct":24,"format":"json","inCharset":"utf-8","outCharset":"utf-8","notice":0,"platform":"yqq.json","needNewCode":1,"uin":0,"g_tk_new_20200303":5381,"g_tk":5381},"req_1":{"module":"music.musichallSinger.SingerList","method":"GetSingerListIndex","param":{"area":-100,"sex":-100,"genre":-100,"index":-100,"sin":320,"cur_page":5}}}'
console.log(get_sign(word))

最后感叹两句,逆向圈子的大环境真的很卷,稍微停下一段时间就会发现,群里那些大佬说话都听不懂了,还是得努力呀!
(还有 接下里几个月应该不会更了,该做毕设啦,拜拜!)

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:22:01  更:2022-03-21 21:23:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:24:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码