js逆向 极验滑块(记录学习 3.17)
目标网站:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s 首先感谢对我逆向学习路上的指点,向大佬看齐,respect!!
一、分析整体流程
1.点击按钮之前
刷新页面,服务器发送三个请求
①逐一看下去分析其中的参数,第一个是携带时间戳请求拿到gt ch值
②第二个是携带上个包返回的gt和ch值请求 获取js文件
③第三个携带gt ch 和 w 值获取无感验证(此处的w值可以置空
2.点击按钮之后
同样携带一堆参数请求该接口 其中比较重要的参数有gt ch
(注意此刻的ch值已经更新了
需要留意的值在上图标出,其中有底图链接,更新后的ch,c以及s值。
3.滑动之后
携带gt ch 和w参数请求该接口 其中w值中应该就包含了轨迹信息以及其他加密信息
验证成功会返回 success: 1 的信息
二、还原底图
下Canvas事件断点,然后点击刷新图片,直接可以断到图片还原的地方
可以根据它的算法自己用python或者其他语言还原
三、跟W值
这里就不跟栈去找了 直接搜"u0077" 定位到w值生成的地方
这里就着重说一下O里面的aa参数吧(包含轨迹信息
其他参数比较简单,正常跟就可以跟到生成的地方了
aa
可以看到aa : e, 然后e是从上一个方法的第二个参数传进来的,进去上一个方法栈看看
看到很长一段 l = xxxxxxxxxxx 复制出来分析一下
肉眼大概还原一下 l = 方法1( 方法2(), 参数2, 参数3 )
在控制台输出看看方法1里的三个参数都是什么
进去方法2 看看这一串乱七八糟的符号是怎么生成的
极验滑块分析基本到这里就结束了,其他参数的生成和加密都比较简单,慢慢扣还是能扣完的
四、部分代码
var aa = function(t) { var r = [] , i = [] , o = []; var $_BEHIs = lTloj.$_CX , $_BEHHw = [$_BEIBE].concat($_BEHIs) , $_BEHJy = $_BEHHw[1]; $_BEHHw.shift(); var $_BEIAO = $_BEHHw[0]; var e = function(t) { var $_BEIDv = lTloj.$_CX , $_BEICk = [$_BEIGW].concat($_BEIDv) , $_BEIEU = $_BEICk[1]; $_BEICk.shift(); var $_BEIFh = $_BEICk[0]; for (var e = [[1, 0], [2, 0], [1, -1], [1, 1], [0, 1], [0, -1], [3, 0], [2, -1], [2, 1]], n = 0, r = e[$_BEIDv(182)]; n < r; n++) if (t[0] == e[n][0] && t[1] == e[n][1]) return $_BEIEU(413)[n]; return 0; }(t); for (var num = 0; num < t.length; num++){ e ? i[$_BEHIs(140)](e) : (r[$_BEHJy(140)](n(t[num][0])), i[$_BEHJy(140)](n(t[num][1]))), o[$_BEHJy(140)](n(t[num][2])); } return r[$_BEGJJ(444)]($_BEGIH(33)) + $_BEGIH(407) + i[$_BEGIH(444)]($_BEGJJ(33)) + $_BEGIH(407) + o[$_BEGIH(444)]($_BEGIH(33)); } function t() { return (65536 * (1 + Math[random]()) | 0)[toString](16)[substring](1) };; function ot(){ return t() + t() + t() + t() } t2 = (new Date()).getTime(); function get_w(challenge,gt,out_time,track,c,s,n){ o = { lang: zh-cn, userresponse: H(out_time, challenge), // out_time ch passtime: n, // n imgload: 89, aa: jiami(aa(track), c, s), ep:{"v":"7.8.6", "$_BHR":false, "me":true, "tm":{a: t2, b: t2 + 144, c: t2 + 144, d: 0, e: 0, f: t2 + 2, g: t2 + 11, h: t2 + 35, i: t2 + 35, j: t2 + 53, k:0, l: t2 + 67, m: t2 + 133, n: t2 + 193, o: t2 + 164, p: t2 + 818, q: t2 + 818, r: t2 + 824, s: t2 + 1776, t: t2 + 1776, u: t2 + 1778 }, "td":-1}, gdmb: "1349311058", rp: U(gt + challenge + out_time) // gt ch out_time }; var l = V["encrypt"](JSON[stringify](o), ot()); var e = new X()[encrypt](ot()); return l + e; }
搞定✔ 继续努力,我们的目标是星辰大海!!!
理解不对的地方欢迎大佬指正。(抱拳
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
没有互联网的寒冬,只有程序员的寒冬(一)