上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

新手求如何简单识别验证码

[复制链接]
  • TA的每日心情
    郁闷
    2023-4-24 17:33
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    1

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2023-4-15 18:23:07 | 显示全部楼层 | 阅读模式
    悬赏2油猫币已解决

    本帖最后由 xidili 于 2023-4-15 18:25 编辑

    超新手啥也不会,刚开始学,求教。
    网页登录需验证码,xhr获取user_auth_verify文件的响应有这个验证码,我可以直接读取这个code吗?还是如何解决比较好?

    下面这个代码是能看到的js文件部分代码。
    `` var code="";
    // 绘制文字
    for(var i=0;i <50;i++) {
    ctx.fillStyle = '#86cffa';
    ctx.beginPath();
    ctx.arc(randomNum(0, width), randomNum(0, height),1,0,2 Math.PI);
    ctx.fill();
    }
    var pool="abcdefghijkmnpqrstuvwxyz1234567890";
    for(var i=0;i<=3;i++) {
    if(captcha){
    var txt = captcha[i];
    }else{
    var txt=pool[randomNum(0,pool.length)];
    }
    code=code+txt;
    //随机生成字体颜色
    ctx.fillStyle = '#141046';
    //随机生成字体大小
    ctx.font = '22px SimHei';
    var x =18 + i
    14
    var y = 28;
    //修改坐标原点和旋转角度
    ctx.translate(x, y);
    ctx.fillText(txt,0,0);
    ctx.translate(-x, -y);
    }
    /绘制干扰点/

    return code;

    }
    function get_code(type){
    $.ajax({
    url: '../../user_auth_verify.cgi',
    type: 'POST',
    data: '&submit=submit',
    async: false,
    timeout: 30000,
    success: function(data) {
    if(data.verify == 1){
    $('#captchaImg').show();
    drawCaptcha(data.code);
    if(type && type == 'adv')
    $('.login-box').addClass('code_show')
    }else{
    $('#code_cid').hide();
    $('#captchaImg').hide();
    $('.code-group').css("display","none")
    }
    },
    error:function(){
    drawCaptcha();
    }
    })
    }

    window.onload = function(){
    $.ajaxSetup({
    beforeSend: function (XMLHttpRequest,XMLObject) {
    XMLHttpRequest.setRequestHeader("HTTP_X_REQUESTED_WITH", "xmlhttprequest");
    var XMLObjData = XMLObject.data,repData = '';
    if(XMLObjData && XMLObjData.indexOf('%')) repData = XMLObjData.replace(/\%/g,'%25');
    else repData = XMLObjData;
    var obj_data = decodeURIComponent(repData);
    if(/[<>\^]|\b(sum()|\b(cmd|\')|(\'\s+[\s\S]\s+\')|(\'\s+\')|(confirm()|\b(echo\s+)|(:alert)\b|\b(eval\s()||||\b(\or\s+[\s\S]=[\s\S])|\b(and\s+[\s\S]=[\s\S])|(..\/)|(\$(..\/)|(window[location])|(window[\"location\"])|(window[\'location\'])|(window.location)|(..\/)|(\s<\simg\s)|(\s<\siframe\s)|\b(onerror\s)|\b(sleep\s)|\b(alert(\s)|\b(javascript:\s)|(--)|(\sping\s-n\s)|(\s+or\s+)|\b(exec\s+)|\b(master\s+)|\b(truncate\s+)|\b(declare\s+)|(\s+insert\s+)|\b(select\s+)|\b(delete\s+)|\b(update\s+)|\b(count\s()|(\s+chr\s()|(\s+mid\s()|(\s+chr\s()|(\s+chr\s()/.test(obj_data) ){
    alert('输入操作中存在异常注入风险,请重新输入');
    return false;
    };
    if(XMLObject.type=="GET"){
    var urlString = XMLObject.url;
    var reg = /(&Token.
    ?(?=&|$))|(Token.*?(?=&|$))/;
    var UrlArray = XMLObject.url.match(reg);
    if(UrlArray && UrlArray[0]){
    var repalceString = UrlArray[0];
    urlString = urlString.replace(repalceString,"");
    }
    XMLObject.url = urlString;
    }
    },
    data:{
    Token:stringtoaescovert("J112saasdftrU2NUTTI")
    }
    });
    if(document.getElementById("captchaImg")){
    document.getElementById("captchaImg").onclick = function(e) {
    get_code();
    }
    }
    };``

    最佳答案

    查看完整内容

    可以劫持请求获取响应值,或者自己发请求,不过这些估计你一时半会理解不了,最简单的办法是劫持函数,如果这个drawCaptcha是全局函数的话,可以这样搞:
  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-4-15 18:23:08 | 显示全部楼层
    可以劫持请求获取响应值,或者自己发请求,不过这些估计你一时半会理解不了,最简单的办法是劫持函数,如果这个drawCaptcha是全局函数的话,可以这样搞:
    1. const _drawCaptcha = unsafeWindow.drawCaptcha;
    2. unsafeWindow.drawCaptcha = function(code) {
    3.     console.log(code);
    4.     return _drawCaptcha.call(this, code);
    5. };
    复制代码
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2023-4-24 17:33
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    1

    主题

    1

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2023-4-21 18:03:39 | 显示全部楼层
    嗯,确实好用,能在控制台显示,但请问我如何才能调用它呢?@cxxjackie .拜谢。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-4-21 20:57:38 | 显示全部楼层
    xidili 发表于 2023-4-21 18:03
    嗯,确实好用,能在控制台显示,但请问我如何才能调用它呢?@cxxjackie .拜谢。 ...

    在console.log那个地方写你的脚本代码啊。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表