Learning Man's Blog

验证码破解系列 —— 数美

字数统计: 599阅读时长: 2 min
2018/12/24

实验对象: https://v.6.cn/
模式: 滑动验证码

0x01 数据包流程分析

Step 1 初始化

  1. 请求初始化

     https://captcha.fengkongcloud.com/ca/v1/register?organization=TKWQ4vmgC3PJLGDTMIoJ&appId=default&channel=DEFAULT&lang=zh-cn&model=slide&rversion=1.0.1&data=%7B%7D&callback=sm_1546058325312

    需要注意的几个参数

    • organization : 每个网站独有
    • model : 验证码模式三选一 select | slide | auto_slide
    • version : 版本号
  1. 初始化响应

     {
         "code": 1100,
         "detail": {
             "bg": "/cr/v1.0.1/set-000008-1.0.1-r1/a10669c7d5484169d48acf659b228794_bg.jpg",
             "bg_height": 300,
             "bg_width": 600,
             "domains": [
                 "castatic.fengkongcloud.com"
             ],
             "fg": "/cr/<v1 class="0 1"></v1>/set-000008-1.0.1-r1/a10669c7d5484169d48acf659b228794_fg.png",
             "k": "wxRt9dnGF04=",
             "l": 8,
             "rid": "20181229123843dcd75537a6502e1159"
         },
         "message": "success",
         "requestId": "215f0e3369ea61788be5d4ffb2d4a045",
         "riskLevel": "PASS",
         "score": 0
     }

    需要注意的几个参数 klrid

Step 2 验证码验证

https://captcha.fengkongcloud.com/ca/v1/fverify?organization=TKWQ4vmgC3PJLGDTMIoJ&appId=default&channel=DEFAULT&lang=zh-cn&rid=20181229123843dcd75537a6502e1159&act=%2FGA8NmZgtaL7A4F4Ptfs7aEBFKbSG3DNpyxkYUKVTHpPgOjRiERrE4jK5B9CVR%2B02f92GZ8CbzpwHwPUjFkiTyLTmEH%2BwEUWwC7DfC%2B5fUDX2%2BH7mJIJsRngF87BHBcntfHtkOd182apukKBGkMLURngF87BHBcn19VCJalqDCm0AlbDj8ulu1OgCLT5wU6Hz5dRiq1O1vPFtq7BKohFQ8plPGFiDLmEzXDKfTbVOIs%3D&callback=sm_1546060999834

请求参数organizationrid都在上面提到,在这里最重要就是加密参数act,破解了act就万事大吉

0x02 加密参数分析

Step 1 如何跟入函数

  1. 在 F12 中跟入最底层触发函数下个断点,重新调用后翻下调用堆栈,查找关键字act即可

Step 2 外部主体函数简单分析

P.S. 因为混淆采用二层函数调度表实现函数调用,所以下面都是简要分析

Snipaste_2018-12-29_15-27-06

  1. 关键的参数分析

    • d : 滑块终止 X 坐标 / 图片高度
    • m : 鼠标运动轨迹
    • c : 持续时间(结束时间-开始时间)
  1. 参数值的获取

    • 滑块终止 x 坐标的获取,可通过请求背景图片分析边缘

    • 运动轨迹可按喜好生成,下面是一个简单的运动轨迹,每个单位分别对应是[x, y, time]

      [[0,0,0],[0,0,101],[0,0,203],[29,0,301],[95,3,400],[114,7,500],[116,8,601],[119,9,700],[121,10,803],[122,11,901],[124,11,1001],[125,11,1101],[125,12,1201]]
    • 持续时间需要配合运动轨迹结束时间

Step 3 加密函数分析

因为密码学忘得差不多了,他所谓的DES函数的分析就不放出来了,简单地说下流程

  1. 根据sshummeibase64Decode(k)进行 DES 计算,取结果.substr(0,8)为二次密钥
  2. 根据1中生成的密钥打包的参数进行 DES 计算,去完整的结果base64Encode后即为act

0x03 EXP

内部分享,不对外公开

参考资料

  1. https://lengyue.me/index.php/2018/10/16/shumei/
CATALOG
  1. 1. 0x01 数据包流程分析
    1. 1.1. Step 1 初始化
    2. 1.2. Step 2 验证码验证
  2. 2. 0x02 加密参数分析
    1. 2.1. Step 1 如何跟入函数
    2. 2.2. Step 2 外部主体函数简单分析
    3. 2.3. Step 3 加密函数分析
  3. 3. 0x03 EXP
  4. 4. 参考资料