某书jsvmp算法还原X-S分析

七夕版x-s算法还原

一个人一个人一个人 孤零零孤零零孤零零 写代码写代码写代码 苦苦苦 啊啊啊

加密流程:

        x1,x2,x3,x4拼接进行base64 >> base64进行加密得到乱码 >> 乱码取值运算得到payload >>         payload和其他固定参数结合得到最终的base64

        X-S = XYW_ + base64

七夕版X-S加密点定位

全局搜索 "window._webmsxyw",定位至一个main的js文件里面,在下方红框处下断即可

某书jsvmp算法还原X-S分析_第1张图片

 X-S就是由 window._webmsxyw(l,a)计算得到的

插桩日志点

断点后单步调试进入jsvmp后,在所有的运算处插入日志点,代码看着有些混乱,可以使用V佬的ast简单还原

某书jsvmp算法还原X-S分析_第2张图片

插桩位置大概有十几处,插好桩后原先在window._webmsxyw处下的断点不要取消,继续往下执行,开始输出日志

某书jsvmp算法还原X-S分析_第3张图片

开始分析日志还原算法

日志最底部生成了XYW_......

某书jsvmp算法还原X-S分析_第4张图片

XYW_和eyJ...拼接得到了最终的X-S,eyJ实际上就是一个base64,解码后就是这么一个东西

 前面的参数都可以固定,核心参数是payload,解决了payload基本上就结束了,下面主要分析payload的生成过程

payload生成逻辑分析

 搜索payload前几个字符首次出现的位置,发现是由一串乱码进行取值计算得到的

某书jsvmp算法还原X-S分析_第5张图片

日志中先出现了charCodeAt后得到了数字101,101进行计算得到了payload的前几个字符,看下后面的日志也是先charCodeAt取值后得到了一个数字,再由数字进行计算得到了部分payload

猜测应该是根据乱码长度依次取值再进行计算得到的payload,开始验证

 果然和日志中出现的数字对应着,那就可以写一个通用方法进行计算

注意:这里是需要转十六进制的!!!

function get_payload(luanma) {
    let payload  = ""
    for (let i = 0; i < luanma.length; i++) {
        payload  += (luanma.charCodeAt(i) >> 4).toString(16) + (luanma.charCodeAt(i) & 15).toString(16)
    }
    return payload
}

乱码生成逻辑

老样子,搜索乱码前几个字符生成的地方,发现是由两个大数计算取值转为乱码的

某书jsvmp算法还原X-S分析_第6张图片

 再往上看这两个大数是怎么来的,往上一看瞬间就不想分析了,几百行的运算逻辑,这要分析到什么时候,一开始分析了一点,太费头发就停止了

某书jsvmp算法还原X-S分析_第7张图片

大概逻辑就是由x1x2x3x4拼接进行base64后,对base64的长度依次取值进行一大堆的运算得到了两个大数,乱码就是由这两个大数进行计算得到的

再接着往上看日志,x1x2x3x4的base64出现后 紧接着日志中出现了encrypt、decrypt、encrypt的字样,结合日志中一大堆运算逻辑、运算中固定的大数和出现的一些数组,可以确定是3DES(搜索xs知道的3des),使用的是3DES进行加密

出现encrypt处下条件断点,单步往下跟,可以找到加密的相关参数,找到3DES源码进行简单魔改,传入x1x2x3x4拼接的base64加密即可得到payload

x1,x2,x3,x4

这个应该都挺熟悉没什么好分析的,直接上代码,base64后传入3DES进行加密即可


// params = '/api/sns/web/v2/comment/page?note_id=64c8d6ce0000000010031570&cursor=&top_comment_id=';
// a1 = '11111111111111111111111111111111111111111111';
// time = "1692683881896";
let xxx = `x1=${md5('url=' + params)};x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0;x3=${a1};x4=${time};`;

// base_str = btoa(xxx)

仅供学习交流!!! 遵纪守法!从我做起!

结束,需要算法的联系

你可能感兴趣的:(javascript,开发语言,ecmascript)