python 逆向爬虫正确调用 JAR 加密逻辑


Posted in Python onJanuary 12, 2021

1. 前言

在 App 端爬虫过程中,遇到未知的参数,往往需要我们去逆向破解 App,针对参数的生成逻辑,使用 Python 去实现

部分 App 参数的生成逻辑可能已经写入到多个 JAR 文件中,这时候,我们只需要用 Python 执行 JAR 即可

本篇文章将聊聊 Python 如何调用 JAR 中的方法

2. 合并 JAR

​以 Android App 为例,假设加密参数生成逻辑在多个 JAR 中,我们首先需要将所有的 JAR 文件合并为一个 JAR 文件

PS:对于 AAR 文件,可以先通过解压软件解压,然后再合并 JAR

合并 JAR 分为 2 步:

  • 解压 JAR
  • 合并所有源码

2-1  解压 JAR

安装 JDK 之后,通过 jar -xvf 命令去解压单个 JAR,这样会按包名在同级目录下生成 JAVA 编译后的 class 文件

# 一个个地去解压JAR
# 在本地生成class文件
jar -xvf a.jar
jar -xvf b.jar
jar -xvf c.jar

2-2 合并所有源码

使用 jar -cvfM 命令,将本地所有的 class 文件生成一个新的 JAR 

# 合并当前目录下所有源码为一个JAR
# 其中:output.jar代表新的JAR
jar -cvfM output.jar .

3. Python 调用 JAR

首先,我们安装依赖包:jpype

# 安装依赖包
pip3 install JPype1

假设 JAR 中加密逻辑实现代码如下:

package com.xingag.common;

public class EncryHelper {
 public String encrypt(String content) {
   //加密逻辑
 }
}

使用 Python 调用 JAR 中的方法分为 3 步:

  • 启动 JVM
  • 实例化 JAVA 对象,调用对应方法
  • 关闭 JVM

3-1  启动 JVM

import jpype

# JAR本地路径
jar_path = os.path.join(os.path.abspath('.'), './output.jar')

# 启动jvm
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % (jar_path))

3-2  实例化 JAVA 对象,调用方法

根据被调方法所在的包名,使用 jpyte 中的 JClass() 方法实例化类 JAVA 对象,最后调用 JAVA 对象的方法即可

需要注意的是,由于 JAVA 中是实例方法,需要先进行对象实例化,然后调用方法;如果是静态方法,可以直接调用方法

# 通过包名,实例化JAVA对象
EncryClass = jpype.JClass("com.xingag.common.EncryHelper")
encryClass = EncryClass()

# 调用JAVA中的加密方法
content_encry = encryClass.encrypt("xag")
print(content_encry)

4. 最后

Python 直接调用 JAR 中方法,可以帮我我们复用轮子,减轻爬虫的工作量!

以上就是python 逆向爬虫正确调用 JAR 加密逻辑的详细内容,更多关于python 爬虫正确调用 JAR 加密逻辑的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python中常用信号signal类型实例
Jan 25 Python
python实现拓扑排序的基本教程
Mar 11 Python
Python入门必须知道的11个知识点
Mar 21 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
Python 中@property的用法详解
Jan 15 Python
将labelme格式数据转化为标准的coco数据集格式方式
Feb 17 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
pycharm 快速解决python代码冲突的问题
Jan 15 Python
Jupyter notebook 不自动弹出网页的解决方案
May 21 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 #Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 #Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 #Python
将不规则的Python多维数组拉平到一维的方法实现
Jan 11 #Python
python用分数表示矩阵的方法实例
Jan 11 #Python
termux中matplotlib无法显示中文问题的解决方法
Jan 11 #Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 #Python
You might like
PHP性能优化 产生高度优化代码
2011/07/22 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
用RadioButten或CheckBox实现div的显示与隐藏
2013/09/21 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
Python的subprocess模块总结
2014/11/07 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
django静态文件加载的方法
2018/05/20 Python
python smtplib模块实现发送邮件带附件sendmail
2018/05/22 Python
python实现趣味图片字符化
2019/04/30 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
学习党章思想汇报
2014/01/07 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
超市开店计划书
2014/09/15 职场文书
拆迁委托协议书
2014/09/15 职场文书
武侯祠导游词
2015/02/04 职场文书
信仰观后感
2015/06/03 职场文书
九年级化学教学反思
2016/02/22 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python