Python爬虫从入门到精通:(45)JS逆向:空中网逆向分析:js混淆_Python涛哥
2021/11/12 22:14:42
本文主要是介绍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)
这样,我们就获取到了密文!
知识点
- 了解
js混淆
秘钥
找不到时,可以到响应数据里找headers
里必要时,要加上Referer
、Cookies
等数据
关注Python涛哥!学习更多Python知识!
这篇关于Python爬虫从入门到精通:(45)JS逆向:空中网逆向分析:js混淆_Python涛哥的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01Vue.js 是什么-icode9专业技术文章分享
- 2024-11-01Vue3入门教程:从零开始搭建第一个Vue3项目
- 2024-11-01详解vueRouter4基础教程
- 2024-11-01Vuex4课程:初学者的完整入门指南
- 2024-10-31Vue3课程:新手入门到初级掌握
- 2024-10-31Vue3课程:新手入门到初级应用详解
- 2024-10-31VueRouter4课程:新手入门与实战指南
- 2024-10-31Vuex4学习:从入门到初级实战教程
- 2024-10-31Vue3教程:新手入门与基础实战
- 2024-10-31Vue教程:新手快速入门指南