开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 12549|回复: 11
收起左侧

[技术专题] dou音最新xbogus算法js逆向全过程分析

[复制链接]
结帖率:50% (2/4)
发表于 2022-6-27 16:43:19 | 显示全部楼层 |阅读模式   安徽省阜阳市

Xbogus生成

首先拿到插桩日志进行搜索查看,发现这个值是一个一个进行获取出来的,那我们找到最上面(索引O 58 索引M 27 T值: [])大概是这个地方,其中他的乱文也是生成出来的

image-20220624224019606

然后我们继续看看到这里的时候我们发现这里出现了长的数字,这个是怎么来的呢?这个我们继续往下看(索引O 324 索引M 51 T值),当我们看到这个值的时候,其实是由上面的乱文进行CharcodeAt(0)<<16得到的

image-20220624224245092

我们继续往下面看,又出现了一个新的数字,这个数组是我们的乱文进行charcodeAt(1)<<8得到的

image-20220624232551167

image-20220624232620881

接下来又出现了一个新的数字,这个数字是前面两个数字进行异或得来的,下一个数据也是经过异或运算得来的,最终会拿这个最后的那个值进行运算,接下来我们往后面看

image-20220624234805017

image-20220624234822028

image-20220625000436750

image-20220625003925414

我们这里可以看到,这两数字他俩是进行AND运算得到的这个0的,然后这个0作为索引去获取到我们的第一个字母D,这里的16515072是固定的值,接下来我们继续分析,这里我们要特别注意下一个会出现什么数字,然后去往下面看他是怎么去进行运算的可以看到出现的是18然后我们发现这个值0>>18还是等于0的

image-20220625000816282

image-20220625001014047

image-20220625001301801

接着我们继续来进行分析下面的一个字符,这里出现了一个新的数字,其实这个数字是固定的,然后我们继续往下面看,可以看到这两值进行一个AND的操作得到下面的数字,接着看,又出现了12,这个12是固定的,然后拿我们512结尾的值进行>>12得到下面的47,然后就获得了我们第二个字符的索引47得到第二个字符F

image-20220625001358588

image-20220625001510472

image-20220625001535952

image-20220625001653314

image-20220625001805359

image-20220625001858437

接着我们继续往下面继续分析一下,分析完看他们有没有什么规律。

这里又有了新的数字这个4032其实也是一个固定值,下面的值是根据乱文生成的值进行AND操作得到的3840,最后一行我们也可以看到出现了一个6,然后3840>>6就是我们的第三个字符的索引啦,然后我们进行charAt获得到我们的第三个字符S

image-20220625002033707

image-20220625002255467

image-20220625002359356

image-20220625002418748

接着继续分析第四个,我们可以看到这里出现了一个新的值,是经过AND运算后得到45的,这个就是我们第四个的索引,

image-20220625002645271

image-20220625002733060

总结一个,我们可以帮xbogus当成四个四个进行计算得到,每一次计算的时候都有196397这个值的,类似这样的值一共有七个都是乱文生成的,所以接下来我们就要对乱文生成这个数字来进行分析

乱文生成数字,乱文生成

接着我们来看那干长的数字是怎么从乱文中来生成,包括那干乱文又是怎么进行生成的呢

上面的那干196397那个数字怎么来的呢,其实在最开始我们也是有分析的,现在就让我们重新去看一下,然后进行总结一下

这个就是获得一共七个长的数字的代码,都是由乱文生成的,sss就是所传的乱文

``

function get_LongNum(sss) {
    let arr=[];
    let count =1;
    for (let i = 0; i < 21; i=i+3) {
        let a= sss.charCodeAt(i);
        let b=sss.charCodeAt(i+1);
        if(b==91){b=124;}
        let c= sss.charCodeAt(i+2);
        //arr[count-1]=a<<16|b<<8|c;
        arr[count-1]=a<<16^b<<8^c;
        count++;
    }

下面的是获取xbogus字符的代码,这里可以看到生成乱文是需要一个arr数组的,这个arr是特别的麻烦,接下来才分析arr这个数组是怎么来的吧

``

function get_code(arr){
    let ss="";
    let s="Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=";
    let Lnum=get_LongNum('\u0002ÿ'+_0x238632("ÿ",_0x22a2b6(arr)));//_0x238632,_0x22a2b6这两个函数就是生成乱文的
    for(let i =0;i<7;i++){
        let Lnum1=Lnum[i];
        let one =s.charAt((Lnum1&16515072)>>18)
        let two =s.charAt((Lnum1&258048)>>12)
        let three = s.charAt((Lnum1&4032)>>6)
        let four=s.charAt(Lnum1&63)
        ss=ss+one+two+three+four;
    }

    return ss;
}

这两个函数是怎么找到的呢,”是不是乱猜的啊“,当然不是啦,这里我们先找到一开始这个乱文出现的地方,在上面的代码中我们也可以看到这个乱文前面是固定的,所以我们只需要找到后面的在哪就行,这个有点难找,所以我把这个日志的索引给大家,可以尝试搜索一下(索引O 1718 索引M 16),然后我们就去相应的位置去下条件断点进行调试

image-20220625004948345

断下了,我们单步调试,可以看到进入了这个参数,带了这个两个参数来的

image-20220625005034707

image-20220625005120890

这里我们只知道在这里生成但是,这个d是怎么来的呢,我们还是要继续去找的,我们重新再来一遍下断点调试继续来,然后我我们去看下日志,哎就是这个啊,那就有思路了,我们找这个乱文是在哪第一次出现我下断点单步调试不就行了吗,太聪明了,大致的索引是(索引O 1664 索引M 16 T值,然后我们下断点进行调试把

重新来的:

image-20220625005402050

image-20220625005452190

断下来了,单步调试,其实个就是数组哈,只是里面传来很多我给他改变了一下

image-20220625005944843

image-20220625010224658

这里是我更改过后的函数,希望有小伙伴简化一下啊,接着这个值我们找到了然后传入_0x238632的函数当中就可以了,这样我们的乱文就生成了,接下来就是我们的这个数组又是怎么生成的呢

``

function _0x22a2b6(arr) {
    let arr1=[];
    let p = new Uint8Array(19);
    arr1[0] = arr[0]; arr1[1] = arr[10]; arr1[2] = arr[1]; arr1[3] = arr[11]; arr1[4] = arr[2]; arr1[5] = arr[12]; arr1[6] = arr[3]; arr1[7] = arr[13];
    arr1[8] = arr[5]; arr1[9] = arr[14]; arr1[10] = arr[5]; arr1[11] = arr[15]; arr1[12] = arr[6]; arr1[13] = arr[16]; arr1[14] = arr[7]; arr1[15] = arr[17];
    arr1[16] = arr[8]; arr1[17] = arr[18]; arr1[18] = arr[9]

    return  p[0] = arr[0], p[1] = arr[10], p[2] = arr[1], p[3] = arr[11], p[4] = arr[2], p[5] = arr[12], p[6] = arr[3], p[7] = arr[13],
        p[8] = arr[5], p[9] = arr[14], p[10] = arr[5], p[11] = arr[15], p[12] = arr[6], p[13] = arr[16], p[14] = arr[7], p[15] = arr[17],
        p[16] = arr[8], p[17] = arr[18], p[18] = arr[9],
        String.fromCharCode.apply(null, p);
}

image-20220625010606724

生成乱文所需要的数组

因为这个数组生成需要进行md5加密(索引O 368 索引M 34 T值第一个),这里我就直接把md5下断的地方,发现这这里然后断下来了。然后我们看传的b值,这个是链接后的经过md5加密过来的,我们再一次运行让他停下来,这个b呢其实是Uint8Array生成的,这个unit8Array其实是第一次我们url进行md5生成的,这里我就不演示了,拿到代码自己看一下就行

![image-20220625083400997](C:\Users\29308\AppData\Roaming\Typora\typora-user-images\image-20220625083400997.png

image-20220625083422781

image-20220625083552265

image-20220625083611996

image-20220625083833616

接下来我他都会一些值都传进去b的,我们看下插桩日志大概明文是什么也就很明白了,这里不做过多解释了,可以下断点直接看下吧,重点在于后面的数组生成

image-20220625084152265

继续我们的分析,他是怎么把md5的值变成这种数组的呢,我们找到他生成之前的上一个,拿到索引(索引O 418 索引M 16 T值),这里我直接给大家一个大概,然后下条件断点进行调试查看

image-20220625084604974

可以看到还是我们的那个查看md5的地方,这个地方返回的e就是Unit8Array,所以我们可以直接把这个函数拿下来,再结合我们看日志生成md5继续生成这些Unit8Array,这些都需要生成因为最后的那干数组需要在这些Unit8Array中进行取值的,这里md5的长字符大家可以自己研究一下

``

 let b=md5(url);

 let arr0 =_0x237a87(b);
 // console.log(b,"url加密")
 let arr=_0x237a87(md5(arr0));
 let arr1 =_0x237a87(md5(params))
  console.log(md5(params))
 let arr2=_0x237a87(md5(arr1));
 //arr3=_0x237a87(md5("d4+pTKoNjJFb5tMtAC3XB9XrDDxlig1kjbh32u+x5YcwWb/me2pvLTh6ZdBVN5skEeIaOYNixbnFK6wyJdl/Lcy9CDAcpXLLQc3QFKIDQ3KkQYie3n258eLS04FUqFLDjn7dqCRp1jjoORamU2SV"));//长字符
 let arr3=_0x237a87(md5(get_long_String()));//长字符生成
 let arr4=[];

不墨迹,后面是真的太多了,都是通过位运算等得到的,直接上代码,这里cvs固定就行,也可以直接创建,其实第11个不是0就是8,也是个变化的,有兴趣的小伙伴可以继续研究哟,到这里的话,arr生成就ok了,然后整合一下

``

let cvs=536919696;//可以固定
//let cvss=(canvas(3735928559) >> 8) & 255
let cvss=190;//可以固定,getarr中使用
arr4[0]=arr[14];
arr4[1]=arr[15];
arr4[2]=arr2[14];
arr4[3]=arr2[15];
arr4[4]=arr3[14];
arr4[5]=arr3[15];
arr4[6]=time>>>24;
arr4[7]=(time>>>16)&255;
arr4[8]=(time>>>8)&255;
arr4[9]=(time >>> 0) & 255;
arr4[10]=cvs>> 24;
arr4[11]=(cvs>> 16)&255;
arr4[12]=(cvs>> 8)&255;
arr4[13]=(cvs)&255;
//let cc=65^8;
let cc=65^8;
for(let i =0;i<arr4.length;i++){
    cc=cc^arr4[i];
}
let r=[64,1,149,69,69,98,49,74,150,77,0.00390625,8,124,63,164,171,65,226,241];
r[2]=arr[14];
r[3]=arr2[14]
r[4]=arr3[14];
r[7]=cvs>>24;
r[6]=(time>>8)&255;
r[8]=cvss;
r[9]=cc;
r[12]=arr[15];
r[13]=arr2[15]
r[14]=arr3[15]
r[15]=(time>>16)&255;
//r[16]=(time>>0)&255;
r[16]=(time>>0)&255;
r[17]=(cvs>>16)&255
r[18]=cvs&255;
return r;

最终生成的代码

``

function get_code(arr){

    //let sss='\u0002ÿ'+_0x238632(_0x22a2b6(arr));
    let ss="";
    let s="Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=";
    let Lnum=get_LongNum('\u0002ÿ'+_0x238632("ÿ",_0x22a2b6(arr)));
    for(let i =0;i<7;i++){
        let Lnum1=Lnum[i];
        let one =s.charAt((Lnum1&16515072)>>18)
        let two =s.charAt((Lnum1&258048)>>12)
        let three = s.charAt((Lnum1&4032)>>6)
        let four=s.charAt(Lnum1&63)
        ss=ss+one+two+three+four;
    }

    return ss;
}

好啦就到这里啦,xbogus的算法就结束了。


结帖率:52% (11/21)
发表于 2024-2-28 18:20:26 | 显示全部楼层   福建省厦门市

图都挂了啊
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-10-5 23:58:06 | 显示全部楼层   海南省海口市
有视频教程不,还有就是现在有个浏览器POST方式 JS直接调用原生接口方式
回复 支持 反对

使用道具 举报

发表于 2022-7-10 14:23:27 | 显示全部楼层   上海市上海市
老板,图挂了
回复 支持 反对

使用道具 举报

发表于 2022-7-3 23:27:02 | 显示全部楼层   河南省新乡市
高价收抖音最新XA算法 QQ80686193
回复 支持 反对

使用道具 举报

发表于 2022-7-2 17:05:10 | 显示全部楼层   山西省太原市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 2 天

发表于 2022-7-1 18:36:39 | 显示全部楼层   山东省菏泽市
写的不错,可惜看不懂
回复 支持 反对

使用道具 举报

发表于 2022-7-1 13:48:56 | 显示全部楼层   山西省太原市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 21 天

发表于 2022-7-1 12:28:02 | 显示全部楼层   广东省中山市
图片怎么加载不出来啊?
回复 支持 反对

使用道具 举报

发表于 2022-6-30 22:20:59 | 显示全部楼层   山西省太原市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-6-30 17:26:57 | 显示全部楼层   四川省泸州市
好像很厉害的样子,可惜图挂了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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