【看雪-注册安全分析报告】

news2024/11/24 4:46:07

前言

由于网站注册入口容易被黑客攻击,存在如下安全问题:

  1. 暴力破解密码,造成用户信息泄露
  2. 短信盗刷的安全问题,影响业务及导致用户投诉
  3. 带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞
    在这里插入图片描述

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析

一、 看雪 PC端注册入口

简介:看雪学苑(www.kanxue.com)是一个专注于PC、移动、智能设备安全研究及逆向工程的安全综合服务网站!创建于2000年,历经20多年的发展,看雪网站形成了大量有价值的技术资料,经过看雪团队的共同努力,先后出版过数本技术专著,深受出版社和广大读者好评,社会影响深远,在行业中树立了令人尊敬的专业形象。平台为会员提供安全知识的在线课程教学,同时为企业提供智能设备安全相关产品和服务。看雪每年举办500-1000人以上的大会:安全开发者峰会(Security Development Conference,简称SDC),截止今年已举办了6届,SDC始终秉持技术与干货的原则,始终致力于建立一个多领域、多维度的高端安全交流平台,推动互联网安全行业的快速成长。

在这里插入图片描述

在这里插入图片描述

二、 安全性分析报告:

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

在这里插入图片描述

三、 测试方法:

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

  1. 模拟器交互部分

private final String INDEX_URL = "https://passport.kanxue.com/user-mobile-1.htm";

	@Override
	public 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;
		}
	}


  1. 轨道生成及移动算法

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;
		}

	}

  1. OpenCv 轮廓匹配测试样例:
    在这里插入图片描述

四丶结语

看雪学苑(www.kanxue.com)是一个专注于PC、移动、智能设备安全研究及逆向工程的安全综合服务网站!创建于2000年,历经20多年的发展,看雪网站形成了大量有价值的技术资料,经过看雪团队的共同努力,先后出版过数本技术专著,深受出版社和广大读者好评,社会影响深远,在行业中树立了令人尊敬的专业形象。平台为会员提供安全知识的在线课程教学,同时为企业提供智能设备安全相关产品和服务。作为安全媒体,看雪具有雄厚的技术实力,但采用的仍然是普通的图形交互验证方式, 在一定程度上提高了用户体验, 但安全性在机器学习的今天, 已经无法应对攻击了,并且正是由于该产品通俗, 所以在网上破解的文章和教学视频也是大量存在,并且经过验证滑动产品很容易被破解, 所以除了滑动验证方式, 花样百出的产品层出不穷,但本质就是牺牲用户体验来提高安全。

很多人在短信服务刚开始建设的阶段,可能不会在安全方面考虑太多,理由有很多。
比如:“ 需求这么赶,当然是先实现功能啊 ”,“ 业务量很小啦,系统就这么点人用,不怕的 ” , “ 我们怎么会被盯上呢,不可能的 ”等等。

有一些理由虽然有道理,但是该来的总是会来的。前期欠下来的债,总是要还的。越早还,问题就越小,损失就越低。

所以大家在安全方面还是要重视。(血淋淋的栗子!)#安全短信#

戳这里→康康你手机号在过多少网站注册过!!!

谷歌图形验证码在AI 面前已经形同虚设,所以谷歌宣布退出验证码服务, 那么当所有的图形验证码都被破解时,大家又该如何做好防御呢?

>>相关阅读
《腾讯防水墙滑动拼图验证码》
《百度旋转图片验证码》
《网易易盾滑动拼图验证码》
《顶象区域面积点选验证码》
《顶象滑动拼图验证码》
《极验滑动拼图验证码》
《使用深度学习来破解 captcha 验证码》
《验证码终结者-基于CNN+BLSTM+CTC的训练部署套件》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习 SSM框架 项目总结

通过指导老师发布的学习SSM框架项目&#xff0c;这次我深刻体会到了SSM整体项目之间的紧连关系。 以下是我自己学习过程中总结出来的经验。 SSM框架 配置 导入核心 spring 组件坐标 将spring相关组件坐标&#xff0c;导入到 pom 文件中 <!--spring、springMVC--><…

集成电路学习:什么是RTOS实时操作系统

RTOS&#xff1a;实时操作系统 RTOS&#xff0c;全称Real Time Operating System&#xff0c;即实时操作系统&#xff0c;是一种专为满足实时控制需求而设计的操作系统。它能够在外部事件或数据产生时&#xff0c;以足够快的速度进行处理&#xff0c;并在规定的时间内控制生产过…

UE5.3 新学到的一些性能测试合计(曼巴学习笔记)

一.简单命令行 stat FPS stat unit //增加GPU渲染时间和变量 stat unitgraph //追加了图表显示 二.查看GPU的消耗。调试GPU渲染用的高级命令 可以记录这一刻各个部分的占用情况,只能看当前的 1.在编辑器下&#xff0c;ctrlShift, 。 2.输入命令行&#xff0c;pr…

硬件-经典的TL431三端稳压管

文章目录 一&#xff1a;TL431三端稳压管1.1 器件说明1.2 电路分析1.3 把TL431设计成一个可调电压源的电路1.4 常用型号1.5 阅读手册1.6 2.5V 电压基准应用电路道友&#xff1a;努力的意义&#xff0c;不在于一定会让你取得多大的成就&#xff0c;只是让你在平凡的日子里&#…

虚幻5|知识点(1)寻找查看旋转,击打敌人后朝向主角

举例说明&#xff0c;我们想让角色一直朝着摄像头&#xff0c;我们控制角色任意位置&#xff0c;都能自行旋转都能朝向摄像头 下面是敌人一直朝向角色&#xff0c;无论主角走向哪个位置&#xff0c;敌人都能朝向主角 start是获取敌人的位置向量大小&#xff0c;Target是获取主…

【复杂系统系列(中级)】复杂系统科学的层级与不确定性方程【代码模拟】

【通俗理解】复杂系统科学的层级与不确定性方程 关键词提炼 #复杂系统科学 #层级结构 #不确定性 #上行因果 #下行因果 #初值敏感 #混沌现象 第一节&#xff1a;层级与不确定性方程的类比与核心概念【尽可能通俗】 1.1 层级与不确定性方程的类比 复杂系统科学的层级与不确定…

游戏玩家新宠:高性能远程控制解决方案

如果你出差一些存在公司电脑上的数据急需用到&#xff0c;这时候有一个远程控制工具就非常方便了。如果你担心一些远程控制软件的安全问题&#xff0c;那就从正规渠道下载&#xff0c;比如向日葵远程控制官网下载就可以得到它官方的软件。我今天给你分享一些安全可靠的远程控制…

基于STELLA系统动态模拟技术及在农业、生态环境等科学领域中的实践应用

STELLA是一种用户友好的计算机软件。通过绘画出一个系统的形象图形&#xff0c;并给这个系统提供数学公式和输入数据&#xff0c;从而建立模型。依据专业兴趣&#xff0c;STELLA可以用来建立各种各样的农业、生态、环境等方面的系统动态模型&#xff0c;为科研、教学、管理服务…

基于C++实现一个房贷计算小程序(含代码)

房贷计算程序&#xff0c;主要实现以下功能&#xff1a; 用户友好的界面&#xff1a;使用文本菜单来引导用户选择功能。支持不同还款频率&#xff1a;例如每季度还款、每半年还款等。支持贷款提前还款&#xff1a;计算提前还款对总支付利息的影响。详细的还款计划表&#xff1…

(二)ASP.NET Core WebAPI项目的启动地址设置

上一篇介绍了ASP.NET Core WebAPI项目创建&#xff0c;可参考&#xff1a; 1.webAPI的访问地址 1) 启动时&#xff0c;选择CoreWebAPI(项目名称)运行项目 可以看到打开浏览器后的地址是&#xff1a;applicationUrl"\"launchUrl 2) 启动时&#xff0c;选择IIS Expre…

C++mutable

文章目录 Claude 讲解基本用法mutable的常见用途注意事项 ChatGpt 讲解1. 基本概念2. 使用示例解释&#xff1a; 3. 适用场景4. 注意事项 lambda 讲解基本语法示例捕获方式使用场景 mutable 和 labmda 一起使用代码&#xff1a;代码分析&#xff1a;输出结果&#xff1a; 在C编…

(详细文档!)JavaSwing图书管理系统+mysql数据库

目 录 1.项目概述及需求分析................................ 1 2.系统设计......................................... 1 2.1程序总体设计......................................... 1 2.2数据库设计........................................... 2 2.3公共模块设计...…

论文学习(一):基于遥感技术的凉山州森林火险预测方法研究

文章目录 摘要部分一、绪论二、研究区历史火情分析2.1凉山州森林火灾年际变化特征2.2凉山州森林火灾月际变化特征2.3凉山州森林火灾空间分布特征2.4森林火灾等级与起火原因分析 三、数据与方法3.1数据来源3.2数据预处理3.3研究方法3.3.1逻辑回归&#xff1a;最大似然估计3.3.2决…

iOS——持久化

iOS的数据存储机制 沙盒机制 应用沙盒文件夹包含了&#xff1a; Application(应用程序包)&#xff1a;包含了所有的资源文件和和可执行文件&#xff0c;上架前经过数字签名&#xff0c;上架后不可修改。 Documents&#xff1a;文档目录&#xff0c;要保存程序生成的数据&…

华为OD机试 - 最大相连男生数 - 矩阵(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2027 标注数量(xml文件个数)&#xff1a;2027 标注数量(txt文件个数)&#xff1a;2027 标注…

信创实践(3):基于x2openEuler将CentOS升级成openEuler,享受其带来的创新和安全特性

引言&#xff1a; 在当前的 IT 行业中&#xff0c;创新和安全性是两大关键趋势。随着 CentOS 停止维护&#xff0c;许多用户正在寻找替代方案&#xff0c;以保持其系统的更新和安全。openEuler 作为一个强大的开源操作系统&#xff0c;成为了理想的迁移目标。本教程将指导您如…

大语言模型的上下文窗口(Context Windows):对人工智能应用的影响

大语言模型&#xff08;LLMs&#xff09;极大地提升了人工智能在理解和生成类人文本方面的能力。其中一个影响其效用的基本方面是它们的 “上下文窗口”—— 这个概念直接影响着这些模型接收和生成语言的有效性。我将深入探讨上下文窗口是什么、它们对人工智能应用的影响以及组…

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺

【通俗理解】Baseline在竞赛中的意义——性能比较的标准尺 关键词提炼 #Baseline #竞赛标准 #算法性能 #性能比较 #改进评估 #魔改基础 #优势彰显 第一节&#xff1a;Baseline的类比与核心概念【尽可能通俗】 1.1 Baseline的类比 Baseline在竞赛中就像是一场跑步比赛的起跑…

【IEEE独立出版 | 最终截稿时间:2024年9月9日23:59】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

【IEEE独立出版 | 最终截稿时间&#xff1a;2024年9月9日23:59】 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 202…