本帖最后由 shangjS009 于 2024-7-30 02:04 编辑
本文仅用于学习研究,请勿用于非法用途和商业用途!如因此产生任何法律纠纷,均与作者无关!如有问题,麻烦版主立即删除1
麦常见的时1.75和2的版本,现在1.75版本基本上看不到了 ,都是2的版本
2. 特征
特征
也是通过cookie加验证 根据cookie 键的_abck 返回~-1~ 则是失败 ~0~则为成功
2
请求首页会返回三个cookie,响应也会有一个外链的js
6
需要对这个js地址发送一次get请求,第二次对这个接口发送一个post请求
4
sensor_data 就是要逆向目标
逆向的时候可以用xhr调试 也可以从 发起程序的第一个位置开始
由于这个js是动态的,所以要把首页固定住,给他替换一下
3
就是这里了 直接搜 Wp = 会搜到大概11个 都下好断点 会把这个Wp 参数生成返回 ---> 生成返回 起码要解5次, 全扣不太现实
从第一个开始分析 会得到一个58位的数组,在用"join" 拼接IDA console, courier new, monospace">dN
58
这个58位的数组 就是小麦最核心的地方了 , , , 这个58位数组会记录很多风控的信息 特别重要 会检测你的ua 插件信息 分辨率显卡配置指纹 权限指纹 鼠标轨迹 方法执行次数
只能慢慢测 慢慢扣
xN = [JJ.Sc(zw, np, Gt, kk), GB, JJ.Lc(Op, jp, kk, wk), zp, JJ.Gc(cp, Q7), t8, JJ.Yc(rp, g2, nh, tk), qB, JJ.Zc.apply(null, [Fp, mw]), l8, JJ.nc.apply(null, [z2, Ep]), m8, JJ.Oc(Up, tQ, Hp, kk), Kp, JJ.jc(RQ, MB, wk, gl), TB, JJ.zc(hB, ns, G7(G7([])), q2), fp, JJ.cc(G7(l7), l7, FN, J2), h8, JJ.rc.apply(null, [Kl, HQ, G7({}), P2]), Cp, JJ.Fc.apply(null, [mw, AN, Sk, vk]), NB, JJ.Ec(Jk, G7({}), qp, RQ), dv, JJ.Uc(Rp, bw), lB, JJ.sS(nh, gw, lk, Zh, dk, nB), Ip, JJ.Hc(bp, d7), Is, JJ.Kc.apply(null, [DQ, fv]), ss, JJ.fc(Tp, nB), ps, JJ.Cc(Rl, tp, zw, Um), As, JJ.pS(gw, lp, nB, rv), mp, JJ.qc(fk, hp, H2, x7), Vs, JJ.Rc(kp, wp), Jp, JJ.Ic.call(null, Np, Bp), Yp, JJ.bc.call(null, Uh, J2, Yh, Q7), vp, JJ.Tc.apply(null, [gk, Qp]), QB[JJ.DY(rm, Sm)], JJ.AS(gw, sp, Hm, f2), OQ, JJ.gS(dk, gw, nB, Hm), p8, JJ.tc.apply(null, [cB, pp])
数组的第一个(JJ.Sc(zw, np, Gt, kk))是 -100
第二个GB 前面是ua的信息 后面就看不懂了 直接搜GB
GB
BG 第一个接收的是一个60 第二个接收的是一个数组
123
跟到方法会发现 他实际调用的就是数组的第一个方法YB
数组调用的方法
这个时候直接找YB这个方法就可以了, (中间搞了很多)
直接进去YB 这个方法看看 干了什么
YB进去
1、YB U7.push(ZV); 第一行这个就是记录代码执行的过程 push提交 pop删除 所以 采用魔法是搞不了的 只能扣
下面就是var nV = j9(); 就是ua 直接写死
2、YB var OV = (JJ.cG(jV, x7))[JJ.PY(Hw, G7(G7([])), zV, H2)](j7(JK, [JQ, g7, nV])); 这里就是"concat" 拼接j7 (j7实际调用的还是[]里面的 JQ 上面有说到)
jQ直接跟进去后发现就是根据ua生成对应的 编码 ,既然是根据ua生成 那么直接固定
JQ
3、YB var cV = D6(PJ[JJ.RJ(rV, Eh, Uh, rv)].bmak[JJ.pn.call(null, Hh, O3)], zt);
我问过了豆包了 这个就是记录访问小麦开始的时间
就是时间戳 除以 2的值
开始时间
4 、YB RV = PJ[JJ.nY(zl, bV, Sw, Sm)](Ks(JJ.zF(Cv, cB, jd, P2), PJ[JJ.RJ.apply(null, [rV, Eh, Uh, bl])]) || Sl(PJ[JJ.mJ(Tl, K9, Um, Hm, rv, Um)][JJ.cF.apply(null, [V7, g7, FN, Kl])], g7) || Sl(PJ[JJ.mJ(Tl, K9, bw, Qw, Ow, Um)][JJ.rF(TV, tV)], g7));
这一个就是获取设备的触摸点数量我这是电脑没这个 所以是0
触摸点
还有上面就是-1
-1
下面有一个要注意的就是window.innerHeight 这个是获取浏览器网页窗口的高度 (这里有坑 最好是把调试窗口单独拿出来)
流程大概就是这样了 ,这就是第二个数组(参数是不能写死的 否则过不了风控) 然后还有组数还要慢慢去扣,现在的时间是2024年7月30日01:58 太晚了 我要睡觉了
流程
-
|