【看雪-注册安全分析报告】
前言
由于网站注册入口容易被黑客攻击,存在如下安全问题:
- 暴力破解密码,造成用户信息泄露
- 短信盗刷的安全问题,影响业务及导致用户投诉
- 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 看雪 PC端注册入口
简介:看雪学苑(www.kanxue.com)是一个专注于PC、移动、智能设备安全研究及逆向工程的安全综合服务网站!创建于2000年,历经20多年的发展,看雪网站形成了大量有价值的技术资料,经过看雪团队的共同努力,先后出版过数本技术专著,深受出版社和广大读者好评,社会影响深远,在行业中树立了令人尊敬的专业形象。平台为会员提供安全知识的在线课程教学,同时为企业提供智能设备安全相关产品和服务。看雪每年举办500-1000人以上的大会:安全开发者峰会(Security Development Conference,简称SDC),截止今年已举办了6届,SDC始终秉持技术与干货的原则,始终致力于建立一个多领域、多维度的高端安全交流平台,推动互联网安全行业的快速成长。


二、 安全性分析报告:
采用网易的滑动行为验证方式,容易被模拟器绕过甚至逆向后暴力攻击,滑动拼图识别率在 95% 以上。

三、 测试方法:
前端界面分析为网易易盾的滑动验证码, 网上有大量现成的逆向文章及视频参考,不过我们这次不用逆向, 只是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分

- 模拟器交互部分
private final String INDEX_URL = "https://passport.kanxue.com/user-mobile-1.htm";@Overridepublic RetEntity send(WebDriver driver, String areaCode, String phone) {try {RetEntity retEntity = new RetEntity();driver.get(INDEX_URL);// 输入手机号WebElement phoneElemet = ChromeDriverManager.waitElement(driver, By.id("mobile"), 500);phoneElemet.sendKeys(phone);Thread.sleep(1000);netEasy.moveExec(driver, 412.0 / 480);// 获取验证码Thread.sleep(1000);WebElement getCodeElement = driver.findElement(By.id("sendactive"));getCodeElement.click();Thread.sleep(1500);String info = getCodeElement.getText();retEntity.setMsg(info);if (info != null && info.contains("发送成功 ")) {retEntity.setRet(0);} else {System.out.println("info=" + info);}return retEntity;} catch (Exception e) {System.out.println("send() phone=" + phone + ",e=" + e.toString());StringBuffer er = new StringBuffer("send() " + e.toString() + "\n");for (StackTraceElement elment : e.getStackTrace())er.append(elment.toString() + "\n");System.out.println(er.toString());return null;} finally {driver.manage().deleteAllCookies();}}
2. 距离识别
/*** Open Cv 图片模板匹配* * @param tpPath* 模板图片路径* @param bgPath* 目标图片路径* @return { width, maxX }*/public String[] getWidth(String tpPath, String bgPath, String resultFile) {try {Rect rectCrop = clearWhite(tpPath);Mat g_tem = Imgcodecs.imread(tpPath);Mat clearMat = g_tem.submat(rectCrop);Mat cvt = new Mat();Imgproc.cvtColor(clearMat, cvt, Imgproc.COLOR_RGB2GRAY);Mat edgesSlide = new Mat();Imgproc.Canny(cvt, edgesSlide, threshold1, threshold2);Mat cvtSlide = new Mat();Imgproc.cvtColor(edgesSlide, cvtSlide, Imgproc.COLOR_GRAY2RGB);Imgcodecs.imwrite(tpPath, cvtSlide);Mat g_b = Imgcodecs.imread(bgPath);Mat edgesBg = new Mat();Imgproc.Canny(g_b, edgesBg, threshold1, threshold2);Mat cvtBg = new Mat();Imgproc.cvtColor(edgesBg, cvtBg, Imgproc.COLOR_GRAY2RGB);int result_rows = cvtBg.rows() - cvtSlide.rows() + 1;int result_cols = cvtBg.cols() - cvtSlide.cols() + 1;Mat g_result = new Mat(result_rows, result_cols, CvType.CV_32FC1);Imgproc.matchTemplate(cvtBg, cvtSlide, g_result, Imgproc.TM_CCOEFF_NORMED); // 归一化平方差匹配法// 归一化相关匹配法MinMaxLocResult minMaxLoc = Core.minMaxLoc(g_result);Point maxLoc = minMaxLoc.maxLoc;Imgproc.rectangle(cvtBg, maxLoc, new Point(maxLoc.x + cvtSlide.cols(), maxLoc.y + cvtSlide.rows()), new Scalar(0, 0, 255), 1);Imgcodecs.imwrite(resultFile, cvtBg);String width = String.valueOf(cvtSlide.cols());String maxX = String.valueOf(maxLoc.x + cvtSlide.cols());System.out.println("OpenCv2.getWidth() width=" + width + ",maxX=" + maxX);return new String[] { width, maxX };} catch (Throwable e) {System.out.println("getWidth() " + e.toString());logger.error("getWidth() " + e.toString());for (StackTraceElement elment : e.getStackTrace()) {logger.error(elment.toString());}return null;}}
- 轨道生成及移动算法
public boolean moveExec(WebDriver driver) {// 获取滑动按钮try {WebElement moveElemet = ChromeDriverManager.waitElement(driver, By.className("yidun_slider"), 400);if (moveElemet == null) {return false;} else {Actions actions = new Actions(driver);actions.clickAndHold(moveElemet).perform();}Thread.sleep(1000);// 获取带阴影的背景图WebElement bg = ChromeDriverManager.waitElement(driver, By.className("yidun_bg-img"), 400);String bUrl = bg.getAttribute("src");if (bUrl == null) {System.out.println("bUrl=" + bUrl);return false;}// 获取小图WebElement s = ChromeDriverManager.waitElement(driver, By.className("yidun_jigsaw"), 400);String sUrl = s.getAttribute("src");if (sUrl == null) {System.out.println("sUrl=" + sUrl);return false;}Map<String, String> outMap = getMoveDistance(bUrl, sUrl);String openWidth = outMap != null ? outMap.get("width") : null;String openDistance = outMap != null ? outMap.get("distance") : null;// 计算匹配到的位置int distance = (openWidth != null && openDistance != null) ? (int) (Double.parseDouble(openDistance) - Integer.parseInt(openWidth) + 2) : 0;System.out.println("getMoveDistance() distance=" + distance + "outMap=" + outMap);if (distance == 0) {System.out.println("err distance=" + distance + "|openWidth=" + openWidth + ",openDistance=" + openDistance);return false;}moveElemet.click();// 滑动ActionMove.move(driver, moveElemet, distance);String moveStr = null;WebElement yidunElement;for (int i = 0; i <= 40; i++) {yidunElement = ChromeDriverManager.waitElement(driver, By.className("yidun--light"), 400);moveStr = (moveStr != null) ? yidunElement.getAttribute("class") : null;if (moveStr != null && moveStr.contains("yidun--success")) {System.out.println("succ distance=" + distance);driver.findElement(By.id("nickname")).click();Thread.sleep(500);driver.findElements(By.className("sms-code")).get(1).click();Thread.sleep(500);break;}System.out.print(".");Thread.sleep(50);}return true;} catch (Exception e) {return false;}}
- OpenCv 轮廓匹配测试样例:

四丶结语
看雪学苑(www.kanxue.com)是一个专注于PC、移动、智能设备安全研究及逆向工程的安全综合服务网站!创建于2000年,历经20多年的发展,看雪网站形成了大量有价值的技术资料,经过看雪团队的共同努力,先后出版过数本技术专著,深受出版社和广大读者好评,社会影响深远,在行业中树立了令人尊敬的专业形象。平台为会员提供安全知识的在线课程教学,同时为企业提供智能设备安全相关产品和服务。作为安全媒体,看雪具有雄厚的技术实力,但采用的仍然是普通的图形交互验证方式, 在一定程度上提高了用户体验, 但安全性在机器学习的今天, 已经无法应对攻击了,并且正是由于该产品通俗, 所以在网上破解的文章和教学视频也是大量存在,并且经过验证滑动产品很容易被破解, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。
很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。
所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#
戳这里→康康你手机号在过多少网站注册过!!!
谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?
>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》
相关文章:
【看雪-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
记录一个前端学习小组的收集的模版
问题1:输入“您的姓名”,选择“短答案”作为问题类型。问题2:输入“您是否愿意继续参加前端学习小组?”,选择“单选”作为问题类型,并添加选项“是”和“否”。问题3:输入“如果您选择‘是’&am…...
Rk3588 Android12 AIDL 开发
AIDL (Android Interface Definition Language) 和 HIDL (HAL Interface Definition Language) 都是 Android 系统中用于定义接口的工具,但它们有不同的用途和特性。 AIDL (Android Interface Definition Language) 用途: 主要用于应用程序之间的进程间…...
两个长整数字符串求和(不允许使用ES6+)
两个长整数字符串求和(不允许使用ES6), 面试手撸代码遇到到这个问题 1. 实现方式第一种 // 短整数字符串前边补 0; num需要补 0 的短整数字符串, len 长整数字符串的长度 function fillZero (num, len) {let str num.toString();if (str.length < len) {str 0.repeat(…...
11 Java 方法引用、异常处理、Java接口之函数式编程(接口知识补充Function<T,R>、BiFunction<T, U, R>和自定义泛型接口)
文章目录 前言一、Java接口之函数式编程 --- 接口知识补充1 Function<T,R>泛型接口2 BiFunction<T, U, R>泛型接口3 自定义泛型函数式编程接口4 使用lambda表达式、方法引用进行函数式编程二、方法引用1 方法引用初体验(以Array.sort()方法为例)(1)什么是方法引…...
深入探索 Go 语言的编译器与垃圾回收机制
Go 编译器 Go 编译器是通过 go 工具执行的,这个工具的功能不仅仅是生成可执行文件。你可以使用 go tool compile 命令来编译一个 Go 源文件。这个操作将生成一个目标文件,也就是 .o 后缀的文件。以下是在 macOS Mojave 系统上执行的命令和结果展示&…...
2024国赛数学建模-模拟火算法(MATLAB 实现)
模拟退火算法 1.1 算法原理 模拟退火算法的基本思想是从一给定解开始 ,从邻域 中随机产生另一个解 ,接受 Metropolis准则允许目标函数在 有限范围内变坏 ,它由一控制参数 t决定 ,其作用类似于物 理过程中的温度 T,对于控制参数的每一取值 ,算法持续进 行“产生 —判断 —接受…...
YOLOv8 只检测人 只画框不要标签
参考了这个:YOLOv8只检测人(或其他一种或者多种类别)_yolov8只检测指定类别-CSDN博客 1. 只检测人:predict的时候指定参数classes[0] 2. 只画框不要标签:plot的时候传入labelsFalse 3. 标签中去掉置信度:…...
如何将网络安全防范游戏化
组织对威胁的准备和恢复能力跟不上网络犯罪分子的进步。 一些首席执行官仍然认为网络安全需要偶尔干预,而不是持续关注。 但对于许多公司来说,情况并非如此;网络威胁准备需要协调一致的培训工作,因此网络安全团队在攻击发生时已…...
Qt QGraphicsView实现图片放缩、鼠标拖动移动、鼠标点位置放大缩小_图片查看
QtQGraphicsView实现图片放缩、鼠标拖动移动、鼠标点位置放大缩小 头文件: #ifndef TIMGWIDGET_H #define TIMGWIDGET_H#include <QGraphicsItem> #include <QMainWindow> #include <QObject> #include <QWidget>// class TImgWidget : pu…...
Percona Toolkit 神器全攻略(复制类)
Percona Toolkit 神器全攻略(复制类) Percona Toolkit 神器全攻略系列共八篇,前文回顾: 前文回顾Percona Toolkit 神器全攻略Percona Toolkit 神器全攻略(实用类)Percona Toolkit 神器全攻略(配…...
SQLite3 数据类型深入全面讲解
SQLite3,作为一款轻量级的数据库管理系统,在数据存储方面展现出了其独特的魅力。它不仅支持标准的SQL语法,还提供了丰富的数据类型供开发者选择。这些数据类型不仅涵盖了基本的数值和文本类型,还包括了日期时间、二进制数据等复杂…...
Python高效实现Trie(前缀树)及其插入和查找操作
Python高效实现Trie(前缀树)及其插入和查找操作 在Python面试中,考官通常会关注候选人的编程能力、问题解决能力以及对Python语言特性的理解。Trie(前缀树)是一种高效的数据结构,广泛应用于字符串处理、自动补全、拼写检查等场景。本文将详细介绍如何实现一个Trie,并提…...
傅里叶变换家族
禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码...
深度学习——强化学习算法介绍
强化学习算法介绍 强化学习讨论的问题是一个智能体(agent) 怎么在一个复杂不确定的环境(environment)里面去极大化它能获得的奖励。 强化学习和监督学习 强化学习有这个试错探索(trial-and-error exploration),它需要通过探索环境来获取对环境的理解。强化学习 ag…...
轴承知识大全,详细介绍(附3D图纸免费下载)
轴承一般由内圈、外圈、滚动体和保持架组成。对于密封轴承,再加上润滑剂和密封圈(或防尘盖)。这就是轴承的全部组成。 根据轴承使用的工作状况来选用不同类型的轴承,才能更好的发挥轴承的功能,并延长轴承的使用寿命。我…...
【PyTorch】基础环境如何打开
前期安装可以基于这个视频,本文是为了给自己存档如何打开pycharm和jupyter notebookPyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili Pycharm 配置 新建项目的时候选择解释器pytorch-gpu即可。 Jupyte…...
QT教程:QTime和QTimer的使用场景
QTime类 QTime 是一个用来表示和操作时间的类,它处理一天中的具体时间(例如小时、分钟、秒、毫秒)。通常用于计算时间间隔、记录时间戳、获取当前时间等。 特点和功能 表示时间:QTime 用来表示一天中的某个具体时间(小…...
MySQL 迁移中 explicit_defaults_for_timestamp 参数影响
前言 最近在做数据迁移的时候,使用的是云平台自带的同步工具,在预检查阶段,当时报错 explicit_defaults_for_timestamp 参数在目标端为 off 建议修改 on,有什么风险呢?在此记录下。 测试对比 MySQL 默认情况下 expl…...
树状数组记录
树状数组(Fenwick Tree)是一种用于维护数组前缀和的数据结构,支持高效的单点更新和区间查询操作。它的查询和更新时间复杂度为 O ( log n ) O(\log n) O(logn),适用于需要频繁更新和查询的场景。 树状数组的基本操作 单点更…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
