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;

}

搞定✔ 继续努力,我们的目标是星辰大海!!!

理解不对的地方欢迎大佬指正。(抱拳
经验分享 程序员 微信小程序 职场和发展