新浪微博登录JS加密算法

声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。

新浪微博作为国内最大的即使分享社交平台,其用户基数庞大,为了进一步维护网络社交环境,阻止机器人等无用用户涌入,微博必然会提高用户登录的门槛(增强其数据加密算法)以防范爬虫机器人的存在。可事实上,就算新浪微博再怎么将其防护算法复杂化,我们依然会看到我们的个人账户上出现一些垃圾粉丝(机器人),那它们是怎么做到登录的呢?微博又是如何应对它们的登录的呢?让笔者一一道来。

我们在输入账户密码点击登录之后,抓包会发现发起了一个POST请求,如下图所示:

遵循上节淘宝算法分析的流程,我们依然寻找参数中我们不认识的部分(被加密的部分),我们来看看微博会传输哪些我们的个人信息来识别用户身份。笔者的params参数如下,我们可以发现其中su、servertime、nonce、rsakv、sp、prelt使我们无法理解的一些参数。在淘宝中我们可以通过参数名字password2得知密码的加密,可是在新浪微博中,参数名都似乎毫无意义,只有servertime是一个明显的时间戳。显然在参数名上做混淆还是有点阻碍的,那就是不得不把参数都分析一下,虽然我们可以凭直觉判断sp就是密码(最长的)。那我们接下来就看看su、nonce、rsakv、sp、prelt是如何加密的。

entry: weibo
gateway: 1
from:
savestate: 0
qrcode_flag: false
useticket: 1
pagerefer:
vsnf: 1
su: MTIzNDU2
service: miniblog
servertime: 1589088275
nonce: KCSD87
pwencode: rsa2
rsakv: 1330428213
sp: 6e2ef2ab923b2850a5f696edd9d97b37abfe6cc4227862a3a33435a6eb12334eb835af5478deadb64ccd0916fb6d2e6033a22a5bc569365a7eed4aead06996081e334f9f5dc5cda28658af893d66d615a63bd93ff73cec05d4c545b5ac0d7a26bf30047870b36f9789076bde74930d9fc5cc1d2fc760a016cf51dbf1a394acff
sr: 1536*864
encoding: UTF-8
prelt: 216
url: https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
returntype: META

我们首先直接搜索nonce,会出现以下符合项:

而笔者此时的nonce数值为KCSD87,显然最后一个才是我们需要的JS脚本,我们打开发现,servertime、nonce、pubkey、rsakv都是写死的,而且我们可以得到公钥,且直到这是一个RSA加密,这样就简单多了。运用排除法,剩下的su就是用户名,sp就是密码了。

我们接着搜索su,可以找到以下的符合项,在su一行下断点,按下F11。对照右边的Scope,我们发现它只是单纯地将我们的用户名(12345600)进行base64加密,原来如此,难怪找不到用户名呢!我们在附近也可以找到另一个关键sp!

接下来我们在798行sp处下断点,点击页面登录,发现791行的rsa加密和796行的hex_sha1加密都会执行,而且结果是一样的,那我们就选择rsa好了,毕竟我们得到了公钥。

好,现在我们已经分析完了大半,不过“行百步而半九十”,后边扣JS代码才繁琐呢,我们在791行下断点,F11进入其中,找到encrypt函数。

它的名字居然是bt!不是我们的encrypt,不过没事,我们发现它的参数签名分别是我们的servertime和nonce,显然就是我们需要的加密函数,只不过换了个名字罢了。我们接下来把和它相关的代码拷贝下来。

大概1000行加密代码左右,部分脚本如下:

......
me={"retcode": 0,"servertime": 1589088259,"pcid": "tc-9fb820facc9e56e321eea1c272edffc37c4a","nonce": "KCSD87","pubkey": "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv": "1330428213","is_openlock": 0,"showpin": 0,"exectime": 15
};function getPwd(pwd) {var f = new sinaSSOEncoder.RSAKey;f.setPublic("EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443", "10001");b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + pwd)return b;
}

我们编写Python脚本来验证一下,看能不能获取到我们需要的数值。

import execjsdef getpwd(password):with open('wb.js', 'r', encoding='utf8')as f:content = f.read()jsdata = execjs.compile(content)pw = jsdata.call('getPwd', password)print('pw:', pw)return pwif __name__ == '__main__':getpwd(123456)

在cmd运行,得到:

至此,新浪微博的登录加密算法已分析完毕,希望读者能有所得。

JS安全防护算法与逆向分析——新浪微博登录JS加密算法相关推荐

  1. JS安全防护算法与逆向分析——淘宝登录JS加密算法

    淘宝登录JS加密算法 <反爬虫AST原理与还原混淆实战>书稿内容 声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力.绝无其他任 ...

  2. js逆向爬虫入门-03.凡科网逆向分析模拟登录

    目录 逆向分析 python代码 git仓库    https://gitee.com/cycle1/py_re_js.git 逆向分析 凡科网,让经营更简单-凡科网登录 和其他网站一样 随便输入点啥 ...

  3. android 微博分享回调函数,【JS逆向】新浪微博登录RSA+其他 | 每日JS

    已迁移平台:segmentfault,搜索 erma0 换平台了,简书发什么都锁定,广告一堆,趁早倒闭吧. 第六天 JavaScript逆向练习6 0x01 目标网址 0x02 定位JS 1. 随便输 ...

  4. 轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析

    最近忙着在搞大数据相关的东西,没什么太多时间去研究复杂的JS,所以给大家来几个练手的网站"攒攒经验"吧!这次出的系列是<轻JS逆向分析"攒经验"项目> ...

  5. [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向

    从2019年7月开始,我来到了一个陌生的专业--网络空间安全.初入安全领域,是非常痛苦和难受的,要学的东西太多.涉及面太广,但好在自己通过分享100篇"网络安全自学"系列文章,艰难 ...

  6. f5 shape最新版逆向分析

    f5 shape最新版逆向分析 前言 shape js部分 逆向 最后 前言 研究js逆向已经大半年了,这次就来碰碰传说中最难的盾f5 shape,需要联系的直接v加我csdn用户名freak1337 ...

  7. rsa加密算法python_模拟新浪微博登录(Python+RSA加密算法)

    声明: 由于本人使用用的是Python语言,以下内容就在该语言下进行解释说明.有使用Java语言的可以参考IT男杂记(http://marspring.mobi/http-client-weibo/) ...

  8. js aes加密_某高考咨询网js逆向分析笔记

    一.某高考资讯网逆向分析 某网站的js加密分析,安全签名signsafe + HmacSHA1 + AES 一年前分析过网站数据还没有加密,最近需要获取新的数据发现原先的爬虫失效,请求和响应都经过加密 ...

  9. QAX答题页面js逆向分析(二)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.通过前端js解密,获取答案 二.通过Python,模拟请求完成自登录到答题的所有操作. 1.引入库 2. 程序结构 ...

最新文章

  1. lol为什么网络连接到服务器未响应,lol登陆服务器未响应是怎么回事 解决lol登陆服务器未响应有方法...
  2. stm32 堆和栈(stm32 Heap Stack)【worldsing笔记】
  3. CF #737(div2) Ezzat and Two Subsequences 找规律
  4. c语言 指针到字符串,C语言中的指针和字符串
  5. 推荐系统常用评价指标和代码实现
  6. mybatis redis_基于人事年假管理的系统springboot+mybatis+redis+拦截器
  7. php for of,JavaScript中 for、for in、for of、forEach的用法小结(附代码)
  8. 遗传算法图解_遗传算法图解指南
  9. CSS选取子标签元素:nth-child、first-child、last-child
  10. 字符编码——简体中文编码中区位码、国标码、内码、外码、字形码的区别及关系
  11. 计算机国际会议开幕词,英文一篇计算机国际会议的开幕词
  12. 待办事项列表,敏捷项目管理的核心工件
  13. 伊宅购集团伊家田园勠力同心数字农业项目说明会圆满举行!
  14. 客户旅程分析 Customer Journey Mapping
  15. 从零搭建“人工智障”音箱
  16. 2022-2028年全球与中国热电堆和微测辐射热计红外探测器行业发展趋势及投资战略分析
  17. 我的世界服务器自定义ui,自定义主菜单CustomMainMenu mod教程
  18. 涉黄网站爆四大生财链:站长月入近两万
  19. Java面试系列——数据库(01)数据库的作用、分类、SQL语言、运算符
  20. newman执行测试_Postman+Newman执行自动化测试

热门文章

  1. passport策略之passport-facebook使用facebook认证
  2. Joomla安装过程中MySQL出现错误
  3. Vue.js 框架源码与进阶 - Vue.js 源码剖析 - 响应式原理
  4. java8 stream map flatMap
  5. python数字1 3怎么表示_Python3数据类型之数字
  6. python绘制图形沙漏_pytorch-pose一个用于二维人体姿势估计的PyTorch工具包。 - pytorch中文网...
  7. Transferable Joint Attribute-Identity Deep Learning for Unsupervised Person Re-Identification
  8. linux repo
  9. 云南师范大学计算机题库,2017年云南师范大学408计算机学科专业基础综合之计算机组成原理考研仿真模拟题...
  10. self.canv.bookmarkPage(key, left=inch*0.5) ,为什么在reportlab中设置的缩进不生效?