文章目录
概要 记录一下补环境的分享
提示:仅供学习,不得用做商业交易,如有侵权请及时联系
逆向:ali系参数231的值
URL:aHR0cHM6Ly91cGF5LjEwMDEwLmNvbS91cGF5LXdhcC8/c2VydmljZVR5cGU9MDEmYnVzc1R5cGVJbj0mcGhvbmU9JmNoYW5uZWxLZXk9c3h3eCZqb2luU2lnbj0=
接口:aHR0cHM6Ly9jZi5hbGl5dW4uY29tL25vY2FwdGNoYS9hbmFseXplLmpzb25w
整体架构流程
提示:分析流程
一、找到加密位置:
javascript
fyglobalopt = {
Enable: 3,
MTInterval: 4,
MaxFocusLog: 6,
MaxKSLog: 14,
MaxMTLog: 300,
MaxNGPLog: 200,
MinMTDwnLog: 30,
NGPInterval: 4,
location: "cn",
timeout: 2000,
_umopt_npfp:1
}
o.__fy_options = fyglobalopt;
fyglobalopt.reqUrl = fyglobalopt;
单步进入我们发现,最终是在一个fireye.js的文件中生成的
二、分析初始化的环境值:将该文件全扣,补环境
我们看到,当初始化完成后,会出现一个数组W为127位,该数组可以确定你补环境是否与之一致,如果基本一致就说明补对了,后面当我们滑动滑块时,轨迹数组也会存在当中
三、下面说一下初始化时会有哪些检测 如果怕漏环境,最好是能挂代理的都挂上,能补原型的基本也补上
- window.hasOwnProperty 检测window中是否存在某些元素
- Object.hasOwnProperty / Object.prototype.hasOwnProperty 检测window下某个对象是否存在某些方法对象
- dom/bom检测 如创建标签,SCRIPT,style,canvas,span,div,audio,对标签对象进行一些操作,如appendChild、removeChild到,重点canvas、getContext、补充2d、webgl(getSupportedExtensions、getExtension、getParameter等)
- 检测方法的toString、Reflect.getOwnPropertyDescriptor(webdriver)
- getComputedStyle、performance.getEntriesByType等window的某些方法
- 其他 --- 能够将初始化127补对了,后面补出值的环境,其实都大差不差
注意ali140、227检测的时候:
HTMLDocument.hasOwnProperty('getSelection')是存在的
HTMLDocument.prototype.getSelection = function (){}
而ali231如果你补充了这个方法,那么:
[1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 247, 15, 254, 230, 127]会变成
[1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 5, 247, 15, 254, 230, 127]
javascript
B(54, fyglobalopt)
需要注意我们补环境时process.exit(0)这玩意带上,不然会处于宕机状态
说一下RTCPeerConnection 这玩意,可补空,如果需要补就这样
javascript
RTCPeerConnection = class {
}
RTCPeerConnection.prototype.getLocalStreams = function () {
}
RTCPeerConnection.prototype.createDataChannel = function () {
return {
onopen: function () {
}, onclose: function () {
}, onmessage: function () {
}, send: function () {
}, close: function () {
},
}
}
RTCPeerConnection.prototype.createAnswer = function () {
}
RTCPeerConnection.prototype.createOffer = function () {
return new Promise((resolve, reject) => {
const offer = {
sdp: "v=0\r\no=- 7557661829766968651 2 IN IP4 {14.216.134.96}\r\ns=-\r\nt=0 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\n",
type: "offer"
};
resolve(offer);
});
}
RTCPeerConnection.prototype.setLocalDescription = function (sampleDescription) {
return new Promise((resolve, reject) => {
resolve();
});
}
RTCPeerConnection.prototype.setConfiguration = function () {
}
RTCPeerConnection.prototype.addIceCandidate = function () {
}
RTCPeerConnection.prototype.addTrack = function () {
}
RTCPeerConnection.prototype.onicecandidate = function () {
}
RTCPeerConnection.prototype.localDescription = {
sdp: "v=0\r\no=- 7557661829766968651 2 IN IP4 {ip}\r\ns=-\r\nt=0 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\n",
type: "offer"
}
RTCPeerConnection.prototype.sctp = {}
webkitRTCPeerConnection = RTCPeerConnection;
四、说一下轨迹问题,轨迹的这里直接借鉴B站某博主的方法,因为该站轨迹校验不严,所以我们直接使用浏览器的轨迹
将W[8]、W[51]替换成浏览器的值!!!
五、最后直接看结果:
接口测试:
技术细节
也是补了一万年,2000多行
小结
提示:交流学习!!!