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

所以大部分网站及App 都采取图形验证码或滑动验证码等交互解决方案, 但在机器学习能力提高的当下,连百度这样的大厂都遭受攻击导致点名批评, 图形验证及交互验证方式的安全性到底如何? 请看具体分析
一、 小米官网会员注册入口
简介:小米集团成立于2010年4月,2018年7月9日在香港交易所主板挂牌上市(1810.HK),是一家以智能手机、智能硬件和IoT平台为核心的消费电子及智能制造公司。
胸怀“和用户交朋友,做用户心中最酷的公司”的愿景,小米致力于持续创新,不断追求极致的产品服务体验和公司运营效率,努力践行“始终坚持做感动人心、价格厚道的好产品,让全球每个人都能享受科技带来的美好生活”的公司使命。

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

三、 测试方法:
前端界面分析,版本号为2.0,最大特点就是将图片做分割后,在前端再做合并,这就好办了, 网上有大量现成的逆向文章及视频参考,不过我们这次不用逆向, 只是采用模拟器的方式,关键点主要模拟器交互、距离识别和轨道算法3部分。 
- 模拟器交互部分
public RetEntity send(WebDriver driver, String areaCode, String phone) {
try {
RetEntity retEntity = new RetEntity();
driver.get(INDEX_URL);
WebElement rcElement = ChromeDriverManager.waitElement(driver, By.xpath("//img[@alt='图片验证码']"), 2);
if (rcElement != null) {
System.out.println("-------------------------------exists img captch-------------------------------");
return null;
}
// 输入手机号
By phoneBy = By.name("phone");
GeetSplitApi.waitForLoad(driver, phoneBy);
WebElement phoneElemet = driver.findElement(phoneBy);
phoneElemet.sendKeys(phone);
// 点击同意书
driver.findElement(By.xpath("//input[@class='ant-checkbox-input']")).click();
// 点击获取验证码
WebElement clickElemet = driver.findElement(By.className("ant-btn-link"));
clickElemet.click();
Thread.sleep(1000);
geetApi.getAndMove(driver, 6);
Thread.sleep(1000);
// 获取发送按钮状态
clickElemet = driver.findElement(By.className("ant-btn-link"));
String msg = (clickElemet != null) ? clickElemet.getText() : null;
retEntity.setMsg(msg);
if (msg != null && msg.contains("重新发送")) {
retEntity.setRet(0);
} else {
retEntity.setRet(-1);
System.out.println("msg=" + msg);
}
return retEntity;
} catch (Exception e) {
System.out.println(e.toString());
return null;
} finally {
driver.manage().deleteAllCookies();
}
}
- 获取滑动图片及调用移动交互
public boolean getAndMove(WebDriver driver, Integer offSet) {
int distance = -1;
try {
WebElement moveElement = ChromeDriverManager.waitElement(driver, By.className("geetest_slider_button"), 1000);
if (moveElement == null) {
logger.error("getAndMove() moveElement=" + moveElement);
return false;
}
// 下面的js代码根据canvas文档说明而来
// 完整背景图geetest_canvas_fullbg geetest_fade geetest_absolute
StringBuffer base64 = new StringBuffer();
String fullName = "geetest_canvas_fullbg geetest_fade geetest_absolute";
byte[] fullImg = GetImage.callJsByName(driver, fullName, base64);
String bgName = "geetest_canvas_bg geetest_absolute";
byte[] bgImg = GetImage.callJsByName(driver, bgName, base64);
File fullFile = null, bgFile = null;
if (fullImg != null && bgImg != null) {
Long time = System.currentTimeMillis();
fullFile = new File(dataPath + "geet/" + time + "full.png");
FileUtils.writeByteArrayToFile(fullFile, fullImg);
bgFile = new File(dataPath + "geet/" + time + "bg.png");
FileUtils.writeByteArrayToFile(bgFile, bgImg);
if

最低0.47元/天 解锁文章
799

被折叠的 条评论
为什么被折叠?



