吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4171|回复: 15
收起左侧

[Web逆向] 某乎x96jsvmp算法还原新手初体验

[复制链接]
lianguhong 发表于 2022-6-6 01:54
本帖最后由 lianguhong 于 2022-6-6 08:50 编辑

@漁滒  跟栈跟值分析移步大佬文章 没人比大佬更详细 这里主要分析还原算法
样本:aHR0cHM6Ly93d3cuemhpaHUuY29tLw==

主要日志断点位置:
e.r[this.s][r](i[0], i[1]) -->主要是charCodeAt和charAt
e.r[this.c] + e.r[this.n] -->  密文拼接
e.r[this.c] | e.r[this.n]  -->  对每组每个元素的运算
e.r[this.c] & e.r[this.n] --> 密文运算  
e.r[this.c] >>> e.r[this.n] --> 每组二 三 四次密文运算
不妙 这里说完了怎么分析

直接进入算法分析环节
查看日志 从结果反跟 获得信息:密文为 'aXFqc4uykHtY6Rt0M_Y8FD98e8NpgU28G0Yyo09yoTNX'  当然这里是正确的结果
image.png
再往上看 发现 是计算出每个值并拼接而成 且仔细的靓仔也发现了 "X" 来自对照表.charAt(4,) 那么 "4" 来自哪里内 我们接着往上

image.png
push(4) pop(4)没用 接着往上
锵锵 对left值进行 & 63 得到 那么接着跟left的4

image.png
又是两个值运算  注意这两个值  经过1204791  >>> 得到4 charAt(4,) = “X”   当然还对1204791有兴趣 上跟

image.png
没有发现 right值18 反倒是一直在用left的值1204791 又对其12- 6- 63运算 并得到了密文后四位"oTNX"  继续跟1204791的生成 搜索 = 1204791

image.png
image.png
image.png
image.png
也是两个值运算得到  right值就在上面  这么近先跟它

image.png
两个值运算  好家伙永无止境了嘛 不是

image.png
终于看到传入的明文了 取了下标0并charCodeAt 明明是最后一个密文拼接还取0  搜索"8b7997937c8e4f4a0ca46008f9285561\u0000\".charCodeAt(  嗯 是倒着取明文的

image.png
所以前面1204791 的right值= charCodeAt(0,) ^ 42  << 16  当然42 和16 都是根据加密轮数变化的
1204791的left值就长跟短说 搜索 = 25143

删去点没有的日志 1204791的left值 = 55  |  charCodeAt(1,) << 8   这么简单 不是 由跑出个55是未知的 还有前面不是 << 16  这里又<< 8
image.png
只对charCodeAt(1,)  ^ 0   嗯 四个密文到头了  取了前三个下标内容 猜测就是倒序3个一组
image.png
单单一组 "oTNX" 的结束了 纵观全局也是这样处理的 无非运算时对几个固定值随加密轮数变化
结论
image.png
算法
测试这个函数,与浏览器生成的值是一样的   当然可以写的更优雅点
[JavaScript] 纯文本查看 复制代码
var jjj = "RuPtXwxpThIZ0qyz_9fYLCOV8B1mMGKs7UnFHgN3iDaWAJE-Qrk2ecSo6bjd4vl5"
function sign(data){
	let a = b = c = 0
	let A = [42,0,0,0]
	let B = [8,16,8,16] 
	let C = [63,6,12,18]
	let len = data.length
	len % 3 == 1 ? data += "\u0000\u0000" : len % 3 == 2 ? data += "\u0000" : null
	len = data.length
	let result = ''
	function AA(){
		a == A.length ? a = 0:null
		return A[a++]
	}
	function BB(){
		b == B.length ? b = 0:null
		return B[b++]
	}
	function CC(){
		c == C.length ? c = 0:null
		return C[c++]
	}
	for(;len > 0; len = len-3) {
		let D = (data.charCodeAt(len -1) ^ AA()) | ((data.charCodeAt(len -2) ^ AA()) << BB())
		let E = D |  ((data.charCodeAt(len -3) ^ AA()) << BB())
		result += jjj.charAt(E & CC())
		result += jjj.charAt((E >>> CC()) & 63)
		result += jjj.charAt((E >>> CC()) & 63)
		result += jjj.charAt((E >>> CC()) & 63)
	}
	return result
}
//sign(data)





2

2

免费评分

参与人数 9威望 +1 吾爱币 +27 热心值 +9 收起 理由
SSBB007 + 1 热心回复!
努力加载中 + 1 + 1 热心回复!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
coder9527 + 1 + 1 热心回复!
yxpp + 1 + 1 我很赞同!
杨辣子 + 1 + 1 这代码看的头大,佩服你
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小菜鸟一枚 + 1 + 1 用心讨论,共获提升!
tsu.xxw + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

moyanblade112 发表于 2022-6-7 08:51
多谢大佬!
Hmily 发表于 2022-6-6 15:04
lianguhong 发表于 2022-6-6 02:25
图越改越乱 我不玩了

为啥不直接发文字了?图片好像就最后一个没贴进去?
 楼主| lianguhong 发表于 2022-6-6 02:25
图越改越乱 我不玩了

点评

为啥不直接发文字了?图片好像就最后一个没贴进去?  详情 回复 发表于 2022-6-6 15:04
一米七五 发表于 2022-6-6 19:44
这也忒BT了
minibeetuaman 发表于 2022-6-7 09:03
分析VMP还是需要自动化工具辅助一下,徒手太硬了!
头像被屏蔽
shayu2021 发表于 2022-6-7 09:05
提示: 作者被禁止或删除 内容自动屏蔽
jiangshan567 发表于 2022-6-7 09:12
大佬牛逼
qwe2323 发表于 2022-6-7 12:51
大佬牛掰
Fxmles 发表于 2022-6-7 13:11
学习了,大神厉害
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 00:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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