JS逆向案例 | CryptoJS模块破解加密字符串
目录
- 一、寻找加密源码
- 二、引入CryptoJS模块
- 三、Python解密
- 四、全部代码
本次爬取仅供学习交流,无任何商业用途,目标网址已做脱敏处理!
目标网址:aHR0cDovL2p6c2MubW9odXJkLmdvdi5jbi9kYXRhL2NvbXBhbnk=
一、寻找加密源码
抓包分析可知,原数据已被加密成长串字符。之前的博客已分析过,这种可能是JSON加密过的。因此,搜索Json.parse
函数,最终定位到JS文件如下所示
跟进JS文件后,继续搜索Json.parse
,最终定位到935行,在此打断点刷新,发现h函数就是最终的加密函数!
继续跟进h函数,可获得如下的加密逻辑
二、引入CryptoJS模块
在定位到加密逻辑后,现对该逻辑展开分析。之前的博客是继续跟进相应的函数,进行查漏补缺,不断完善。本次通过观察代码中出现AES.decrypt
,可判断为AES加密。此时,可以引用常见的加解密模块——CryptoJS。现重写加密逻辑,并保存为jscode.js
文件,如下所示
var CryptoJS = require("crypto-js")function Parse_Data(t) {var m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF"),f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn"),e = CryptoJS.enc.Hex.parse(t),n = CryptoJS.enc.Base64.stringify(e),a = CryptoJS.AES.decrypt(n, f, {iv: m,mode: CryptoJS.mode.CBC,padding: CryptoJS.pad.Pkcs7}),r = a.toString(CryptoJS.enc.Utf8);return r.toString()
}
注意:
- CryptoJS模块需要安装node.js,安装及环境配置可参照博客node.js安装教程
- 安装后,需在cmd以管理员模式中安装CryptoJS模块,命令如下
npm install crypto-js
三、Python解密
现用Python中的execjs
库执行上述JS代码,实现解密。
import requests
import execjs
import jsondef get_text(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36','cookies': 'Hm_lvt_b1b4b9ea61b6f1627192160766a9c55c=1647842220,1647842596; Hm_lpvt_b1b4b9ea61b6f1627192160766a9c55c=1647842596'}data = {'pg': 0, 'pgsz': 15, 'total': 450}r = requests.get(url, headers=headers, params=data)return r.textdef load_jscode(js_path):with open(js_path, 'r', encoding='utf-8') as f:js_code = f.read()return js_codeif __name__ == "__main__":url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?'r_text = get_text(url)js_code = load_jscode("jscode.js")rst = execjs.compile(js_code).call("Parse_Data",r_text)print(rst)
解密结果如下,成功返回数据!(注意:如果出现编码格式错误,可参照该博客execjs执行编码格式错误解决方法,修改_external_runtime.py文件)
四、全部代码
整理输出数据格式,现将全部代码整理如下
import requests
import execjs
import json
from jsonpath import jsonpath
import pandas as pddef get_text(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36','cookies': 'Hm_lvt_b1b4b9ea61b6f1627192160766a9c55c=1647842220,1647842596; Hm_lpvt_b1b4b9ea61b6f1627192160766a9c55c=1647842596'}data = {'pg': 0, 'pgsz': 15, 'total': 450}r = requests.get(url, headers=headers, params=data)return r.textdef load_jscode(js_path):with open(js_path, 'r', encoding='utf-8') as f:js_code = f.read()return js_codedef save_data(json_data):org_code = jsonpath(json_data, "$..list[*].QY_ORG_CODE")company_name = jsonpath(json_data, "$..list[*].QY_NAME")company_represent = jsonpath(json_data, "$..list[*].QY_FR_NAME")company_loc = jsonpath(json_data, "$..list[*].QY_REGION_NAME")final_data = pd.DataFrame({"社会信用代码": org_code,"企业名称": company_name,"法人代表": company_represent,"企业地址": company_loc})final_data.to_csv("company_information.csv",encoding='gbk',index=False)if __name__ == "__main__":url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?'r_text = get_text(url)js_code = load_jscode("jscode.js")rst = execjs.compile(js_code).call("Parse_Data", r_text)json_data = json.loads(rst)save_data(json_data)
最终数据如下
以上就是本次分享的全部内容~
JS逆向案例 | CryptoJS模块破解加密字符串相关推荐
- JS逆向|使用pyexecjs库替换加密字符串
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 下面的代码是我在某网站随便找的一段base64的 javascript 源码: window = {}; win ...
- Python爬虫之Js逆向案例(2)-某乎搜索
Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...
- Python爬虫之Js逆向案例(6)-某道翻译
Python爬虫之Js逆向案例(6)-有道翻译 声明:某道翻译加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,距离上次分享js逆向案例已经有一个月了,在这期间每次在快要揭秘出来时.整理文章 ...
- Python爬虫之Js逆向案例(8)-某乎x-zst-81之webpack
声明:某乎加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,相信各位童鞋通过上期<Python爬虫之Js逆向案例(7)-知hu最新x-zse-96之rpc方案>这篇文章了解了什么 ...
- Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)
关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...
- JS逆向案例文章推荐
1.JS逆向语法学习分享 2.JS逆向案例 阿J的CSDN 成功你要成仁啊的CSDN mkdir700的CSDN 渔滒的CSDN 咸鱼学python 白白嫩嫩的简书 考古学家的CSDN 太阳花田向日葵 ...
- JS逆向案例2:咪咕视频——学会模块改写
案例网址:https://www.migu.cn/video.html 我们省略js逆向时定位的过程,直接看RSA加密部分的代码: define("lib/rsa/rsa", [] ...
- 【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 抓包分析 加密逆向 完整代码 JavaScript 加密代码 Python 示例代码 声明 本文章中所 ...
- js逆向案例-猿人学比赛题(中等及以下难度的)
目录 1.注意 1.js混淆-源码乱码尝试hook window属性 2.js混淆-动态cookie 3.请求头顺序与请求规律检测 4.css样式style偏移干扰 5.js混淆-用hook定位与埋坑 ...
最新文章
- BusinessObject J2EE单点登陆简单使用
- flash mini播放器
- 调用WCF返回Josn的两种方式
- C#UDP通讯UdpClient
- tmpfiles.d导致的unix:///tmp/supervisor.sock no such file坑(待续)
- [HDU4635] Strongly connected
- Impersonate让你的子线程也具有主线程的执行权限
- 轨迹压缩文献阅读: Similarity-Based Compression of GPS Trajectory Data
- is_numeric 检测变量是否为数字或数字字符串
- 基于飞桨PaddlePaddle的地标检索识别夺竞赛双料大奖,获奖方案全解析
- 组态王总结之——数据库功能
- 使用java代码和jmeter脚本批量造数
- python发outlook邮件_通过Python发送Outlook电子邮件?
- 看完比尔盖茨30年的56条思考,我才理解他为什么能17年斩获世界首富!
- VC 用发音函数Beep 播放简谱音乐
- 夏令时-前端要知道的知识
- Windows下如何批量重命名
- 深度学习培训班当天小结1
- zcpa matlab,matlab习题结果解析.doc
- linux命令——ll详解
热门文章
- 扩容战争(上):内困与革命
- 拼多多待拼团,大家一起拼数据接口
- 51单片机、DS18B20、智能窗帘控制系统
- Battery Charging Specification(BC1.2)USB充电实测波形
- 首次导入的P12钥匙串密码问题
- 回溯法 之 马周游(马跳日)问题
- php jcrop,PHP调整Jcrop截取的上传头像功能
- 软硬协同,全栈自主:华为云GaussDB二十年磨一剑
- python爬虫框架scrap_python的爬虫框架scrap是什么?怎么用?
- 三年级学生写数学用计算机算,沪教版三年级数学下册使用计算器计算检测题