当前位置: 首页 > article >正文

Python爬虫从入门到精通:(45)JS逆向:空中网逆向分析:js混淆_Python涛哥

我们来看下空中网的逆向分析

在这里插入图片描述


js逆向分析

抓包后,经过分析,我们看到password在一个login-handler xxx.js文件中

在这里插入图片描述

我们点进去搜索password:

在这里插入图片描述

但我们看到,password在一段很长的文本中。

这里就涉及到了js混淆

js混淆

什么是js混淆:

将js核心的相关代码进行变相的加密,加密后的数据就是js混淆之后的结果。

js反混淆:

  • 反混淆的线上工具(不理想)

  • 浏览器自带的反混淆工具设置(推荐)

    开发者工具中的Sourse -> settings -> Sources ->第一项勾选

在这里插入图片描述

进行关键字的全局搜索 ->VMxx(就是反混淆后的代码)

在这里插入图片描述

然后我们点进去。搜索password,发现有好几处疑是加密的关键词,都打上断点,测试下:

在这里插入图片描述

我们看到了代码停留在了120行,说明这行就是密码加密。

我们在调试工具中来写一段js代码。

function getPwd(pwd) {
return encrypt(pwd, data["dc"]);
}

这里有一个data["dc"],我们不知道是什么。稍后再处理。

我们点击encrypt所在的函数进去,把里面所有的代码复制到调试工具里。

代码加载成功后,我们再来搜索这个data["dc"].

在这里插入图片描述

果然不出所料,这里是搜索不到的,我们只能换种方式了。

我们知道,秘钥不是在前台网页中,就是请求获取到的。我们可以分析下请求后的响应数据,看看有没有类似的数据:

在这里插入图片描述

果然我们在这个请求响应中找到了dc的值,我们复制值来测试下:
在这里插入图片描述

但这里又出现了错误。

在刚才的js代码中,encrypt(pwd, dc)前是有个this.的,那么这个this代表的是哪个对象呢?我们来分析下:

点击encrypt查看最上面的引用,看到对象就是KZLoginHandler.
在这里插入图片描述

好,那我们就继续改写代码:

在这里插入图片描述

计算结果,得出了正确的值。


Python代码实现

创建kongzhongwang.js文件,把上述js代码改写并复制进去:

function getPwd(pwd, dc) {return KZLoginHandler.encrypt(pwd, dc);
}

Python代码:

import requests
import re
import execjs# 获取秘钥
url = 'https://sso.kongzhong.com/ajaxLogin?j=j&jsonp=j&service=https://passport.kongzhong.com/&_=1635517824810'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text
print(page_text)

写到这里,我们发现并没有打印出内容。

那是因为,这个url的headers还需要Referer:

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36','Referer': 'https://passport.kongzhong.com/'
}

我们来继续写代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import re
import execjs
import json# 获取秘钥
url = 'https://sso.kongzhong.com/ajaxLogin?j=j&jsonp=j&service=https://passport.kongzhong.com/&_=1635517824810'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36','Referer': 'https://passport.kongzhong.com/'
}
page_text = requests.get(url=url, headers=headers).text
ex = r'KZLoginHandler.jsonpCallbackKongZ\((.*?)\)'
dc = re.findall(ex, page_text)[0]
dc = json.loads(dc)['dc']# 加密的逆向
node = execjs.get()
ctx = node.compile(open('./kongzhongwang.js', encoding='utf-8').read())
funcName = 'getPwd("{0}","{1}")'.format('123456', dc)
password = ctx.eval(funcName)
print(password)

这样,我们就获取到了密文!


知识点

  1. 了解js混淆
  2. 秘钥找不到时,可以到响应数据里找
  3. headers里必要时,要加上RefererCookies等数据

关注Python涛哥!学习更多Python知识!
在这里插入图片描述

http://www.lryc.cn/news/2413169.html

相关文章:

  • IntelliJ IDEA 2016.2激活方法汇总
  • 程序设计竞赛推荐两本实用书给你
  • cuteftp8.3序列号
  • 使用jsmooth将jar文件转换成可在无java的环境中运行的exe文件
  • 禁漫排行榜周目公告版_华泰证券手机版下载-华泰证券涨乐财富通手机版下载V7.5.0安卓版...
  • 影音先锋云服务器,影音先锋云服务器
  • ——Diary5(Java面向对象2——多态,内部类)
  • 转载:一些射频相关的网站
  • Activity Monitor使用说明
  • Python调试器-Pdb的简介及调试命令
  • 跨时空的相遇~为她制作一个专属的QQ空间相册(附源代码)
  • 【BLOCK】Oracle 块管理常用SQL
  • 北京师范大学珠海分校论坛 http://www.bnubbs.net
  • Springboot计算机毕业设计乐途网站的设计与实现ck8f1
  • 从头到尾彻底理解KMP(2014年8月22日版)
  • 计算机论文投稿指南
  • 扫雷游戏C语言代码实现——万字长文超详细,手把手教你实现,新手也能学会
  • opencv学习篇(3)snake轮廓检测
  • 自学Java最简单快速的学习路线图,快速从入门到精通
  • winxp IIS安装,一看就明白!
  • 零基础Python速成学习计划(详细)
  • 英特尔MeeGo: Intel开放软件平台MeeGo 应用总数过万
  • Visual Studio图形调试器详细使用教程(基于DirectX11)
  • kali web渗透
  • uart、串口、COM口、USB口,ttl,rs232,rs485这几个是什么关系?
  • 证书和域名的关系?
  • 如何用asp.net制作网站
  • 创建属于你的SDK!
  • Ubuntu镜像换源地址
  • 电力-二次融合FTU技术规范