【验证码逆向专栏】某某滑块逆向分析

1.png

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除!

前言

粉丝答疑又双叒来了!最近仍有不少粉丝咨询逆向相关问题,K哥会尽力回复,不过毕竟精力有限,不可能说是面面俱到(忙忘了@.@)。当然,还是会尽可能多筛选些典型的案例,产出相关文章,以供大伙学习交流。本期分析的验证码,如果没有相关业务,可能很多人不会接触到,也算是较为新颖,话不多说,开始正文:

逆向目标

目标:xx 滑块逆向分析

网站:aHR0cHM6Ly9wYXNzcG9ydC4xMTE4NS5jbi9jYXMvbG9naW4=

抓包分析

抓包分析,先看图片接口 gen:

4.png

返回的内容比较多,后面估计会用到,我们留意一下就行,clientUid 后文分析:

5.png

再来看验证接口,即发验证码的接口:

6.png

  • id : 图片接口返回;
  • bgImageHeight: 写死即可;
  • bgImageWidth:写死即可;
  • clientUid:同图片接口参数 clientUid;
  • deviceId:图片接口返回 deviceId;
  • enmiid:需要分析;
  • entSlidingTime:结束验证时间,模拟一下,校验不严;
  • print:需要分析;
  • sliderImageHeight:写死即可;
  • sliderImageWidth:写死即可;
  • startSlidingTime:开始验证时间,模拟一下,校验不严;
  • trackList:轨迹列表。

验证结果:

  • 失败

7.png

  • 成功

8.png

逆向分析

gen 接口

该接口有个 clientUid 参数,目测是 uuid 类型, 我们全局搜索一下,发现只在 main.js 文件中存在,进去后发现被 ob 混淆:

9.png

又是经典的 ob 混淆, 这里直接借用 v佬 的插件快速还原,工具地址如下:

Github 仓库:https://github.com/cilame/v_jstools

在线分析工具:https://astexplorer.net

还原之前还需要稍微的预处理一下,比如下面这样一堆常量的花指令,以及十六进制形式的数字:

比如下面这样一堆常量的花指令,以及十六进制形式的数字

10.png

附上简单的预处理 AST 代码:

// 字符串美化
const simplifyLiteral = {
   
    NumericLiteral({
     node }) {
   
        if (node.extra && /^0[obx]/i.test(node.extra.raw)) {
   
        node.extra = undefined;
        }
    },
    StringLiteral({
     node }) {
   
        if (node.extra && /\\[ux]/gi.test(node.extra.raw)) {
   
        node.extra = undefined;
        }
    },
}

traverse(ast, simplifyLiteral);



let my_obj = {
   };


const merge_odj = {
   
    VariableDeclarator(path){
   
        let {
   init} = path.node;

        if (!types.isObjectExpression(init)) return;

        let {
   properties} = init;

        properties.forEach(property => {
   
            // 确保属性值是字面量
            if (types.isLiteral(property.value)) {
   
              my_obj[property.key.name] = property.value;
            }
        });
       
    }
};

traverse(ast, merge_odj);


const clearObjectofValue = {
   
    MemberExpression(path){
   
        let {
   object, property} = path.node
        if (!property || !types.isIdentifier(property) || !types.isIdentifier(object)) return;
        let key = property.name
        let value = my_obj[key]
        if (!value) return;
        console.log(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值