zoukankan      html  css  js  c++  java
  • 我发现了一个网站Bug,然后反馈了

    0 序言

    最近在学逆向破解, 感觉自己小有成就,于是向两年前的一个签到网站发起了总攻

    文章也征得网站管理员同意

    1 验证码的类型

    我所知道的验证码有三种

    • 第一种(超级普通验证码)

      没打广告(极验)

      你只需要点一下的,这种就是增加一点点难度,点击一下,看看你是不是个人

    • 第二种(输入字符)

      这种的话,老网站会看到,但是我觉得这个挺丑的,也不太好用,体验性很差

    • 第三种 (滑动验证码)

      这种如果做的简单,模拟鼠标滑动基本就过去了,这种体验性还说的过去吧,看你是不是个正常的人类

    • 第四种(滑块验证码)

      滑动式(自己写的,咳咳)

      项目地址 : https://gitee.com/Whatarey_admin/captcha_-python (欢迎大家来点star)

      这种相对来说, 有了点趣味,更容易让人接受

      我也挺喜欢这种验证码的

    • 第五种(点触验证码)

      点触验证码,这种的安全性稍微好一些,但是体验性下来了

    • 第六种(智能验证码)

      随机切换

      就好比机验的智能验证,一下是点一下就成功,还有些点一下来一个二次滑动,这种验证码出现不随机,验证码什么类型的都有,调试也难

      但是对于大佬,还是一句话的事情,只要把前面四种验证码都了解了一下,基本有跟没有没区别

    2 破解验证码的思路

    第一种

    没啥, click 一下就行了

    第二种

    otc 识别一下就行了 ,百度上很多

    第三种

    滑动

    这种需要模拟浏览器操作, 忽快忽慢, 不能太快, 我这个 也没怎么弄, 但是也成功了 (前期的jq22 网站就是这个)

    第四种

    这种需要把图片截取下来,然后识别缺口图的位置 (我这也是理论,没有实际用到,但是肯定是这样没毛病的) 一般的 都是一张大图,一张小图

    还有种比较高级的

    大家请打开极验 https://www.geetest.com/Sensebot 然后F12,咳咳,不好意思,看到他们的招聘了

    真的是,不放张小姐姐照片,我们会去?

    极验的有三张图片,并且图片不是 合并的

    不像我做的这个(瞬间感觉自己做的好菜)

    这种的话,我直接图片另存为,也别搞那些花里花俏的

    第五种

    其实跟上面的第二种验证码类似,也是需要识别,但是在识别的是否,需要加上坐标点击

    而识别他的位置,这才是他的核心,这种验证码,看了很多种都是需要借助第三方平台(超级鹰是一个)但是本着能白嫖就白嫖的机会,我是鄙视的(花钱的东西干着没意思)这也为本文埋下了伏笔

    还有这方法就是自己做模型,机器学习(呜呜呜,我不会,好难啊),至少市面上这种看起来破解难度比较大,成本也比较高,用户体验度没有第三,第四种好

    第六种

    差不多了,前五种都会了,还怕个锤子,直接干就行了

    3 破解

    咳咳,现在在进入主题了,让我说一下废话

    3.1 初窥网站接口

    大家都知道,我是后端嘛,在js动画这方面,我的确比较菜逼,所以需要做一些精美动画,脱离前端,我就只能找模板了,这不找到了一个,但是有些好看的资源是收费的

    3个,不贵, 我的305 还是存了几年,其中20个还是把bug告诉站长了,赠送我的20个(呜呜呜呜,我好难,应该自己在白嫖一些)

    于是 我看了下获取来源,呵呵,简单呀,

    签到说明:连续签到3天以上,每天签到都会获得1个币.

    而网站第一个版本的签到是这样的

    瞬间我就美丽了

    恰逢那段时间 对 selenium 感兴趣

    于是仔细分离了他的代码

    首先需要登录,等于可以选择多种登录方式, 我选择了qq(注意,qq登录在初期几次,很容易出来滑动验证码,后面就没有了,这里我是出来验证码就重新登录,后面就没这个问题了)

    之后就进去个人中心

    然后签到

    伪代码

         driver = webdriver.Chrome(
                options=options, executable_path="C:chromedriver.exe")
            driver.get(self.url)
            driver.find_element_by_xpath(
                '//div[@id="navbar"]/ul/li[8]/a').click()  # 确定
            time.sleep(5)
            driver.find_element_by_xpath(
                '//div[@class="d3f modal-body tcck2"]/a[@class="qq"]').click()  # 找到使用密码登录
            driver.switch_to.frame('ptlogin_iframe')  # 找到一个框架名称
            driver.find_element_by_id('switcher_plogin').click()  # 找到使用密码登录
            driver.find_element_by_id('u').clear()  # 第一个是请输入你的账号
            driver.find_element_by_id('u').send_keys('')
            driver.find_element_by_id('p').clear()
            driver.find_element_by_id('p').send_keys('密码')
            driver.find_element_by_id('login_button').click()  # 确定
            logging.info("登录验证已结束")
            for x in range(20):
                time.sleep(1)
                print("等待进入Myhome页面 倒计时: %d s" % int(20-x))
                logging.info("等待进入Myhome页面 倒计时: %d s" % int(20-x))
            myhomeurl = driver.find_element_by_xpath(
                "//div[@id='navbar']/ul/li[8]/div[@class='myhome']/a").get_attribute("href")
            driver.get(myhomeurl)  # 打开新页面
            driver.switch_to_window(driver.window_handles[-1])
            logging.info("成功进入Myhome y页面...")
            try:
                for x in range(10):
                    time.sleep(1)
                    print("点击签到按钮 倒计时: %d s" % int(10-x))
                    logging.info("点击签到按钮 倒计时: %d s" % int(10-x))
                driver.find_element_by_xpath('//a[contains(text(),"签到")]').click()
                try:
                    eee = driver.find_element_by_xpath(
                        "//div[@id='zt']/div[3]/div[1]/div[1]/div[2]/iframe").get_attribute("src")
                    driver.get(eee)   
                    logging.info("进入签到页面完毕...")
    
    当然,这样子 这个网站 用到了很多iframe,前期了花费了点时间
    

    试了几遍,ok 可以,于是挂在我的服务器上运行

    但是试了几天,发现没有通知我情况咋样,于是把email 给接上去了

    3.2 签到升级

    突然有一天, 发送的邮箱一直提醒失败,然后上服务器,一看,我x(口吐芬芳),白嫖还没几天, 就就就给发现了?

    咳咳, 行吧, 我在续上命,于是乎, 研究了一上午

    也解决了

    伪代码

    driver.get(url``=``url)
    # 开始查找滑块
    button ``=` `driver.find_element_by_xpath(``'//div[@class="ui-slider-btn init ui-slider-no-select"]'``)
    action ``=` `ActionChains(driver)
    action.click_and_hold(button).perform()
    action.reset_actions()
    action.move_by_offset(``333``, ``0``).release().perform()
    action.click_and_hold()
    

    3.3 签到再次升级

    过了一阵子, 突然发现 又tn升级了

    我我我我我 ...破不了了
    于是乎,时间大概就定格在2019年~~~

    4 长进了

    咳咳,时间快进到2021年 (自己也很久没弄Python 了,前几天有个兄弟问我以前不是搞过python嘛,这里有个单,爬虫的,你把数据爬过来就行,于是乎,又重新拾起了Python)

    回顾了原来写的几篇文章,大致又熟悉了个流程,于是,直接盘她,这个单的程序也写好了,然后突然突然又想到了Jq22这个验证码

    4.1 念念不忘,必有回响

    NetWork请求如下

    页面图如下

    页面结构如下

    按钮结构如下

      <input type="submit" name="Button1" value="已签到" id="Button1" disabled="disabled" class="btn btn-success qdbut huise" OnClick="return  jsFunction()" />
          
    

    页面js 如下

    code

            $("#Button1").attr("disabled", "disabled");
            var aaa = 0;
    
            $('#mpanel5').pointsVerify({
                defaultNum: 4,	
                checkNum: 2,	
                vSpace: 5,	
                imgName: ['yz1.png', 'yz2.png'],
                imgSize: {
                     '300px',
                    height: '150px',
                },
                barSize: {
                     '300px',
                    height: '40px',
                },
                ready: function () {
                },
                success: function () {
                    aaa = 1;
                    $("#Button1").removeAttr("disabled");
                },
                error: function () {
                    return false;
                }
    
            });
            function jsFunction() {
                if (aaa == 1) {
                    return true;
                } else {
                    return false;
                }
    
            }
        </script> 
    

    看着这段代码,我顿时感觉,好像能做点什么

     <input type="submit" name="Button1" value="已签到" id="Button1" class="btn btn-success qdbut huise" OnClick="return  jsFunction()" />
    

    嗯嗯嗯,后面的思路也是来自此处

    我就直接 放最终代码了

    总结

    在这里, 我还是没能破解点触验证码, 这个的确非常的棘手, 大家都在说超级鹰, 最近我找到了一个百度的otc 识别文字返回坐标的,但是他这个识别率太低了,会被干扰

    在这里,代码就不分享了,这里只做一个技术交流,让你们看看效果,咳咳(我没白嫖,你们有啥要下载的东西,我也可以帮你们下载)

    群链接丢这里,大家看着办

  • 相关阅读:
    自己常用网站记录
    css弹性布局指定显示行数多余文字去掉用省略号代替以及弹性布局中css 卡片阴影效果
    微信小程序页面传参被截取问题
    阴影效果 css3 为什么要加 -moz-box-shadow -webkit-box-shadow -o-box-shadow,直接用box-shadow不是都能识别吗?
    css常用清除浮动方式
    什么是微信小程序云开发 它的作用是什么
    JMeter压测“java.net.SocketException: Socket closed”解决方法
    Jmeter压力测试工具安装及使用教程
    OnActionExecuting和OnActionExecuted执行顺序
    C#循环下载多个文件(把多个文件压缩成一个文件可以一次性下载)
  • 原文地址:https://www.cnblogs.com/whatarey/p/15219976.html
Copyright © 2011-2022 走看看