shanel 发表于 2023-12-6 14:40

[JSvmp] 某书最新webprofile之profileData逆向算法

本帖最后由 shanel 于 2023-12-8 13:44 编辑


[*]抓包:

在request中上报的信息如下:

[*]platform: 平台
[*]profileData:加密数据(一些浏览器环境罢了)
[*]sdkVersion:版本
[*]svn:这是啥

主要分析的就是profileData;

2. 下断点
    这里直接搜的话是搜不到什么东西的,所以采用xhr断点进行调试:




跟踪堆栈:




堆栈打开可以看到是一个vmp,和签名x-s的很像



一般来说,代码使用vmp加密,最后能够实现补环境获取签名后,再在本地分析(我推荐的方式),但字节的vm都是跳来跳去的,一个签名可能使用了好几个vmp;
那么,开始补环境:
懂事的小伙伴都知道
x-s入口函数:window._webmsxyw()
profileData:window.xhsFingerprintV3.getV18




补环境(jsdom)
签名函数入口调用:



运行一下:


我擦,有结果了,格式看起来和网页上的一致
但是我不喜欢,执行vmp消耗的资源巨大,手上没点钱是顶不住业务机器的高并发的;

那么,分析算法:
首先,这个vm和之前的x-s的vmp很像,那么,根据之前分析x-s的思路来分析这个vmp会不会大大提升效率?开干!

打log调试,看看内存变化:




什么?乱七八糟的看不懂啊!!,别急,懂事的小伙伴已经看到了我标记的一处地点了,抓下来,base64看看是什么数据



这不就是浏览器各种各样的环境吗,太棒了。
分析到这里,笔者发现,这思路逻辑不就妥妥的和x-s的一模一样吗!?好的,开始验证::
在x-s签名算法中,我们使用的是"x1=" + x1 + ";x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0;" + "x3=" + setCa1 + ";x4=1687164665;"; 那么,我将这个字符串替换成我们上面得到的呢




好像不太一样;那换个key呢?返回到内存中看看有没有类似于key的数组存在



好吧,原来答案已经写在脸上了,当然前提要有和笔者一样分析过x-s的经验。
最好将key替换得到结果:





好的,完美结束!

hdm 发表于 2023-12-9 02:01

厉害啊,我在想有没有一种万能方法能狗直接解析出vmp的核心指令,通过某些方法检索到生成加密函数的位置

夜泉 发表于 2023-12-8 12:15

某书是啥?base64加密发出来下

shanel 发表于 2023-12-8 16:17

@涛之雨

huxian2020 发表于 2023-12-9 17:29

说的啥 都是图片 没有代码

Xistorg 发表于 2023-12-10 21:03

感谢分享

chenwen6 发表于 2023-12-11 16:00

感谢分享,学习学习。

shanel 发表于 2023-12-11 16:01

hdm 发表于 2023-12-9 02:01
厉害啊,我在想有没有一种万能方法能狗直接解析出vmp的核心指令,通过某些方法检索到生成加密函数的位置

有的,可以用js解析器,之前研究过一段时间{:301_999:}

zhunyunqq 发表于 2023-12-11 19:19

感谢 学习学习

charlieyyg 发表于 2023-12-11 19:33

看不懂,感谢分享
页: [1] 2
查看完整版本: [JSvmp] 某书最新webprofile之profileData逆向算法