QQ音乐 sign加密 jsvmp纯算法还原

接口:

aHR0cHM6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljcy5mY2c/Xz0xNzI3MjE1MzgyOTcxJnNpZ249enpjYjA4NmYwNG5yaDZmaTlkZnJlcWFxbm4xZHc3MWgxYWZjMzI0ZGY5

听说QQ音乐更新了新的jsvmp搞一哈,腾讯的jsvmp真挺恶心

正题开始

入口

进去是一个

vender.chunk的js文件

推荐插装位置

'case',n[g+1],'d-->',d

case:78

观察日志如下 可以发现四部分组成

zzc+7F8BDB4+xRwSHWDuKAhpwPbMUqGteWOfyeo+DCE141B1

其中zzc是固定的头

第二段 第四段分析如下

可以看出都是通过数组对'9C3BA18BBABC12F4D8F44CB72AE15FFCEC3EB059'进行取值拿到

数组分别是
arr1 = [16, 1, 32, 12, 19, 27, 8, 5] 
arr2 = [23, 14, 6, 36, 16, 40, 7, 19]

那就需要对

'9C3BA18BBABC12F4D8F44CB72AE15FFCEC3EB059'进行分析 长度40位,猜测SHA1

观察算法

分析一般需要明文

{"comm":{"cv":4747474,"ct":24,"format":"json","inCharset":"utf-8","outCharset":"utf-8","notice":0,"platform":"yqq.json","needNewCode":1,"uin":"1152921504688679048","g_tk_new_20200303":1543615683,"g_tk":1543615683},"req_1":{"module":"userInfo.VipQueryServer","method":"SRFVipQuery_V2","param":{"uin_list":["1152921504688679048"]}},"req_2":{"module":"userInfo.BaseUserInfoServer","method":"get_user_baseinfo_v2","param":{"vec_uin":["1152921504688679048"]}},"req_3":{"module":"music.lvz.VipIconUiShowSvr","method":"GetVipIconUiV2","param":{"PID":3}},"req_4":{"module":"music.musicasset.SongFavRead","method":"IsSongFanByMid","param":{"v_songMid":["004aJoYT3ia7al","003HSdVY3Z3GST","0017K7gL4WYnw2","0004zcfr0neC9O","00435Bsb3ulbB1","0022b7OX2STU86","0045FboO0aaIiC","003XT6Ef4H6X66","002bAj9d3gNu5G","004By6jG26HcCm"]}},"req_5":{"module":"music.musichallSong.PlayLyricInfo","method":"GetPlayLyricInfo","param":{"songMID":"004aJoYT3ia7al","songID":1030353}},"req_6":{"method":"GetCommentCount","module":"music.globalComment.GlobalCommentRead","param":{"request_list":[{"biz_type":1,"biz_id":"1030353","biz_sub_type":0}]}},"req_7":{"module":"music.musichallAlbum.AlbumInfoServer","method":"GetAlbumDetail","param":{"albumMid":"001aC9dM35U6KB"}},"req_8":{"module":"music.vkey.GetVkey","method":"GetUrl","param":{"guid":"8534347273","songmid":["004aJoYT3ia7al"],"songtype":[0],"uin":"1152921504688679048","loginflag":1,"platform":"20","filename":["RS020618fmVD1qUD6L.mp3"]}}}

测试一下sha1

现在三段已经解决了分析最麻烦第三段

通过在switch的日志 会有大概12W条 可以看到生成的位置应该打在case21 处开始加密

然后我选择先在case 78 插装 等到了 要进行的加密的时候 再打开swicth 慢慢跟一下可以减少看log的负担

这是在算法过程中一段日志 来分析一下

首先可以看到

他是2的倍数每次两个

通过日志可以看到 对上一步的字符串取了index是22的’5‘

然后5*16 = 80

回到22

进行自加1操作

得到 23然后又从字符串取了index为23的5 然后把一开始的80和5 相加得到85

接下来从一个20位的固定数组取了index为11的123

然后做异或得到

再把46存到数组里 这就是里面算法的过程

为了更深一步的说明 我们在仔细看一下里面有一个{0:0,1:1,2:2......}这个是干啥用的

跟栈就好了下面拿日志举例子

可以发现{0:0,1:1,2:2......} 的作用其实就是 通过映射表找到对应的字母所对应的数字0-15

然后又取了字符串的第25位”0“

然后就是176+0 = 176 存入数组

这个过程其实和JavaScript中的parseInt("B0",16) 进制一样 总的来说就是每次取俩个值然后转成16进制: B:12  11*16= 176   ; 0:0 0*1=0   176+0 = 176

最后拿到数组后进行base64操作
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='

xRwSHWDuKAhpwPbMUqGteWOfyeo=
删掉 = 

将上面的拼接得到
'zzc7F8BDB4xRwSHWDuKAhpwPbMUqGteWOfyeoDCE141B1'

最终的结果是

'zzc7f8bdb4xrwshwdukahpwpbmuqgtewofyeodce141b1'

所以需要最终的结果是需要转小写

zzc7f8bdb4xrwshwdukahpwpbmuqgtewofyeodce141b1

完结

如有问题请联系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值