Skip to content

dreamland-blog/CoinMarketCapSDK

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

SSL证书绕过绑定

这个网站比较容易绕过SSL的绑定

`frida -v` frida -U --codeshare masbog/frida-android-unpinning-ssl -f com.coinmarketcap.android

获取js代码解析字段加密


https://staticrecap.cgicgi.io/js/se/captcha/v1/captcha.min.js

list1

请求这个链接得到js挑战代码

流程分析

下发挑战链接请求得到js代码

https://api.commonservice.io/gateway-api/v1/public/antibot/getCaptch

list1

轨迹效验接口

https://api.commonservice.io/gateway-api/v1/public/antibot/validateCaptcha

用户注册的接口

https://api.coinmarketcap.com/auth/v4/user/signUp

验证码破解工具

完整的验证码破解 JavaScript 实现,支持 Grid(图片选择)和 Slide(滑块)两种验证码类型。

文件说明

  • captcha_crack.js - 核心破解代码,包含所有加密和签名算法
  • captcha_example.js - 使用示例代码
  • CaptChaCode.js - 原始混淆代码(用于参考)
  • AstCode.js - AST 解混淆工具

核心功能

1. 加密算法

const encryptedData = encryptData(jsonData, encryptionKey);

实现了完整的加密流程:

  • UTF-8 编码
  • XOR 加密
  • Base64 编码
  • 字符串反转混淆

2. 签名计算

const checksum = calculateChecksum(bizId + sig + encryptedData + salt);

简单的字符码累加校验和。

3. 环境指纹

const env = collectEnvironment();

收集浏览器环境信息:

  • WebDriver 检测
  • 移动设备检测
  • 插件列表
  • 平台信息
  • 窗口尺寸

4. 行为模拟

const behavior = generateBehaviorData('grid'); // 或 'slide'

生成真实的鼠标/触摸事件序列。

使用方法

Grid 图片选择验证码

const CaptchaCracker = require('./captcha_crack.js');

// 1. 从服务器获取验证码信息
const captchaInfo = {
    sig: 'signature_from_server',
    ek: 'encryption_key',
    salt: 'salt_value',
    captchaType: 'grid',
    tag: 'traffic light'
};

// 2. 通过图像识别得到选中的图片索引
const selectedImages = ['0', '4', '8'];

// 3. 生成提交参数
const params = CaptchaCracker.submitGridCaptcha(
    captchaInfo,
    selectedImages,
    'your_biz_id'
);

// 4. 提交验证
// POST to /validateCaptcha with params

Slide 滑块验证码

// 1. 获取验证码信息
const captchaInfo = {
    sig: 'signature_from_server',
    ek: 'encryption_key',
    salt: 'salt_value',
    captchaType: 'BOX'
};

// 2. 通过图像识别计算滑动距离
const slideDistance = 185; // 像素
const imageWidth = 310;

// 3. 生成提交参数
const params = CaptchaCracker.submitSlideCaptcha(
    captchaInfo,
    slideDistance,
    imageWidth,
    'your_biz_id'
);

// 4. 提交验证

API 接口

获取验证码

GET /v1/public/antibot/getCaptcha

参数:

  • bizId - 业务 ID
  • sv - SDK 版本 (20220812)
  • lang - 语言 (en)
  • clientType - 客户端类型 (web)

返回:

{
    "success": true,
    "data": {
        "sig": "验证码签名",
        "ek": "加密密钥",
        "salt": "盐值",
        "captchaType": "BOX 或 grid",
        "path2": "图片路径",
        "tag": "识别目标(仅 grid)"
    }
}

提交验证

POST /v1/public/antibot/validateCaptcha

参数:

  • sig - 验证码签名
  • data - 加密的行为数据
  • s - 校验和
  • bizId - 业务 ID
  • lang - 语言
  • sv - SDK 版本

返回:

{
    "success": true,
    "data": {
        "result": 0,  // 0=成功, 1=失败, 2=超时, 3=错误, 5=次数过多
        "token": "验证成功的 token"
    }
}

数据结构

Grid 验证码提交数据

{
    ev: {
        wd: 1,              // webdriver 检测
        im: 0,              // 移动设备
        de: '',             // 设备信息
        prde: 'plugins',    // 插件列表
        brla: 1,            // browserLanguage
        pl: 'platform',     // 平台
        wiinhe: 768,        // 窗口高度
        wiouhe: '800'       // 外部高度
    },
    be: {
        ec: {               // 事件计数
            mm: 5,          // mousemove
            md: 3,          // mousedown
            cl: 3,          // click
            mu: 3           // mouseup
        },
        el: [               // 事件列表
            '10|md|55,55|100|55,55',
            '10|mu|55,55|50|55,55',
            '10|cl|55,55|10|55,55'
        ]
    },
    dist: '0-4-8'          // 选中的图片索引
}

Slide 验证码提交数据

{
    ev: { /* 同上 */ },
    be: {
        ec: {
            md: 1,
            mm: 20,
            mu: 1
        },
        el: [
            '|md|10,150|0|10,150',
            '|mm|20,150|25|20,150',
            '|mm|30,150|28|30,150',
            // ...
            '|mu|200,150|50|200,150'
        ],
        th: {               // 滑块信息
            el: [           // 滑块事件
                'md|10,20',
                'mm|15,22'
            ],
            si: {           // 滑块尺寸
                w: '44',
                h: '44'
            }
        }
    },
    dist: '185',           // 滑动距离
    imageWidth: '310'      // 图片宽度
}

事件类型映射

mousemove    -> mm
mousedown    -> md
click        -> cl
mouseup      -> mu
touchstart   -> ts
touchmove    -> tm
touchend     -> te
touchcancel  -> tc
mouseenter   -> me

运行示例

# 安装依赖(如果需要)
npm install

# 运行示例
node captcha_example.js

注意事项

  1. 图像识别:代码中的 selectedImagesslideDistance 需要通过图像识别 API 获取
  2. 行为模拟:当前的行为数据是简化的,实际使用时应该更加真实
  3. 频率限制:注意 API 调用频率,避免被封禁
  4. 环境检测:某些环境(如 Selenium)可能被检测到,需要做反检测处理

图像识别建议

Grid 验证码

  • 使用 YOLO/SSD 等目标检测模型
  • 识别图片中的目标物体(如交通灯、汽车等)
  • 返回包含目标的图片索引

Slide 验证码

  • 使用边缘检测算法找到缺口位置
  • 计算滑块需要移动的距离
  • 考虑图片缩放比例

高级优化

  1. 行为数据优化

    • 添加更多随机性
    • 模拟真实的鼠标轨迹(贝塞尔曲线)
    • 添加合理的时间间隔
  2. 环境伪装

    • 隐藏 WebDriver 特征
    • 伪造插件列表
    • 修改 User-Agent
  3. 并发控制

    • 使用代理池
    • 控制请求频率
    • 实现重试机制

许可证

仅供学习研究使用,请勿用于非法用途。

作者

DreamLand

逆向版本

4.65.2

About

CoinMarketCap滑动验证

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors