JS逆向之某博参数

非法使用爬虫主要涉及这几类刑事犯罪:

侵犯公民个人信息罪、非法获取计算机信息系统数据罪、破坏计算机系统罪、非法侵入计算机系统罪、侵犯著作权罪。

所以兄弟们,干活请注意别碰那些边界的玩意,技术无罪,学着玩玩就好了。

这节逆一下某博登陆的几个小参数。

01

实战信息


网址:

aHR0cHM6Ly93ZWliby5jb20vbG9naW4ucGhw

aHR0cHM6Ly9sb2dpbi5zaW5hLmNvbS5jbi9zc28vbG9naW4ucGhwP2NsaWVudD1zc29sb2dpbi5qcyh2MS40LjE5KQ==

– servertime(明显的时间戳)

– sp(重点参数) 

0

实战流程

01

抓包找接口

先打开F12在Network面板等待抓包,然后点击登录发送XHR请求,最后去查找需要的包信息。

02

确认目标参数

 在请求里可以清楚的看到哪些是加密过是我们需要逆向的参数。

简单分析一下,su参数看眼像是Base64处理过的,后面去测试一下,servertime是16*****开头必定是时间戳,nonce也像是Base64处理过的,sp肯定是通过rsa加密来的因为参数里面有给rsa的key。

03

学会下断

看到请求就可以通过XHR下断了,这里主要有三个方法可以快速找到断点位置,XHR断点/click事件断点/直接搜索。

某博没对sp参数混淆过,所以直接去搜索即可搜到,搜索”sp=”,直接下断进入作用域即可。

e.sp是由b赋值过来的。b的方法来自于多次加密以及拼接,里面还有servertime以及nonce需要逆向,我们。先来逆一下其他简单的参数吧。

b = sinaSSOEncoder.hex_sha1("" + sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(b)) + me.servertime + me.nonce)

04

上手开干

 首先是su参数(通过内部搜索找到最近的上下文):

e.su = sinaSSOEncoder.base64.encode(urlencode(a));

像是base64编码,直接用控制台浏览器本地的测试一下即可。

一模一样,就说明这个方法是没有魔改的base64编码而已,su就是对输入的账号的一个编码。

然后是servertime这个时间戳:

e.servertime是由me.servertime传入的所以直接上下文搜索me.servertime,然后在上下文中找到这段内容,set时间,是由a形参传入,那就去找实参点。

前置条件是找到实参的传入位置。

来自prelogin方法的形参a,那就说明a是传入的点,直接断点到具体位置查看调用栈就能快速定位了。

这里发现,一开始形参a是空对象,所以是后续处理过的结果。所以用断点查看a。

看到输入账号之后也触发了断点,说明在账号输入完成鼠标离开时会触发这个事件,找到上一级方法栈调用。

选择anonymous这个断点,进去查看一下。

发现我们要的很多东西已经在这个文件里生成了,但是这个密钥等都是需要实时变更的,所以我们可以思考他怎么得到这个文件的,那只能是触发请求。

于是看到最后一个请求,即可知道他的详细信息。

https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=NjU0MzIx&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1658047073201

再看nonce参数:

也在返回的数据里。

最后只剩下sp参数了,那我们回到断点处去看看sp如何产生。

sp参数:

调试过程中发现只走791行的断点,所以我们知道他的加密方式就是这行,开始抠代码,是一段自执行的函数。

// 由于完整代码审核发不上所以将源码去掉讲个思路
// 把这文件里面的代码直接复制下来index.js?version=91c79ed46b5606b9:formatted
// 调试到可以执行,具体修改补环境在完整代码里

.call()方法就是将这个参数传进方法调用,接下来直接改写即可。

03

// 补环境
var window = global
var navigator = {
appName: 'Netscape'
}


/* 都是抠代码 */
/* 这里去自执行函数的括号,举例: */


// (function(){
// ....
// })()
//去掉这段即可,只保留...的内容


// 直接把RSAKey放到windows里
window.RSAKey = bq


// 测试
var f = new window.RSAKey
f.setPublic('EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443', "10001")
console.log(f.encrypt([1658053069, "YQ4I3A"].join('\t') + '\n' + '123456'))

喜欢就点个关注一起进步吧

  此文章仅做学习之用,请勿做违法违纪之事。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/218399.html

联系我们
联系我们
分享本页
返回顶部