360滑块验证码逆向

查看 79|回复 9
作者:13955925361   
又拖更了好久,不过并没有偷懒哦。给大家搞个天域滑块。初始接口是auto,注意到nonce,timestamp,sign需要逆向。
nonce比较好搜,直接关键词定位到2179行,sign名字被混淆了,向下稍微找一下,在这。完整代码我放压缩包里了。


QQ20250818-105357.png (300.2 KB, 下载次数: 4)
下载附件
2025-8-18 14:34 上传

        


QQ20250818-105934.png (220.84 KB, 下载次数: 3)
下载附件
2025-8-18 13:25 上传



QQ20250818-110702.png (316.32 KB, 下载次数: 3)
下载附件
2025-8-18 13:31 上传

                 
[JavaScript] 纯文本查看 复制代码
function get_sign() {
    nonce = Math["round"](
        new Date()["getTime"](),
    ) + Math["floor"](
        0x5f5e100 * Math["random"](),
    )
    timestamp = Math.round(new Date()["getTime"]())
    _0x3ca1de = `appIddc1db94ea7b3843cdc0ec0hc0nonce${nonce}os3pc0phone10000000000pncom.web.tianyurc0sdkName360CaptchaSDKtimestamp${timestamp}type1uinullversion2.0.0xc0`
    sign = Crypto.MD5(_0x3ca1de).toString()
// console.log(sign);
// console.log(Crypto.MD5('123456').toString())}
    return {'timestamp': timestamp, 'nonce': nonce, 'sign': sign}
}
验证码图片有乱序,需要还原底图。


bg.png (241.2 KB, 下载次数: 3)
下载附件
2025-8-18 13:35 上传

                  


output.png (233.11 KB, 下载次数: 4)
下载附件
2025-8-18 13:35 上传

            


front.png (23.66 KB, 下载次数: 3)
下载附件
2025-8-18 13:35 上传

在事件监听断点的画布上打上个√,断在1处,2处是背景图,核心代码在2下面一段做了分割操作。


QQ20250818-124254.png (442.53 KB, 下载次数: 5)
下载附件
2025-8-18 13:37 上传

核心代码如下: 滑块背景图分割还原数组JS函数
[JavaScript] 纯文本查看 复制代码
function get_Img(
        _0x121c70,
        _0x10dcdd,
      ) {
        const _0x58b550 = {
          uKQaL: "includes",
          LRljw(_0x52e5da, _0x58ed7b) {
            return _0x52e5da === _0x58ed7b;
          },
        };
        function _0x1c18e2(_0x2a7547, _0x2daf7e) {
          if (_0x2a7547[_0x58b550["uKQaL"]])
            return _0x2a7547[_0x58b550["uKQaL"]](
              _0x2daf7e,
            );
          for (
            let _0x282371 = 0x0,
              _0xca62fe = _0x2a7547[_0x208f76(0x3ec, '\x66\x40\x31\x4c')];
            _0x282371
底图背景还原函数Python代码
[Python] 纯文本查看 复制代码
def restore(img):
    lis=js_code.call('get_Img',img)
    bg_img=Image.open('bg.png')
    recover_img=Image.new('RGBA',(544,284),'white')
    for index, item in enumerate(lis):
        x = index * 17
        y = 0
        l = bg_img.crop((x, y, x + 17, y + 284))
        recover_img.paste(l, box=(item * 17, 0))
    recover_img.save('output.png')
滑块缺口图滑动距离Python代码
[Python] 纯文本查看 复制代码
import logging
def get_distance(bg_img):
    """
    使用Recognizer识别滑块验证码的缺口位置并计算滑动距离
    参数:
        bg_img: 滑块背景图片(文件路径或OpenCV图像对象)
    返回:
        计算后的滑动距离(像素)
    """
    # 初始化识别器
    recognizer = Recognizer()
    # 识别缺口位置和置信度
    box, confidence = recognizer.identify_gap(source=bg_img, verbose=False)
    # 记录日志
    logger.debug(f'可信度: {confidence}')
    # 计算滑动距离 (原始代码中的/r544可能是笔误,实际应为/)
    return int(box[0] / 544 * 300)  # 将原始坐标转换为目标距离
# # 配置日志
# logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# 使用示例
distance = get_distance("output.png")
print(f"需要滑动的距离: {distance}像素")
滑动轨迹模拟Python函数
[Python] 纯文本查看 复制代码
def generate_trace(slide_distance):
    """
    生成滑块验证的轨迹数据
    参数:
        slide_distance: 需要滑动的总距离(像素)
    返回:
        包含轨迹数据的列表,每个点包含x坐标、时间戳和y坐标
    """
    traceData = {}
    x = 0
    t = int(time.time() * 1000)  # 当前时间戳(毫秒)
    y = random.randint(210, 220)  # 初始y坐标
    traceData[str(x)] = {'t': t, 'y': y}
    while x = slide_distance:
            x = slide_distance  # 确保不超过目标距离
            traceData[str(x)] = {
                't': t,
                'y': y + random.randint(-1, 1)  # y坐标微小波动
            }
            break
        traceData[str(x)] = {
            't': t,
            'y': y + random.randint(-1, 1)  # y坐标微小波动
        }
    return [traceData]
检验接口是check,参数大部分是上次请求返回的,length是滑动距离,主要逆向report,这个也可以关键词搜索。


QQ20250818-110758.png (331.12 KB, 下载次数: 2)
下载附件
2025-8-18 13:45 上传

      


QQ20250818-113616.png (355.03 KB, 下载次数: 2)
下载附件
2025-8-18 13:45 上传

点进控制台2里的方法,是核心加密位置,如下图所示。其中标注的 new JSEncrypt( ) 函数方法点进去文件要全扣,
补个window=global,navigator={ } 。加密位置RSA加密,公钥是atob(k) ,一起传入的还有captchaId,token和轨迹。


QQ20250818-113639.png (200.63 KB, 下载次数: 5)
下载附件
2025-8-18 14:00 上传

核心代码:[JavaScript] 纯文本查看 复制代码
function report(data,k,captchaId,token) {
          _0x42739f=JSON.stringify(data)
          const _0x145c35 = new JSEncrypt();
          const _0x4070dc = {
        "vConfig": {
        "k": k,
        "captchaId": captchaId,
        "token": token}}
          return (
            _0x145c35["setPublicKey"](atob(_0x4070dc.vConfig.k)),
            _0x145c35["encryptLong"](_0x42739f)+ Crypto.MD5(_0x4070dc["vConfig"]["captchaId"]+ _0x4070dc["vConfig"]["token"]).toString()
          )}


QQ20250818-143914.png (194.56 KB, 下载次数: 3)
下载附件
2025-8-18 14:39 上传

下载次数, 代码

lwj1367   

大佬,能分析一下某q电脑版空间相册转载大量图片时的验证码机制吗,他那个验证码只允许IE浏览器的环境下显示,并且输入之后依旧无反应
diyuranshao   

很厉害,感谢分享
2313737565   

感谢分享
eoo   

向大佬学习
zpbooks   

大佬好厉害,收藏学习下
shiqiang   

感谢分享,下载试用。
milokernel   

好厉害,收藏学习下
wuyy   

很厉害,感谢分享
kulouxiaohai   

用C语言能实现上面的代码吗?
您需要登录后才可以回帖 登录 | 立即注册

返回顶部