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之编写类之三子类
Oct 11 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
Python中文件I/O高效操作处理的技巧分享
Feb 04 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
微信跳一跳python代码实现
Jan 05 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
pytorch 状态字典:state_dict使用详解
Jan 17 Python
python安装后的目录在哪里
Jun 21 Python
python中requests库+xpath+lxml简单使用
Apr 29 Python
python开发制作好看的时钟效果
May 02 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 excel类 phpExcel使用方法介绍
2010/08/21 PHP
php生成静态文件的多种方法分享
2012/07/17 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
2019/11/13 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
jQuery点缩略图弹出层显示大图片
2015/02/13 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
[08:29]DOTA2每周TOP10 精彩击杀集锦vol.7
2014/06/25 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
python实现excel读写数据
2021/03/02 Python
python实现三维拟合的方法
2018/12/29 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
2019/06/17 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
用友笔试题目
2016/10/25 面试题
vue+django实现下载文件的示例
2021/03/24 Vue.js
党校培训自我鉴定
2014/02/01 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
2014年化工厂工作总结
2014/11/25 职场文书
升职感谢信
2015/01/22 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
党校培训学习心得体会
2016/01/06 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis
React 高阶组件HOC用法归纳
2021/06/13 Javascript