某盾代码js版流程分析从无感到空间点选(fp值和无感)
你只管努力,剩下的交给天意。
文章只提供学习,如有侵权请立即联系我。
前言先声明此文章只讲流程某盾的流程分析,而且某盾的跟新快,建议学习流程。
某盾官网:官网
总体来说某盾的验证码配合js总共分为四套
【fp和无感】
【actoken及滑块】
【轨迹加密以及图标拼图ast还原】
打开官网第一眼就是这个样子。
点击看看效果都有神马值
没错就是这个validate
一开始想搜一下的,想了一下,-,-不太合适,直接找来源去看看怎么回事吧。
在你点进来的地方打上debugger
清除缓存刷新再试试
卧槽,没有debugger
住这是怎么回事?(如果debugger
住了也不要紧过一会就debugger
不到了,嘿嘿,你追不到我吧,追了就让你嘿嘿嘿)
这是是因为core这个请求每次都会变每次的时间不同,获取到的core就是是一个新的60秒一个,也就是说一分钟内你找不到这个点就GG了,那咋整?
别慌上一篇我们说了血轮眼(ast
)的使用,这篇我们用替身
来解决这个问题
那什么是替身呢–fiddler
没错就是它,他不是抓包分析的吗?怎么又成替身了,因为fiddler可以拦截请求在中间做操作,那就意味着我在中间这一会会的时间可以为所欲为
看下面让我们猥琐起来。
找到core
的源码赋值粘贴到js文件里名字要相同。
添加好之后再第一行一个consol.log以便测试是否替换成功。
接下来,进行这几个操作。
然后在fiddler
里cat+f
搜索core
关键字找到我们要替换的链接
点击要替换的链接点击add rule
看看是否找到正确的了。
想这个样子
但是这样还不行,因为这个会匹配不到这个链接,去掉exact和v=xxxx,成这样就可以每次都匹配到了。
点击test看看是否匹配到,没问题。
接下来一定要点击save,save,save
不然无法使用。
替换完成后,看看效果。
这里说一下有很多种中间代理都可以修改并替换文件,不只是fiddler
你可以使用任何软件或者chrome
都可以这只是一种思路。
我们在从新从入口去看看能否看到我们想要的参数。
心里美滋滋
点击调用栈看看提交的时候都需要哪些参数,他们来源何方。
分析一下我们需要的参数是固定的还是需要js生成的。
其他能搜到的就不演示了看看token
吧!
看完这些我们大概直到现在要找的值就是cb
和data
。
再回到我们刚才debugger
的地址
cb
其实就是一个函数我们在本地的js
里看看cb
是什么,原来是32的uuid
那没事了
那么现在就剩下那个data
值了调用栈走起来,呕吼原来就是这样子的呀。
s就是dom元素的信息
j就是滑动的轨迹加时间
没错这就是无感的操作了
等等,我们的token
值还没获取呢,对再看看看token
是如何来的。
token 的值大概也就能猜出来也就这一个值在变就fp
其他的值都找过的。
直接在这里面搜索fp试试
md出现了两个?我们都打上断点试试,清除缓存
OK完美的hook到了,我们看到这值是来其他的函数,我们继续根据调用栈向上找。
我们发现第一个栈里是这样的,发现已经有fp的值了,我们继续向上找
第二个调用栈里发现试着这里赋值的,继续向上找。
发现在这里并没有我们想要的值,我们回到第二个调用栈在赋值那里打上断点重新hook
会发现我们的调用栈发生变法并且找到了fp的来源
点i这个调用函数就会发现新大陆,搜嘎,那么这个gdxidpyhxde是什么时候回给赋值到window身上的呢?
我们需要用到油猴去写一个hook脚本就hook这个gdxidpyhxde(保住头发)
注意:// @match https://*/* // @run-at document-start
这两个的意思分别是hook什么网站和什么时候注入,我们选择的时候https的网络全部hook,以及在生成document对象之前去代理window.gdxidpyhxde这个属性的get方法和set方法
// ==UserScript==
// @name hookgdxidpyhxde
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://*/*
// @grant none
// @run-at document-start
// ==/UserScript==
(function() {
'use strict';
var _fp =window.fp;
Object.defineProperty(window,'gdxidpyhxde',{
get:function(){
console.log("调用了fp",_fp)
return _fp;
},
set:function(val){
console.log("设置了fp",val)
debugger;
this._value = val;
return val;
}
})
// Your code here...
})();
打开刷新,清除缓存试试。
就会hook到这里
继续向下执行查看我们到底在哪里生成的fp
到这里—重点来了就是这个函数
第一个给赋值为空我们再次按F8执行我们就会发现,这就是我们需要找的fp,向上找发现就这这个W函数生成的fp
这个w函数检测了很多window属性也就是游览器指纹
第一个值是主站的地址,第二个是navigator和canvas等游览器属性生成的根据你游览器版本不一样生成的这两个值不一致可以写死
,然后单独拿出来w函数去补缺失的其他函数。
下面看看我抠出来的函数
*****************重点修改**************
这里建议注释掉try和catch ,最后一段没并没有什么卵用直接删除掉就好了
这样我们就可以拿到正常的fp了
去测试无憾的代码试试
小彩蛋
:最后的最后给大家说个
坑其实无感是不验证
fp的即使为
空依然可以请求成功(但是滑动和点选择的验证了,而且是必经之路,有很多小伙伴都死在这了这一步
fp验证不成功获取到的
token和图片是无法使用的)
最后的最后相信很多朋友看到这个·chrome
不一样代码
版本也不一样,是因为我几个月前就写好了,后来发现一些问题然后又修改了,直到今天才发版出来但是实际的操作就是这样的没有任何问题。
鸣谢:感谢我我好大哥布哥哥
以及凡哥,飞机,晚安,懒哥,夏洛,明哥
七位哥哥帮助帮助。
有疑问可以加群讨论:【1147451684】
本文地址:https://blog.csdn.net/qq_38999456/article/details/108294967