开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 5694|回复: 29
收起左侧

[易源码分享] 【图文】某蜂窝分析混淆JS(加速乐)最新加密JS全过程

[复制链接]
结帖率:36% (5/14)
发表于 2021-4-26 01:00:20 | 显示全部楼层 |阅读模式   四川省德阳市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 牛bi的阿三 于 2021-4-26 04:30 编辑

目标网站:https://www.mafengwo.cn/
分析原因:没有
__jsl_clearance_s=1619352365.545|0|%2F%2F1VJvQukl0gJLXekrvooalEOyE%3D,不能正确响应首页

1.目标Cookie 1619360760(1).jpg

2.打开浏览器->输入目标网址->打开->按F12打开开发者工具->点击APPlication->按Del清除所有Cookie->打开Fiddler抓包
1619361079(1).jpg

3.抓到完成流程
1619361383(1).jpg

4.开始分析
//可以清楚的看到流程,请求两次都是红色,第三次才成功,那么看下第一次请求是什么情况,返回了一段JS.可以清楚的看到是设置Cookie的(document.cookie=),用工具解密看下!
1619361784(1).jpg 1619361802(1).jpg
//解出来后发现解出来的Cookie是第二个包发送的
1619361978(1).jpg
//那么第一个包算法搞完了,下面开分析第二个包
1619362100(1).jpg
//第二个包明显看到返回的是混淆的JS,那么看下第三个包提交的和第二个包提交的Cookie是否一致
1619362666(1).jpg
1619362666(1).jpg
//明显后面的js是不一样的,那么开始分析第二个包的js,在浏览器搜索Cookie的键名__jsl_clearance_s
1619362876(1).jpg
//搜不到,那么把这个JS复制工具用IE浏览器执行来调试
1619362967(1).jpg 1619362984(1).jpg
//上面的script不要
1619363325(1).jpg
//复制到工具点IE执行
1619363422(1).jpg
//在第一行下段,不然这个网页一直刷新,然后单步一直走
1619363475(1).jpg
//走到这里进入进去分析一下,这里有Cookie的主要参数,进入之后一直单步走,注意看变量值
1619363623(1).jpg
//走到这里之后看到已经出完整的Cookie了,那么进入
//var _0x2e254d = _0xa486ab[_0x3130('0x67', 'e*F]') + 'P'](_0x43887f, _0x5eadc4['ct'], _0x5eadc4[_0x3130('0xaa', '*^gB')]);
_0x43887f是个函数,也就是调用这个函数计算出来的,那么单步进入到这个函数去一探究竟
1619363904(1).jpg
由于已经走过了,那么直接在这个函数内部下断。刷新重新让他断在这里!
1619364046(1).jpg
//这里看到他传入了下面2个参数,这2个参数肯定是要参与计算的。继续分析...
1619364133(1).jpg
//由于是for循环,我选择直接断在返回,可以看到_0x11a510变量的值已经是完整的__jsl_clearance_s,那么这行代码就是组合这个Cookie的关键代码了,分析这行代码
_0x11a510 = _0xa486ab[_0x3130('0xaf', '@o53') + 'F'](_0xa486ab[_0x3130('0x31', 'oywh') + 'b'](_0x580680[0x0], _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1)), _0x5eadc4[_0x3130('0x6c', 'Cr5j') + 's'][_0x3130('0x0', '7T5i') + 'tr'](_0x25f05a, 0x1)) + _0x580680[0x1];
我的妈耶,这也太长太绕了吧,拆开来看看
a=_0xa486ab[_0x3130('0x31', 'oywh') + 'b'](_0x580680[0x0], _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1))
b=_0x5eadc4[_0x3130('0x6c', 'Cr5j') + 's'][_0x3130('0x0', '7T5i') + 'tr'](_0x25f05a, 0x1)
_0x11a510 = _0xa486ab[_0x3130('0xaf', '@o53') + 'F']( a,b )+ _0x580680[0x1];

这样看起来是不是好多了。
继续还原..
9P3NA7ZVZ9EUY879.png
用鼠标选中这段代码,发现执行结果指向了一个函数,点击上面那个蓝色的进入这个函数。
1619364637(1).jpg
进入函数之后发现这个函数只是做加法而已,那么将上面还原的代码再次还原
_0x11a510 = a + b + _0x580680[0x1];
下面来还原一下a和b的混淆代码;
a=_0xa486ab[_0x3130('0x31', 'oywh') + 'b'](_0x580680[0x0], _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1))
1619365019(1).jpg
鼠标选中它,看到计算结果是:"1619361344.42|0|ba%2F"
b=_0x5eadc4[_0x3130('0x6c', 'Cr5j') + 's'][_0x3130('0x0', '7T5i') + 'tr'](_0x25f05a, 0x1)
1619365149(1).jpg
鼠标选中它,看到计算结果是:"5"
再看这个尾巴的值是多少
_0x580680[0x1] = "g6LOgIWTj%2FTDYWOvNtdud10%3D"
1619365341(1).jpg
那么最终结果就是"1619361344.42|0|ba%2F"+"5"+ "g6LOgIWTj%2FTDYWOvNtdud10%3D" = "1619361344.42|0|ba%2F5g6LOgIWTj%2FTDYWOvNtdud10%3D"
看第三个包的提交Cookie和这个是否一致
1619365490(1).jpg
经过对比是一样的,那么它和传入的参数哪里不同;
"1619361344.42|0|ba%2F5g6LOgIWTj%2FTDYWOvNtdud10%3D"
1619365576(1).jpg
发现1619361344.42|0|ba%2多了个F 5
那么找下F和5的来源就行了,继续还原a
a=_0xa486ab[_0x3130('0x31', 'oywh') + 'b'](_0x580680[0x0], _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1))= 1619365977(1).jpg
看到_0xa486ab[_0x3130('0x31', 'oywh') + 'b']只是一个相加的函数而已,那么还原后为
a=_0x580680[0x0] + _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1)
1619366106(1).jpg
从打印出来的数据看 _0x580680[0x0] = 1619361344.42|0|ba%2
a="1619361344.42|0|ba%2" + _0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's'][_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1)
1619366250(1).jpg
_0x5eadc4[_0x3130('0x1a', 'cJ9L') + 's']= "LQ5SjsVqzJejKHAiiCkbFR"
a="1619361344.42|0|ba%2" +"LQ5SjsVqzJejKHAiiCkbFR".[_0x3130('0x6b', 'QEoB') + 'tr'](_0x3d1767, 0x1)
接下来看这个[_0x3130('0x6b', 'QEoB') + 'tr']是什么
1619366419(1).jpg
那么是个substr函数
a="1619361344.42|0|ba%2" +"LQ5SjsVqzJejKHAiiCkbFR".substr(_0x3d1767, 0x1)
接下来看_0x3d1767
1619366552(1).jpg
这个相当于是易语言的计次循环的第二个参数用来记录循环次数的
写到这里已经快坚持不下去了,不知道怎么表达了!实际很简单
那么也就是计次循环取"LQ5SjsVqzJejKHAiiCkbFR"的某一个字符
现在来分析b
b=_0x5eadc4[_0x3130('0x6c', 'Cr5j') + 's'][_0x3130('0x0', '7T5i') + 'tr'](_0x25f05a, 0x1)
1619367455(1).jpg
b="LQ5SjsVqzJejKHAiiCkbFR"[_0x3130('0x0', '7T5i') + 'tr'](_0x25f05a, 0x1)
现在来看[_0x3130('0x0', '7T5i') + 'tr']是什么
1619367529(1).jpg
和a一样
b="LQ5SjsVqzJejKHAiiCkbFR".substr(_0x25f05a, 0x1)
现在来找_0x25f05a
1619367685(1).jpg
也是循环的,可以清楚的看到,就是两层循环!取同一个文本,但是位置不同,来组合,
_0x11a510 = "1619361344.42|0|ba%2" +"LQ5SjsVqzJejKHAiiCkbFR".substr(_0x3d1767, 0x1) + "LQ5SjsVqzJejKHAiiCkbFR".substr(_0x25f05a, 0x1) + _0x580680[0x1];
最后找这个_0x580680[0x1]
1619367832(1).jpg
_0x11a510 = "1619361344.42|0|ba%2" +"LQ5SjsVqzJejKHAiiCkbFR".substr(_0x3d1767, 0x1) + "LQ5SjsVqzJejKHAiiCkbFR".substr(_0x25f05a, 0x1) + "g6LOgIWTj%2FTDYWOvNtdud10%3D";
OK,既然他是循环取得 怎么知道取得哪个是对的呢,继续往下看
1619367972(1).jpg
可以看到这个if如果成立,就返回了,说明这里是判断怎么取才知道是取对的。
                        if (_0xa486ab[_0x3130('0x84', 'JL[M') + 'X'](_0xa486ab[_0x3130('0x59', 'gu9M') + 'K'](hash, _0x11a510), _0x794b03)) {
                            return [_0x11a510, new Date() - _0x2d6d11];
                        }

现在来看 _0xa486ab[_0x3130('0x84', 'JL[M') + 'X'] 是什么
1619368088(1).jpg
_0xa486ab[_0x3130('0x84', 'JL[M') + 'X'] 只是一个判断参数1和参数2是否一样而已,那么参数1和参数2 就是重点了
参数1=_0xa486ab[_0x3130('0x59', 'gu9M') + 'K'](hash, _0x11a510)
参数2=_0x794b03
1619368369(1).jpg
参数1="fa580dbb1f26f7519ba894c47e1924fc21c5db86" = sha1("1619361344.42|0|ba%2F5g6LOgIWTj%2FTDYWOvNtdud10%3D")
长度是40位根据经验他是sha1,也可以跟进去确定,但这里就不用了,因为在go(那里可以看到是写明是sha1的
1619368520(1).jpg
然后看参数2
参数2=_0x794b03
1619368571(1).jpg
参数2="fa580dbb1f26f7519ba894c47e1924fc21c5db86"
也就是看 sha1("1619361344.42|0|ba%2F5g6LOgIWTj%2FTDYWOvNtdud10%3D") = "fa580dbb1f26f7519ba894c47e1924fc21c5db86" 就返回了,秘钥也就是我们前面得出的 F5
"fa580dbb1f26f7519ba894c47e1924fc21c5db86" 是上上张图里js自己返回的ct
那么现在分析完了,把他关键的这个JS扣出来改改,
改造前:
1619368816(1).jpg
改造后:
1619369716(1).jpg
可以看到结果和上面的 参数1="fa580dbb1f26f7519ba894c47e1924fc21c5db86" = sha1("1619361344.42|0|ba%2F5g6LOgIWTj%2FTDYWOvNtdud10%3D") 结果一致;
加密类型会有变动 有md5的和sha256的,这个你们自己修改
改造后的js代码:
function getCode(arg0, arg1, arg2, arg3) {
    arg0 = "LQ5SjsVqzJejKHAiiCkbFR";
    arg1 = "1619361344.42|0|ba%2";
    arg2 = "g6LOgIWTj%2FTDYWOvNtdud10%3D";
    arg3 = "fa580dbb1f26f7519ba894c47e1924fc21c5db86";
    for (var i = 0x0; i < arg0.length; i++) {
        var v0 = "";
        for (var i1 = 0x0; i1 < arg0.length; i1++) {
            v0 = arg1 + arg0.substr(i, 0x1) + arg0.substr(i1, 0x1) + arg2;
            if (SHA1(v0) == arg3) {
                return v0
            }
        }
    }
v0="error"
  return v0
}



另外附上易语言写法,供大家学习

  
子程序名返回值类型公开备 注
__启动窗口_创建完毕  
变量名类 型静态数组备 注
Str文本型 
Eval_data文本型 
Cookie文本型 
tmp文本型 
jsonzyJsonValue 
encrypt_type文本型 
ct文本型 
bts0文本型 
bts1文本型 
chars_key文本型 
encrypt_data文本型 
Str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.mafengwo.cn/”, , , Cookie))
Eval_data = 文本_取出中间文本 (Str, “cookie=”, “;location”)
调试输出 (Eval_data)
tmp = 计算表达式 (Eval_data)
tmp = 文本_取左边 (tmp, “;”)
Cookie = Cookie + “;” + tmp
Str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.mafengwo.cn/”, , , Cookie))
调试输出 (Str)
tmp = 文本_取出中间文本 (Str, “;go(”, “)”)
json.解析 (tmp)
bts0 = json.取文本 (“bts[0]”)
bts1 = json.取文本 (“bts[1]”)
ct = json.取文本 (“ct”)
chars_key = json.取文本 (“chars”)
encrypt_type = json.取文本 (“ha”)
encrypt_data = getEncryptCode (chars_key, bts0, bts1, ct, encrypt_type)
如果真 (encrypt_data = “”)
调试输出 (“计算出错”, encrypt_type)
返回 ()

Cookie = 子文本替换 (Cookie, 选择 (文本_取出中间文本 (Cookie, “__jsl_clearance_s=”, “;”)“”, 文本_取右边 (Cookie, “__jsl_clearance_s=”), 文本_取出中间文本 (Cookie, “__jsl_clearance_s=”, “;”)), encrypt_data, , , )
调试输出 (Cookie)
Str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.mafengwo.cn/”, , , Cookie, , ))
调试输出 (Str)
写到文件 (取特定目录 (3)“aaaa.log”, 到字节集 (Str))
子程序名返回值类型公开备 注
getEncryptCode文本型 
参数名类 型参考可空数组备 注
chars_key文本型
bts0文本型
bts1文本型
ct文本型
encrypt_type文本型
变量名类 型静态数组备 注
encrypt_data文本型 
n整数型 
i整数型 
计次循环首 (取文本长度 (chars_key) + 1, n)
计次循环首 (取文本长度 (chars_key) + 1, i)
调试输出 (取文本中间 (chars_key, n, 1)取文本中间 (chars_key, i, 1))
encrypt_data = bts0 + 取文本中间 (chars_key, n, 1)取文本中间 (chars_key, i, 1) + bts1
如果真 (encrypt_type = “md5”)
如果真 (校验_取md5 (到字节集 (encrypt_data)) = ct)
返回 (encrypt_data)

如果真 (encrypt_type = “sha1”)
如果真 (校验_取sha1 (到字节集 (encrypt_data)) = ct)
返回 (encrypt_data)

如果真 (encrypt_type = “sha256”)
如果真 (校验_取sha256 (到字节集 (encrypt_data)) = ct)
返回 (encrypt_data)


计次循环尾 ()
计次循环尾 ()
返回 (“”)
子程序名返回值类型公开备 注
计算表达式文本型 计算表达式并返回结果。
参数名类 型参考可空数组备 注
表达式文本型
变量名类 型静态数组备 注
脚本对象对象 
result文本型 
线程_初始化COM库 ()
脚本对象.创建 (“ScriptControl”, )
脚本对象.写属性 (“Language”, “JScript”)
result = 脚本对象.文本方法 (“Eval”, 表达式)
脚本对象.清除 ()
线程_取消COM库 ()
返回 (result)


i支持库列表   支持库注释   
spec特殊功能支持库
shell操作系统界面功能支持库


码字不容易,搞了3个小时才把这帖子写完,评分支持一下作者吧
来都来了支持一下呗
由于JS是动态了,所以提供了一份固定的JS,可以按照帖子去分析
下载下来学习用的调试js文件需要吧后缀改为html才可以哦


学习调试用JS.txt (27.95 KB, 下载次数: 21)

评分

参与人数 9好评 +7 精币 +18 收起 理由
ノ朽默℡ + 1 + 5 感谢分享,很给力!~
2297129548 + 1 新技能已get√
一剑磨十年 + 1 + 2 新技能已get√
101232 + 1 + 2 感谢分享,很给力!~
applepear + 1 感谢分享,很给力!~
zlw310282 + 1 + 2 感谢分享,很给力!~
王者路太艰难 + 2 新技能已get√
南宫娜月汐 + 1 + 2 感谢分享,很给力!~
赵四 + 1 + 2 感谢发布原创作品,一定好好学习,天天向上

查看全部评分


结帖率:100% (1/1)

签到天数: 1 天

发表于 2022-12-15 00:09:40 | 显示全部楼层   山东省济宁市
        支持,膜拜了~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2021-8-1 17:18:37 | 显示全部楼层   湖南省长沙市
学习学习
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2021-5-10 13:12:22 | 显示全部楼层   江苏省无锡市
感谢发布原创作品,但这是啥?
回复 支持 反对

使用道具 举报

结帖率:100% (16/16)

签到天数: 1 天

发表于 2021-5-8 21:06:33 | 显示全部楼层   吉林省长春市
看起来不错
回复 支持 反对

使用道具 举报

发表于 2021-5-6 17:12:02 | 显示全部楼层   广东省广州市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2021-5-1 22:01:34 | 显示全部楼层   江西省宜春市
66666666666666666666
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 9 天

发表于 2021-4-30 11:52:04 | 显示全部楼层   广东省佛山市
感谢楼主分享!
回复 支持 反对

使用道具 举报

结帖率:86% (6/7)

签到天数: 2 天

发表于 2021-4-28 17:52:40 | 显示全部楼层   江苏省连云港市
某蜂窝分析混淆JS(加速乐)最新加密JS全过程
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:0% (0/1)
发表于 2021-4-28 09:23:24 | 显示全部楼层   河北省保定市
666666666666666666666666666666
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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