js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)

一、前言

博主最近沉迷js逆向,向各网站开刀,于是决定拿比较经典的微博登陆js加密来作为案例给大家讲解一下。

二、分析过程

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第1张图片
我们先从这个登录界面进行调试。先随便填写账号密码,找到登陆的请求接口。

在这里插入图片描述
很容易就找到这个post请求,接下来分析他的表单。

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第2张图片
经过多次发送请求,发现以下几个参数是变动的:severtime,nonce
,pubkey,rsaky,exectime,su,sp.
因此我们要在控制台内搜索这几个参数,首先我搜索了pubkey,发现了pubkey等参数是已经存在的。

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第3张图片
这样就好办多了,只要分析sp和su参数那不就行了么,经过分析su就是账号经过加密后的参数,sp就是密码经过加密后的参数。
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第4张图片
于是,又在控制台内搜索su和sp这两个参数,最后发现index.js这个js文件最为可疑。于是点进去仔细看了一下,发现了我们需要的参数。
在这里插入图片描述
这不就是我们要的su吗,于是我们直接编写js文件进行调试。

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第5张图片

随便输入一串数字测试一下,看结果是不是和在网页中的值是一样的。

在这里插入图片描述
运行后的结果
在这里插入图片描述
是不是有点眼熟?于是我重新登陆了微博,一样的账号,返回的su的值就是这个,大功告成,结束。
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第6张图片
不不不,还有一个sp参数,我们还没解决呢。
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第7张图片
OK,我们继续看,在js文件中搜索sp,发现了这个:在这里插入图片描述
不过不是很确定这就是我们需要的sp参数,于是我在这边打了个断点,运行结果:
在这里插入图片描述
发现这串数字是不是和刚开始表单内的sp很像?没错,这就是我们需要的sp参数,功夫不负有心人,终于找到了。
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第8张图片
我们接着往向下看:
在这里插入图片描述
发现b是通过这种方法得到的,然后把我们需要的js代码都复制粘贴进本地的js文件中,提供调用。
大致的解密思路差不多了,接下来就是编代码了。

三、编写代码

def get_sp_user():
    with open('weibo.js',encoding='utf-8-sig') as f:
        js_code = f.read()
        ctx = execjs.compile(js_code)
        sp = ctx.call("getpwd",pubkey,servertime,nonce,pwd )
        su = ctx.call("getuser",user)
        return sp,su

这里通过eecjs模块运行得到sp,su参数,然后其余参数都是现成的,我们加进去就行了。

form_data = {
    'entry':'sso',
    'gateway':'1',
    'from':'null',
    'savestate':'0',
    'useticket':'0',
    'pagerefer':'',
    'vsnf':'1',
    'su':su,
    'service':'sso',
    'servertime':servertime,
    'nonce':nonce,
    'pwencode':'rsa2',
    'rsakv':'1330428213',
    'sp':sp,
    'sr':'1536*864',
    'encoding':'UTF-8',
    'cdult':'3',
    'domain':'sina.com.cn',
    'prelt':exectime,
    'returntype':'TEXT',
}
response = requests.post(url=url,headers = headers,data=form_data)
print(response.text)

打印下的请求结果如下:
在这里插入图片描述
怎么回事?这个怎么还是乱码的?于是我将unicode码转为中文,结果如下:
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第9张图片
因为个人设置原因,于是在手机端微博同意登陆申请,最后成功登陆微博网页!

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第10张图片

js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第11张图片

四、结语

微博的js加密说难也不难,说简单吧,找这些参数也得花点时间,写下这篇文章,主要是想和大家分享一下js逆向的技巧,希望大家能够有所收获!

最后,还是希望大家点个赞、点个关注,让博主有继续写下去的动力,谢谢大家!
js逆向系列:解决网页版微博登陆的js加密(2020.9.1最新版)_第12张图片

你可能感兴趣的:(js逆向,Python,反爬虫,python,javascript)