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分割和拼接字符串
Nov 01 Python
Python使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python字符串逐字符或逐词反转方法
May 21 Python
在Python程序中操作MySQL的基本方法
Jul 29 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
Python字典中的键映射多个值的方法(列表或者集合)
Oct 17 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
python输入中文的实例方法
Sep 14 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 curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
2016/07/01 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
2016/05/09 Javascript
深入理解JavaScript中的call、apply、bind方法的区别
2016/05/30 Javascript
通过BootStrap-select插件 js jQuery控制select属性变化
2017/01/03 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Vue v2.5 调整和更新不完全问题
2017/10/24 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
针对Vue路由history模式下Nginx后台配置操作
2020/10/22 Javascript
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
2019/01/17 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
python numpy数组复制使用实例解析
2020/01/10 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
英国最大的电子产品和家电零售企业:Currys PC World
2016/09/24 全球购物
护理学专业推荐信
2013/12/03 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
大学毕业生求职自荐信
2014/02/20 职场文书
公司晚会主持词
2014/03/22 职场文书
合作意向书模板
2014/03/31 职场文书
介绍信格式样本
2015/05/05 职场文书
活动新闻稿范文
2015/07/17 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python