首页 > 其他分享 >JS逆向实战18——猿人学第八题 验证码 - 图文点选

JS逆向实战18——猿人学第八题 验证码 - 图文点选

时间:2023-06-14 17:47:57浏览次数:51  
标签:点选 ocr 18 base64 list JS install pip 识别

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

网站

https://match.yuanrenxue.cn/match/8

网站分析

首先进去

就看到是如此复杂的文字验证码。
我们首先刷新网站 用浏览器自带的抓包软件抓抓看

可以看到网站中的验证码照片中的文字都在这个请求中,
继续往下看

还有个base64的图片

代码分析

所以我们直接请求下 看看能不能请求得到

发现可以
当然光这样是不行的,我们还需要吧这个base64的字符串 转换成图片

def base64toJPG(base64_data,pic_name):
    data = base64.b64decode(base64_data)
    with open(pic_name, 'wb') as f:
        f.write(data)


这里我们点击网站看看发送成功的包是什么样的

会发现这里返回给我们的是一堆莫名其妙的数字,有点像坐标的定值。

但是经过分析可知。这里返回给我们的数字,是这些div的索引值,
如果你点击第一个 第二个 第三个div 返回给我们的则是 0,1,2

那这样的话,我们只需要把这些坐标的中心点 写好定值即可。

coordinate_map  = {
    1: 124,
    2: 135,
    3: 146,
    4: 425,
    5: 468,
    6: 475,
    7: 725,
    8: 735,
    9: 775
}

那现在我们找到了中心点坐标,也找到了对应的字
那下一步就是如何从图片中提取出这些文字和坐标了

图像处理

由于这个图片的背景颜色很深,而且还有很多横杠,非常影响ocr识别。基本不可能成功。
这里选择用cv2 2值化处理
由于本人确实没怎么学过这个2值化处理。所以只能借用别人写好的直接用了。

影像识别库 和 打码平台 识别

这里可以选择两种方式
第一种就是影像识别库
例如

  • ddddocr
pip install ddddocr -i https://pypi.tuna.tsinghua.edu.cn/simple
  • pytesseract tesseract(需要配合安装在本地的tesseract-ocr.exe文件一起使用)
pip install pytesseract
  • PaddleOCR(需要配合安装在本地的tesseract-ocr.exe文件一起使用)
pip install paddlepaddle
pip install shapely
pip install paddleocr
  • easyocr(支持80多种语言的识别,识别精度超高)
pip install easyocr
  • muggle_ocr(轻量级的ocr识别库,文字提取效果稍差)
    pip install muggle_ocr
  • cnocr(Python 开源识别工具)
pip install cnocr

这里我选择的是easyocr 因为对中文的支持很好
这里简单说下识别的流程

  1. 得到上文2值化的图片2进制
  2. 将图片切割成9份,一个字一个字的识别 这样识别效率高
  3. 传入OCR识别
  4. 将9个文字和得到的4个字进行匹配,然后返回相应的坐标值。

总结

即使这样识别率依然很低,所以这里提供两个方案

  1. 手动识别(最笨 ,但是最有用)
  2. 做好优化,每当识别不全字。就重新发起请求,然后重新执行。


本次请求选择了手动输入。
最后把所有数据合成一个列表调用一下这个方法,拿到重复出现频率最高的数字

def find_repeat_data(_list):
    repeat_list = []
    for i in set(_list):
        ret = _list.count(i)  # 查找该数据在原列表中的个数
        if ret > 1:
            item = dict()
            item[i] = ret
            repeat_list.append(item)
    return repeat_list

标签:点选,ocr,18,base64,list,JS,install,pip,识别
From: https://www.cnblogs.com/zichliang/p/17478408.html

相关文章

  • npm install报错[email protected] postinstall: `node scripts/build.js`
    [email protected]: nodescripts/build.js解决方法:npmconfigsetsass_binary_site=https://npm.taobao.org/mirrors/node-sassnpminstall  ......
  • [nodejs] __dirname is not defined in ES module scope
    原因:CommonJS中提供的全局变量如require, exports, module.exports, __filename, __dirname等,在ESModules环境中均是不可用的,require, exports, module.exports在ESModules中基本对应着import,export,exportdefault。解决:import{dirname}from"node:path......
  • web页面中导出Excel (方法二) 前端easyui-datagrid导出Excel 使用 datagrid-export.js
    这个示例使用 前端easyui-datagrid 后端php 前端easyui-datagrid导出Excel使用了datagrid-export.js datagrid-export.js文件可自行搜索下载优点:查询结果显示在datagrid中(不能分页),前端直接下载不用回后端,效率高速度快。缺点:查询结果不能分页,必须显示全部内容,显......
  • js函数的概念
    @TOCjs函数的概念对于js来说,函数就是把任意一段代码放在一个盒子里面在我想要让这段代码执行的时候,直接执行这个盒子里面的代码就行先看一段代码//这个是我们以前写的一段代码for(vari=0;i<10;i++){ console.log(i)}//函数,这个{}就是那个“盒子”functionfn(){......
  • Vue.js 组件基础 #yyds干货盘点#【yyds干货盘点】
    学习目录:Vue.js简介Vue.js实例与数据绑定Vue.js计算属性和侦听器Vue.js条件渲染和列表渲染Vue.js事件处理Vue.js表单输入绑定Vue.js组件基础Vue.js组件通信Vue.js插槽Vue.js动态组件和异步组件Vue.js自定义指令Vue.js过渡和动画Vue.js混入Vue.js自定义事件和v-model......
  • NodeJS研究笔记:利用Buffer类的二进制数据读取接口解析ELF文件格式
    javascript作为前端开发语言,自古来对二进制数据的读取解析方面的支持都很薄弱,一般来说,解析二进制数据时,往往是将数据转换成字符串,然后运用各种字符串操作技巧来实现二进制数据的读取。由于NodeJS作为后台服务器开发平台,数理逻辑的设计需求超越javascript作为前端语言时界面UI的设......
  • 还在为618电商推送方案烦恼?我们帮你做好了!
    618是每年重要的电商大促活动,热度高流量大,是电商App吸引新用户,提高用户转化率(购买率)的最好时机。对电商App运营来说,消息推送是不可忽略的流量来源之一,适当的消息推送可以召回用户,提高用户复购率。如何利用消息推送功能在618电商节帮助App获取流量并提高转化率是运营需要关注的问......
  • 国标GB28181协议客户端开发(一)整体流程和技术选型
    国标GB28181协议客户端开发(一)整体流程和技术选型本系列文章将介绍国标GB28181协议设备端的开发过程。本文旨在探讨整体设计和技术选型方面的考虑,为开发人员提供指导和参考。文章将从设备端开发的整体架构、信令交互流程以及关键技术选型等方面展开讨论,帮助有需要的读者了解和把......
  • html 中拦截 js 的样式更改
    比如拦截html标签的font-size样式的更改:...<body><script>varobserver=newMutationObserver(function(mutations){mutations.forEach(function(mutation){if(mutation.type==='attributes'&&mutation.attribu......
  • js实现上传的pdf文件预览
    js实现pdf文件上传预览功能需求:上传预览功能,支持图片和pdf上传预览,并且是在指定的div里面预览主要使用的是pdfjs库pdfjs可以轻松实现点击打开一个新的页面或一个大的dialog在原页面实现预览,但是不支持(可能是我没找到)在指定的div里面预览这里要实现的是在指定的div......