目录

  • 一、寻找加密源码
  • 二、引入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. JUnit4.11 理论机制 @Theory 完整解读
  2. java 扫描包框架_在Android中实现类似Spring的软件包扫描
  3. poj1753Flip Game(dfs)
  4. CORE协议的MATLAB仿真
  5. android使用的图片压缩格式,Android 之使用libjpeg压缩图片
  6. python 替换array中的值_利用Python提取视频中的字幕(文字识别)
  7. ios时间相差多少天_上海自驾拉萨,走川进青出,应如何规划线路?需要多少天时间?...
  8. mysql 脚本安装工具_mysql 非安装版的一个自动安装脚本及工具(更新版)
  9. 如果使用SQLExpress 2005时要求'sp_configure 'User instances enabled''
  10. 惊呆了!这一操作将让NLP再次腾飞!
  11. Oracle数据库-建库、建表空间,建用户
  12. python 字符串处理_python 数据清洗之字符串处理
  13. EMI的主要原因-共模电流
  14. Android源码编译过程及刷机过程详解
  15. SpringBoot缓存@Cacheable
  16. 6-ipv6基础知识之-有状态和无状态自动配置
  17. 基于SpringBoot的分销商城的设计与实现(论文+源码)_kaic
  18. springbootjpa之hibernate sql拦截器
  19. 使用uni-app组件播放视频
  20. OSPF常用环境配置实战

热门文章

  1. 将豆瓣排名前250爬取数据通过sqlite3存入数据库
  2. pc usb充电测试软件,快速充电不是谎言?实测PC USB充电功能
  3. 演说演讲PPT模板推荐
  4. 基础篇—了解一些常用的基础知识
  5. 承兑汇票拒付什么情况下才能追索
  6. 商业承兑汇票到期后多久失效
  7. C语言数据结构上机题:高铁网络
  8. python比较三个数的大小_怎样用python比较三个数大小【Python教程】,用python比较三个数大小...
  9. 淘宝店铺基础优化细节 卖家忽略的店铺优化
  10. 基于OPENCV的手势识别技术