赞
踩
这个同盾没有经过混淆所以还是不是很难的
本文章中所有内容仅供学习交流使用,不用于其他任何目的侵权请联系我,马上删除。本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除!
首先我们分析的是瑞幸小程序的登录的滑块如图:
查看数据包:其实同盾的滑块,特征就是,他的获取滑块背景图和验证的接口都是一个 v1,如果你第一次没滑动通过就会返回下一次的背景图片和信息,反之就会返回 类似这个 validateToken': 'f5tV5+9VVsiZ2CdW3tm8MiJUiZCyDhN8WgLAzbuUU5Y=_2
接下来我们就去看一下 他的参数 有 p1-p8 一共8个参数 (验证和获取滑块都是需要这些) 是需要我们去解析出来的:
首先打断点进入 validateCode 这个位置
进去后可以看到p1-p9的参数:
再跟一层堆栈 就会看到 e.assembleParm(t.blackbox) 传入了一个blackbox 就会得到我们的p系列参数 (blackbox 暂时定死测试可以通过)
里面没有混淆 比起官网来说还是蛮好的对我们逆向来说。
这个是人家里面的代码,我们可以看到里面aes 和md5的字眼,经过测试md5是正常的aes正常的aes 模式我们可以选择扣代码或者取套用库来实现:
我的方法 md5套用库 aes 直接扣代码(aes的代码我省略的太长了 自己去扣),另外还需要一个generateMixed函数直接扣出即可:
const CryptoJS = require("crypto-js"); function md5(message) { var hash = CryptoJS.MD5(message); var encryptedMessage = hash.toString(); // console.log(encryptedMessage); return encryptedMessage; } function aes(r, e) { //此次省略 aes的代码 // console.log(s) return a.AES.encrypt(r, s, { iv: f, mode: a.mode.CBC, padding: a.pad.Pkcs7 }).toString() } function generateMixed(r) { for (var e = "", t = 0; t < r; t++) { e += "abcdefghijklmnoqprstuvwxyzABCDEFGHJIKLMNOPQRSTUVWXYZ0123456789"[Math.ceil(35 * Math.random())] } return e }
接着:
把该还原的地方手动还原即可:
``
function assembleParam(e, o, d, r, n, c) { e = e || "|"; s = "|"; a = '-'; i = '^^'; var l = d || s , u = r || s , h = s , g = s , p = n || s , m = c || 0 , f = s , v = (new Date).getTime() , b = Math.random().toString(16).substr(2) , C = 'luckincoffee' + a + v + a + b , O = "rsp67ou9" + (v + a + b).substring(10, 18) , T = undefined , S = "ln94BZEnz9rJTuNXUBMUEa==" + i + C + i + 'luckincoffee' + i + 'luckincoffee_xcx' + (T ? i + T : "") , k = e + i + o + i + 1 , D = (aes("", O), aes(md5(S + i + k) + i + l + i + u + i + h + md5(""), O)) , y = aes(g + i + p + i + m, O) , j = generateMixed(8) , w = aes(j + f, O); return { token: C, blackbox: e, p1: S, p2: k, p3: D, p4: y, p5: "mini", p6: w, p7: md5(w) + md5("") + generateMixed(32), p8: j, mode: 2 } }
这里需要注意的点是 获取图片和提交滑块都是走的这里, 所以 ,有的参数我们需要去主要一下他们会有一些变化例如
k = e + "^^" + 1 + "^^" + 1 //获取滑块 k = e + "^^" + 3 + "^^" + 1 //提交 //还有 function assembleParam(e, o, d, r, n, c) 这个的 d 参数 也是不一样的 //获取滑块 d = 0 //提交的时候 d = JSON.stringify(validateCodeObj) //validateCodeObj 在第一次 获取滑块时候 会返回 //第四个参数 r 也要注意 a = Math.round(distance_X) + "|10|" + (new Date).getTime(),//提交的时候 distance_X是我们滑块识别的距离 // mode 需要注意
总之多去对比就行 ,distance_X是我们滑块识别的距离。
所以到这里我们大体的分析就完成了。
首先我是先做的官网的滑块,所以直接拿来就能用,大家可以百度搜一下 我就不多赘述了,本来打算给大家找一下还原的过程但是小程序不知道为啥我这边代码有点卡,就不带大家找了。
大概就是用bgImagesplit... 这个数据进行还原 自行百度或者私聊我
`
let vx = 15232101239
`
我的 wx:
let my_wx = 15232101239
wx交流群:群满了 加我私聊我拉交流群
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。