文章目录
概要
提示:仅供学习,不得用做商业交易,如有侵权请及时联系
逆向 :JS逆向 - 某住会同盾blackbox纯算分析
URL:aHR0cHM6Ly9zaWduaW4uaHdvcmxkLmNvbS9sb2dpbj9yZWRpcmVjdFVybD1odHRwcyUzQSUyRiUyRnd3dy5od29ybGQuY29tJTJG
整体架构流程
提示:分析参数及加密位置
1、全局搜索black_box

最后生成的位置,直接在此处下断点,然后往上跟一个站、

Q0OoO()这个函数就是生成blackbox的位置,我们进去看一下return的情况


所以我们需要找到t(全局搜索)是怎么来的,而v这里你多刷几次会知道是一个固定的值(版本)


2、 这里有一堆参数,都是需要逆向分析的,直接通过断脚本,找到加载的位置


3、初始化加载之后,继续往下跟栈

这里我们看到QQoO0是有一个全局对象,ubid是一个时间戳+随机字符串,继续往下看

4、跟到这里面,就是生成profile.json发包的那些参数了(可以AST代码还原代码,然后替换代码)
-
首先找到fm.js


-
可以看到fp文件也是动态的所以,我们也需要替换
5、替换之后我们找到上面分析的那个位置进行断点

6、这里我就不一步步跟着去分析了,直接上插装
javascript
fm.js?ver=0.2&t=491895:3835 zhiw数组: 738
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1536
fm.js?ver=0.2&t=491895:3835 zhiw数组: 11110
fm.js?ver=0.2&t=491895:3835 zhiw数组: 864
fm.js?ver=0.2&t=491895:3835 zhiw数组: 295
fm.js?ver=0.2&t=491895:3835 zhiw数组: 824
fm.js?ver=0.2&t=491895:3835 zhiw数组: d3a9f77bed605f4a9e2a782955b65f1a
fm.js?ver=0.2&t=491895:3835 zhiw数组: zh-CN,zh
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1
fm.js?ver=0.2&t=491895:3835 zhiw数组: Google Inc. (Intel)-&-ANGLE (Intel, Intel(R) UHD Graphics (脱敏数据) Direct3D11 脱敏数据, D3D11)
fm.js?ver=0.2&t=491895:3835 zhiw数组: functiongetoffsetHeight(){[nativecode]}
fm.js?ver=0.2&t=491895:3835 zhiw数组: 6ef4a53a32a3086171ad14d663a1e981
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 2d935b92b11329aa1d14e4a780e02361
fm.js?ver=0.2&t=491895:3835 zhiw数组: 738
2fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 280
fm.js?ver=0.2&t=491895:3835 zhiw数组: 48000_2_1_0_2_explicit_speakers
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 脱敏数据|b0f2202fc3f0f72f424ca4fc6db815df
fm.js?ver=0.2&t=491895:3835 zhiw数组: [object Window]
fm.js?ver=0.2&t=491895:3835 zhiw数组: functioncreateAnalyser(){[nativecode]}
2fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 139720
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 824
fm.js?ver=0.2&t=491895:3835 zhiw数组: 8
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1770822894492
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1536
fm.js?ver=0.2&t=491895:3835 zhiw数组: 0
fm.js?ver=0.2&t=491895:3835 zhiw数组: Webkit-Chrome
fm.js?ver=0.2&t=491895:3835 zhiw数组: functiongetParameter(){[nativecode]}
fm.js?ver=0.2&t=491895:3835 zhiw数组: Win32
fm.js?ver=0.2&t=491895:3835 zhiw数组: zh-CN
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1536
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 脱敏数据|01100100011111111011111011011111011111011011110001111111111011111
fm.js?ver=0.2&t=491895:3835 zhiw数组: Netscape
2fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 480
fm.js?ver=0.2&t=491895:3835 zhiw数组: https 脱敏数据
fm.js?ver=0.2&t=491895:3835 zhiw数组: Mozilla/5.0 脱敏数据
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1
fm.js?ver=0.2&t=491895:3835 zhiw数组: Mozilla
fm.js?ver=0.2&t=491895:3835 zhiw数组: u9VVQzDE0zrnrPfu0Drv6ZFNy\0EqfWtLowPO1iAjSMOMtmwAYxguM64fqGMuBhvQFfavEPvDYDxWpbxaNRUupnmMw8wGXUwMi6JX687cNzcx6ivpTJ5HbJwd38cCaZU
fm.js?ver=0.2&t=491895:3835 zhiw数组: 33
fm.js?ver=0.2&t=491895:3835 zhiw数组: functiontoString(){[nativecode]}
fm.js?ver=0.2&t=491895:3835 zhiw数组: 8
fm.js?ver=0.2&t=491895:3835 zhiw数组: functionenumerateDevices(){[nativecode]}
fm.js?ver=0.2&t=491895:3835 zhiw数组: 1
fm.js?ver=0.2&t=491895:3835 zhiw数组: 8
fm.js?ver=0.2&t=491895:3835 zhiw数组: [objectPluginArray]
fm.js?ver=0.2&t=491895:3835 zhiw数组: N1nyPKdX-1770822894576-9619e57598bdf692669836
fm.js?ver=0.2&t=491895:3835 zhiw数组: -
fm.js?ver=0.2&t=491895:3835 zhiw数组: 8
fm.js?ver=0.2&t=491895:3835 zhiw数组: functiontoDataURL(){[nativecode]}
fm.js?ver=0.2&t=491895:3835 zhiw数组: 8
fm.js?ver=0.2&t=491895:3835 zhiw数组: functionRTCPeerConnection(){[nativecode]}
需要注意的是 var OQOQO = new window["Date"]()["getTime"]()["toString"](32);每次拼接指纹都是会变的
技术名词解释
提示:加密a、b、c、d、e、f、g.......
- 使用的是魔改的SM4加密,CBC模式
- 默认发IV值是:1234567812345678
- key是指纹里面的idf.substring(0, 16)
- 指纹数组里面的32位字符串,其实是浏览器指纹进行Fingerprint2.x64hash128加密
技术细节
提示:纯算实现结果

小结
提示:学习交流主页,星球持续更新中:(+星球主页+v)