重新加载js文件 页面重新加载JS方法

声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!逆向目标本次的逆向目标是WB的登录,虽然登录的加密参数没有太多,但是登录的流程稍微复杂一...

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

逆向目标

本次的逆向目标是WB的登录,虽然登录的加密参数没有太多,但是登录的流程稍微复杂一点,经历了很多次中转,细分下来大约要经过九次处理才能成功登录。

在登录过程中遇到的加密参数只有一个,即密码加密,加密后的密码在获取 token 的时候会用到,获取 token 是一个 POST 请求,其 Form Data 里的 sp 值就是加密后的密码,类似于:
e23c5d62dbf9f83***005f331e487873c70d7ab0e8dd2057c3e66d1ae5d2837ef1dcf86……

登录流程

首先来理清一下登录流程,每一步特殊的参数进都行了说明,没有提及的参数表示是定值,直接***即可。

大致流程如下:

预登陆获取加密密码获取 token获取加密后的账号发送验证码校验验证码访问 redirect url访问 crossdo***in2 url通过 passport url 登录

1.预登陆

预登陆为 GET 请求,Query String Parameters 中主要包含两个比较重要的参数:su:用户名经过 base*** 编码得到,_: 13 位时间戳,返回的数据包含一个 JSON,可用正则提取出来,JSON 里面包含 retcode,servertime,pcid,nonce,pubkey,rsakv, exectime 七个参数值,其中大多数值都是后面的请求当中要用到的,部分值是加密密码要用到的,返回数据数示例:

2.获取加密后的密码

密码的加密使用的是 RSA 加密,可以通过 Python 或者 JS 来获取加密后的密码,JS 加密的逆向在后面拿出来单独分析。

3.获取 token

这个 token 值在后面的获取加密定位器号、发送验证码、校验验证码等步骤中都会用到,获取 token 值为 POST 请求,Query String Parameters 的值是固定的:client: ssologin.js(v1.4.19),Form Data 的值相对来说比较多,但是除了加密的密码以外,其他参数其实都是可以在第1步预登陆返回的数据里找到,主要的参数如下:

su:用户名经过 base*** 加密得到servertime:通过第1步预登陆返回的 JSON 里面获取nonce:通过第1步预登陆返回的 JSON 里面获取rsakv:通过第1步预登陆返回的 JSON 里面获取sp:加密后的密码prelt:随机值

返回数据为 HTML 源码,可以从里面提取 token 值,类似于:
2NGFhARzFAFAIp_QwX70Npj8gw4lgj7RbCnByb3RlY3Rpb24.,如果返回的 token 不是这种,则说明账号或者密码错误。

4.获取加密后的账号

前面我们遇到的 su 是用户名经过 base*** 加密得到,这里它对用户名进行了进一步的加密处理,加密后的用户名在发送验证码和校验验证码的时候会用到,GET 请求,Query String Parameters 的参数也比较简单,token 就是第3步获取的 token 值,callback_url 是网站的主页,返回数据是 HTML 源码,可以使用 xpath 语法://input[@name=’encrypt_mobile’]/@value 来提取加密后的账号,其值类似于:f2de0b5e333a,这里需要注意的是,即便是同一个账号,每次加密的结果也是不一样的。

5.发送验证码

发送验证码是一个 POST 请求,其参数也比较简单,Query String Parameters 里的 token 是第3步获取的 token,Form Data 里的 encrypt_mobile 是第4步获取的加密后的账号,返回的数据是验证码发送的状态,例如:{‘retcode’: 20000000, ‘msg’: ‘succ’, ‘data’: []}。

6.校验验证码

校验验证码是一个 POST 请求,其参数也非常简单,Query String Parameters 里的 token 是第3步获取的 token,Form Data 里的 encrypt_mobile 是第4步获取的加密后的账号,code 是第5步收到的验证码,返回数据是一个 JSON,retcode 和 msg 代表校验的状态,redirect url 是校验步骤完成后接着要访问的页面,在下一步中要用到,返回的数据示例:

7.访问 redirect url

这一步的请求接口其实就是第6步返回的 redirect url,GET 请求,类似于:
https://login.xxxx.com.cn/sso/login.php?entry=xxxxx&returntype=META……

返回的数据是 HTML 源码,我们要从中提取 crossdo***in2 的 URL,提取的结果类似于:
https://login.xxxx.com.cn/crossdo***in2.php?action=login&entry=xxxxx……,同样的,这个 URL 也是接下来需要访问的页面。

8.访问 crossdo***in2 url

这一步的请求接口就是第7步提取的 crossdo***in2 url,GET 请求,类似于:
https://login.xxxx.com.cn/crossdo***in2.php?action=login&entry=xxxxx……

返回的数据同样是 HTML 源码,我们要从中提取真正的登录的 URL,提取的结果类似于:
https://passport.xxxxx.com/wbsso/login?ssosavestate=1661828618&url=https……,最后一步只需要访问这个真正的登录 URL 就能实现登录操作了。

9.通过 passport url 登录

这是最后一步,也是真正的登录操作,GET 请求,请求接口就是第8步提取的 passport url,类似于:
https://passport.xxxxx.com/wbsso/login?ssosavestate=1661828618&url=https……

返回的数据包含了登录结果、用户 ID 和用户名,类似于:

自此,WB的完整登录流程已完成,可以直接拿登录成功后的 cookies 进行其他操作了。

加密密码逆向

在登录流程中,第2步是获取加密后的密码,在登录的第3步获取 token 里,请求的 Query String Parameters 包含了一个加密参数 sp,这个就是加密后的密码,接下来我们对密码的加密进行逆向分析。

直接全局搜索 sp 关键字,发现有很多值,这里我们又用到了前面讲过的技巧,尝试搜索 sp=、sp: 或者 var sp 等来缩小范围,在本案例中,我们尝试搜索 sp=,可以看到在 index.js 里面只有一个值,埋下断点进行调试,可以看到 sp 其实就是 b 的值:

PS:搜索时要注意,不能在登录成功后的页面进行搜索,此时资源已刷新,重新加载了,加密的 JS 文件已经没有了,需要在登录界面输入错误的账号密码来抓包、搜索、断点。

继续往上***这个 b 的值,关键代码有个 if-else 语句,分别埋下断点,经过调试可以看到 b 的值在 if 下面生成:

分析一下两行关键代码:

me.rsaPubkey、me.servertime、me.nonce 都是第1步预登陆返回的数据。

把鼠标移到 f.setPublic 和 f.encrypt,可以看到分别是 br 和 bt 函数:

分别跟进这两个函数,可以看到都在一个匿名函数下面:

直接将整个匿名函数***下来,去掉最外面的匿名函数,进行本地调试,调试过程中会提示 navigator 未定义,查看***的源码,里面用到了 navigator.appName 和 navigator.appVersion,直接定义即可,或者置空都行。

继续调试会发现在 var c = this.doPublic(b); 提示对象不支持此属性或方法,搜索 doPublic 发现有一句 bq.prototype.doPublic = bs;,这里直接将其改为 doPublic = bs; 即可。

分析整个 RSA 加密逻辑,其实也可以通过 Python 来实现,代码示例(pubkey 需要补全):

完整代码

GitHub 关注 K 哥爬虫,持续分享爬虫相关代码!欢迎 star !
https://github.com/kgepachong/

**以下只演示部分关键代码,不能直接运行!**完整代码仓库地址:
https://github.com/kgepachong/crawler/

关键 JS 加密代码架构

Python 登录关键代码

本文来自吃鸡只用平底锅投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/480738.html

打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
() 0
上一篇 03-29
下一篇 03-29

相关推荐

  • excel页面布局在哪里

    1、excel2010 设置 页面布局的方法 1纸型设置 点击页面布局rarr纸张大小在弹出的下拉菜单中有多种纸张类型可以选择,我一般选择A4,因为办公室的打印机一般都能打印A4的纸张2在页面布局rarr纸。2、打开编辑好的Excel文档,选中想要打印的区域,点击页面布局选项卡,选择打印区

    2023-07-29 09:09:01
    791 0
  • 进入路由器设置页面 电脑进入路由器设置界面

    1。连接线将运营商的宽带网线连接到路由器的WAN口或WAN/LAN口。线路连接后,如果WAN口对应的指示灯不亮,说明线路连接有问题。请检查以确保网络电缆连接牢固,或者尝试更换另一根网络电缆。2。设置路由器上网(1)查看路由器底部标签上的路由器出厂监听信号名称。(2)打开定位器

    2023-07-29 08:52:01
    206 0
  • iwebshop测试用例计划 注册页面的测试用例

    电子邮件邀请注册并增加积分为了吸引更多的用户在网站注册,我们可以在iWebshop中增加邮件邀请用户的功能。流动1.注册会员在会员中心输入朋友的电子邮件地址。2.通过SendMail向您朋友的电子邮件发送邀请会员注册链接。3.好友点击链接后,跳转到会员注册页面,开始注册会员。4

    2023-07-28 23:13:01
    475 0
  • js页面跳转传值 webform页面传值

    通常有以下方法在页面之间传递值:1.网址(如index.html?id=123)2、饼干3.本地存储(本地存储,会话存储)SessionStorage类似于localStorage,只是存储在localStorage中的数据没有过期时间设置,而存储在sessionStorage中的数据将在页面会话结束时被清除。(即localStorage长时间

    2023-07-27 22:47:01
    384 0

评论列表

联系我们

在线咨询: QQ交谈

邮件:admin@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信