声明:仅供技术交流,请勿用于非法用途 网站:aHR0cHMlM0EvL3dlaWJvLmNvbS8=

0x00 抓包分析

简单的搜索之后发现,很多参数都是登陆上面这个请求返回的值,这个请求在输入完账号光标到达密码框时就会生成

参数 来源
su 未知
servertime 请求返回
nonce 请求返回
rsakv 请求返回
sp 未知
prelt 未知
其余参数 固定值

0x01 加密逻辑分析

搜索su=可以很快找到加密的位置,上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的,搜索sinaSSOEncoder发现就是这个js,也就是说把当前js全部拷贝下来就可用


这里可以得知su是由账号加密得到

function getSu(user) {

return sinaSSOEncoder.base64.encode((user))

}


me.rsaPubkey,me.servertime,me.noce这三个值都是由服务器返回的值,不多做解释最后这个b则是我们的密码,e.sp也就是处理完后的b值

function getSp(me,pwd) {

var f = new sinaSSOEncoder.RSAKey;

f.setPublic(me.pubkey, "10001");

b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + pwd);

return b

}


在当前js文件中搜索prelt得知是由preloginTime生成preloginTime就是一个时间戳减一个停顿后的时间戳,其实可以设置为一个随机数

function getPrelt() {

exectime = Math.floor(Math.random() * (20 - 300 + 1) + 300)

return exectime

}

0x02 代码编写

1.获取nonce、rsakv等参数

import json

import re

import requests

import execjs

session = requests.session()

prelogin_url = 'https://login.sina.com.cn/sso/prelogin.php'

login_url = 'https://login.sina.com.cn/sso/login.php'

username = 'username'

password = 'password'

with open('login.js','r',encoding='utf-8') as f:

login_js = execjs.compile(f.read())

su = login_js.call('getSu',username)

params = {

'entry': 'weibo',

'callback': 'sinaSSOController.preloginCallBack',

'su': su,

'rsakt': 'mod',

'checkpin': '1',

'client': 'ssologin.js(v1.4.19)',

'_': '1578127327125',

}

prelogin_resp = requests.get(prelogin_url,params=params)

result = re.search(r'sinaSSOController.preloginCallBack\((.*?)\)',prelogin_resp.text).group(1)

result_json = json.loads(result)

print(result_json)

2.获取跳转链接

data = {

'entry': 'weibo',

'gateway': '1',

'from':'',

'savestate': '7',

'qrcode_flag': 'false',

'useticket': '1',

'pagerefer': '',

'vsnf': '1',

'su': su,

'service': 'miniblog',

'servertime': result_json['servertime'],

'nonce': result_json['nonce'],

'pwencode': 'rsa2',

'rsakv': result_json['rsakv'],

'sp': login_js.call('getSp',result_json,self.password),

'sr': '1920*1080',

'encoding': 'UTF-8',

'prelt': login_js.call('getPrelt'),

'url': 'https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',

'returntype': 'META',

}

resp = session.post(login_url,data=data)

print(resp.text)

3.获取跳转链接

location = re.search(r'replace\("(.*?)"\);',resp.text).group(1)

resp = session.get(location)

print(resp.text)

4.最后请求

location = re.search(r'replace\(\'(.*?)\'\);', resp.text).group(1)

resp = self.session.get(location)

print(resp.text)

5.登陆验证

到此为止已经是成功登陆了,最后再请求一下主页,如果返回的源代码中有自己的用户名,那么说明我们已经登陆成功了

resp = self.session.get('https://weibo.com/')

print(resp.text)

0x03 结尾

整体并不难,主要麻烦在需要多次跳转 完整代码已上传github 顺便求关注,求Star

js里面把密码encode_Python进阶最详细的JS加密登录X博相关推荐

  1. js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博

    0x00 抓包分析 简单的搜索之后发现,很多参数都是登陆上面这个请求返回的值,这个请求在输入完账号光标到达密码框时就会生成! 0x01 加密逻辑分析 搜索su=可以很快找到加密的位置,上图看到e.su ...

  2. 22个超详细的 JS 数组方法

    22个超详细的 JS 数组方法 数组是 js 中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响. 一.创建数组 1.使用数组 ...

  3. Interview:人工智能大数据岗位面试—【数据分析师】的简介、技能、待遇、进阶的详细攻略

    Interview:人工智能&大数据岗位面试-[数据分析师]的简介.技能.待遇.进阶的详细攻略 目录 数据分析师的简介 1.网友经验之谈 数据分析师的待遇 数据分析师的技能 数据分析师进阶 数 ...

  4. php tire树,Immutable.js源码之List 类型的详细解析(附示例)

    本篇文章给大家带来的内容是关于Immutable.js源码之List 类型的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.存储图解 我以下面这段代码为例子,画 ...

  5. mysql默认密码是多少_192.168.3.1默认登录密码是多少【详细介绍】

    "192.168.3.1默认登录密码是多少?在登录以192.168.3.1为登录地址的路由器时,不知道登录密码是多少,怎么办?"最近小编发现有网友在咨询这样的问题.其实以192.1 ...

  6. 前端工程师就业班Sass基础+进阶+案例开发经验【JS++前端】-艾小野-专题视频课程...

    前端工程师就业班Sass基础+进阶+案例开发经验[JS++前端]-98人已学习 课程介绍         本套课程是摘选自JS++第三期前端工程师精英就业班系列课程,进行系统深度的对Sass技术知识点 ...

  7. JavaScript从入门到摔门(2万字超详细的JS知识)

    概要: ECMAScript DOM BOM 文章目录 相见 初识JavaScript 相识 JS的数据类型 JS中的运算符 JS中的控制语句 相恋 JS对象和函数 相拥 JS事件 相爱 DMO编程 ...

  8. 计算机用户密码过期,电脑登陆密码已过期的详细解决方案

    有些使用密码保护的电脑用户,可能会遇到这样一种情况:输入电脑的开机密码,却提示你的密码已过期,必须更改.针对这种情况,我们该如何处理呢?怎么才能使电脑的密码保持长久有效?那么接下来韩博士小编就为大家带 ...

  9. JavaScript 的进阶学习 (Node.js)_01

    Node的学习 Node.js 是一个基于 Google 所开发的浏览器 Chrome V8 引擎的 JavaScript 运行环境. 属于 服务端的 JavaScript . 2019.03.01 ...

最新文章

  1. 信通院AI白皮书:硬核干货一文打尽,从技术流派到应用趋势【附下载】
  2. IE6 中的最大最小寬度和高度 css 高度 控制(兼容版本)
  3. c++代码小游戏_用Python编写一个打乒乓球小游戏
  4. PMCAFF微课堂 (已结束)| 京东平台产品负责人:如何打造一个支撑3200万日订单量的平台型产品
  5. Watson使用指南(三)
  6. JBuilder9+Weblogic8.1——Filter过滤器在Jbuilder9中的运用
  7. linux内核怎么修改屏幕旋转方向_树莓派4—屏幕旋转
  8. mysql+同步大师,mysql同步异常 - 低调的糊涂虫的个人页面 - OSCHINA - 中文开源技术交流社区...
  9. 信息系统项目管理06——项目进度管理
  10. 手把手图文并茂教你发布Android开源库
  11. 【TCAX+AVS+MeGui】这里讲讲过气tcax内置特效的制作流程吧
  12. Unity获取物体下的子物体+只获取子物体
  13. 《linux核心应用命令速查》连载五:atq:显示目前使用at命令后待执行的命令队列...
  14. 导航栏、标签栏、工具栏、状态栏
  15. 3441. 唐纳德与子串 (Easy)
  16. 契约测试(上):什么是契约测试
  17. Android Studio 添加图标
  18. 2021-2027全球与中国会议系统(麦克风)市场现状及未来发展趋势
  19. 我们创造世界的过程也是一个我们如何思考的过程,要想改变世界,必须先改变我们的思想
  20. fatal: xxx‘ does not appear to be a git repository fatal: Could not read from remote repository.

热门文章

  1. 渗透测试工作流程渗透测试类型法律边界
  2. pmp matlab 代码,【welch功率谱估计】C语言实现的代码与matlab计算结果不同
  3. javascript object 转换int_关于javascript 中类型转换那些事你知道吗?
  4. 清华计算机与科学系考研,清华计算机科学与技术系考研怎么复习
  5. linux usr local权限,OS X权限被拒绝/ usr/local/lib
  6. Nature子刊:基于水凝胶的灵活脑机接口
  7. 机器学习--线性回归(原理与例子)
  8. Linux启动加载过程解析
  9. 清华校友吴旻当选IEEE SPS首位华裔女主席,曾发明“数字水印”防伪技术
  10. 丘成桐教授,不必动怒