目录

  • 一、寻找加密源码
  • 二、引入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模块破解加密字符串相关推荐

  1. JS逆向|使用pyexecjs库替换加密字符串

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 下面的代码是我在某网站随便找的一段base64的 javascript  源码: window = {}; win ...

  2. Python爬虫之Js逆向案例(2)-某乎搜索

    Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...

  3. Python爬虫之Js逆向案例(6)-某道翻译

    Python爬虫之Js逆向案例(6)-有道翻译 声明:某道翻译加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,距离上次分享js逆向案例已经有一个月了,在这期间每次在快要揭秘出来时.整理文章 ...

  4. Python爬虫之Js逆向案例(8)-某乎x-zst-81之webpack

    声明:某乎加密逆向分析仅用于研究和学习,如有侵权,可联系删除 大家好,相信各位童鞋通过上期<Python爬虫之Js逆向案例(7)-知hu最新x-zse-96之rpc方案>这篇文章了解了什么 ...

  5. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)

    关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...

  6. JS逆向案例文章推荐

    1.JS逆向语法学习分享 2.JS逆向案例 阿J的CSDN 成功你要成仁啊的CSDN mkdir700的CSDN 渔滒的CSDN 咸鱼学python 白白嫩嫩的简书 考古学家的CSDN 太阳花田向日葵 ...

  7. JS逆向案例2:咪咕视频——学会模块改写

    案例网址:https://www.migu.cn/video.html 我们省略js逆向时定位的过程,直接看RSA加密部分的代码: define("lib/rsa/rsa", [] ...

  8. 【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 抓包分析 加密逆向 完整代码 JavaScript 加密代码 Python 示例代码 声明 本文章中所 ...

  9. js逆向案例-猿人学比赛题(中等及以下难度的)

    目录 1.注意 1.js混淆-源码乱码尝试hook window属性 2.js混淆-动态cookie 3.请求头顺序与请求规律检测 4.css样式style偏移干扰 5.js混淆-用hook定位与埋坑 ...

最新文章

  1. BusinessObject J2EE单点登陆简单使用
  2. flash mini播放器
  3. 调用WCF返回Josn的两种方式
  4. C#UDP通讯UdpClient
  5. tmpfiles.d导致的unix:///tmp/supervisor.sock no such file坑(待续)
  6. [HDU4635] Strongly connected
  7. Impersonate让你的子线程也具有主线程的执行权限
  8. 轨迹压缩文献阅读: Similarity-Based Compression of GPS Trajectory Data
  9. is_numeric 检测变量是否为数字或数字字符串
  10. 基于飞桨PaddlePaddle的地标检索识别夺竞赛双料大奖,获奖方案全解析
  11. 组态王总结之——数据库功能
  12. 使用java代码和jmeter脚本批量造数
  13. python发outlook邮件_通过Python发送Outlook电子邮件?
  14. 看完比尔盖茨30年的56条思考,我才理解他为什么能17年斩获世界首富!
  15. VC 用发音函数Beep 播放简谱音乐
  16. 夏令时-前端要知道的知识
  17. Windows下如何批量重命名
  18. 深度学习培训班当天小结1
  19. zcpa matlab,matlab习题结果解析.doc
  20. linux命令——ll详解

热门文章

  1. 扩容战争(上):内困与革命
  2. 拼多多待拼团,大家一起拼数据接口
  3. 51单片机、DS18B20、智能窗帘控制系统
  4. Battery Charging Specification(BC1.2)USB充电实测波形
  5. 首次导入的P12钥匙串密码问题
  6. 回溯法 之 马周游(马跳日)问题
  7. php jcrop,PHP调整Jcrop截取的上传头像功能
  8. 软硬协同,全栈自主:华为云GaussDB二十年磨一剑
  9. python爬虫框架scrap_python的爬虫框架scrap是什么?怎么用?
  10. 三年级学生写数学用计算机算,沪教版三年级数学下册使用计算器计算检测题