某宝2020最新登录加密算法和滑小鸡算法

免责声明:本文仅供学习交流,文中的实验步骤仅用于测试,并未对某宝进行恶意性攻击。

01 背景介绍

或许每个热爱it的蓝孩子都有一个HK梦,总想着在web攻防之间寻找一种成就感,小快乐。近来,由于在看到有人分享了知乎登录加密以及滑块验证,自己就联想到他分享的方法对某宝有效吗?一番探索下来,虽然一路辛苦,但是结果是美好的。

也让我反思到,如果要让自己做的网站达到这种水平,我该如何加密,如何混淆代码,应用如何加壳防止反编译…知识是无穷无尽的,如果你也有跟我一样的兴趣,欢迎一起学习一起探索。

本文中要分享的点总共有两个

  • 某宝登录rsa加密分析
  • 某宝滑小鸡二次验证分析
    本文需要你有一定的js知识以及一定的调试知识,如基本的F12、postman等。
02 登录加密分析

前面的步骤比较简单,直接上图
环境准备
输入账号,此时可以看到发送了一个post请求,如果要分析ua就得看这个请求,如果仅分析加密算法,可跳过该请求。

输入密码,点击登录按钮,可以看到浏览器又发送了一个请求,如下:
登录请求
点击该请求,可以看到请求头、响应头等信息,不要急,页面往下滑,注意Form Data的地方:

看到这,应该有点眉目了,用户名和咱输入的一样,但是密码变了,一个特别长的字符串。此时,我们做一个假设,淘宝加密了我们的密码,然后和用户名拼一起,发了一个登录请求。

那这个密码是怎么来的呢?在这,我直接告诉你,淘宝js加密了我们的密码,然后发了post请求。

你或许还有疑问,如果我们直接往淘宝登录地址发请求,不加密密码,能成功吗?咱用postman试一试。

可以看到,如果不加密密码,直接发原始密码,则返回值提示“请输入密码”。明明我传输了密码呀,为什么还是提示密码为空。不着急,咱先往下看,关于这个原因稍后你一定会恍然大悟。

重点!重点!重点!

文章开篇的时候,我提过淘宝会对我们输入的js密码进行加密,然后再传输,那既然如此,我们试着找一找js加密的方法,如果找到了,把那个加密函数copy出来,或许我们可以在自己的js中加密呢。
看到这个结果,是不是有些惊喜呢,居然找到了,我们把相关代码拿出来看一下。

 e.prototype.getLoginData = function() {
  var t = this.rsaPassword(this.passwordNode.value())
     , e = this.state.keepLogin;
   return this.getCommonLoginData({
       loginId: this.getLoginId(),
       password2: t,
       keepLogin: e
   })
}

哦,懂了,它把rsaPassword()的返回值给了变量t,再把变量t赋值给我们要找的password2。明白了,原来是rsa加密。如果你稍稍知道此类加密的知识,你就恍然大悟了。公钥+原始密码–>加密–>发请求,后台收到请求后,用私钥解密,拿到你的原始密码。

如果我们直接把密码发过去,那后台解密失败,得到一个空的密码,自然会提示你“请输入密码”,原来是这样,索嘎!!!!


到这,我们已经逐渐接近事实真相了,在加密的附近下断点,点击登录按钮,按F11一步一步调试下去,可以找到加密相关的代码,最终把这些代码单独拎出来,放在自己的js中,就可以得到加密密码。

03 滑小鸡


滑小鸡算法比较有趣,相当于滑块的升级,因为滑块的话只要从左往右滑,稍微控制时间和轨迹就行,但滑小鸡的话小鸡位置不固定,相对复杂些。

关于该算法,我直接跟大家分享要注意的点。

  • 我使用的是selenium+chromdriver,chrom浏览器是最新版本,chrom浏览器和chromdriver版本需要配套
  • chromdriver的下载地址如下:http://chromedriver.storage.googleapis.com/index.html
  • 因为淘宝对selenium的检测很严格,所以关键点在于突破selenium的识别。
    • 主要涉及两点:修改chromdriver标识
    • 修改window.navigator.webdriver的值为undefined,如果为true,则判定为机器人操作,不管你怎么滑小鸡,都不会成功。
    • 除此,在滑小鸡的时候还需要注意小鸡元素的坐标,在js中直接搜索300px,看到一句关于滑小鸡的注释
  • 关于修改window.navigator.webdriver的值,如果是老版本的chromdriver,大概是v2.4的样子,直接设置开发者模式就可以让window.navigator.webdriver的值为undefined,但是最新的chrom浏览器并不适用,正确的代码如下:
#旧版本设置开发者模式
option.setExperimentalOption("excludeSwitches", 
Collections.singletonList("enable-automation"));

#新版本
HashMap<String, Object> map = Maps.newHashMap();
map.put("source", "Object.defineProperty(navigator, 'webdriver', {get: () => undefined }); ");
driver.executeCdpCommand("Page.addScriptToEvaluateOnNewDocument", map);
  • 关于ch’ro’m CDP—Chrome DevTool Protocol,有兴趣的可以自行百度了解,此处不再过多赘述。
  • 有的同学也许会猜想,都是执行js,刚好chrom driver有一个执行js的方法:executeScript(),那调用该方法修改window.navigator.webdriver的值是否有效呢?其实是无效的,因为页面加载完成后才执行js,早在这之前,淘宝根据window.navigator.webdriver的值就判定你为机器人了。无效的代码也给大家贴出来,避免大家入坑。
JavascriptExecutor jseExecutor=(JavascriptExecutor)driver;
jseExecutor.executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");
04 结语

好啦,今天的rsa加密分析和滑小鸡算法分析就到此结束,如果你有兴趣进一步了解,欢迎你跟我联系,我们一起学习讨论。

05 资料分享

本文中做了很多尝试,但是最后都失败了,讲的不好的地方希望大家多担待。但是学it就是这样,不断的试错,说句不好听的,自己制造bug,自己解决bug,就是这种磨练中不断的提升技术能力。

回想起我刚读大学那会儿,除了学习老师课堂上教授的知识,也在很多学习网站上听过一些老师的课程,但是免费课程效果不好,讲的好的动不动就几百块钱一套课程。好在我坚持下来了,几年来积累了很多课程。

总计2000多G,前端、后端、python、微信小程序、Spring系列、架构、中间件、代码调优、大数据、人工智能、机器学习、算法…。如果你刚好需要,联系我,我可以将资料免费分享给你。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学知学知

日拱一卒,欢迎您的加入

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值