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使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
简单介绍Python中的round()方法
May 15 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
Python中super函数用法实例分析
Mar 18 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
Django 实现前端图片压缩功能的方法
Aug 07 Python
ubuntu上安装python的实例方法
Sep 30 Python
dpn网络的pytorch实现方式
Jan 14 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
用Python爬虫破解滑动验证码的案例解析
May 06 Python
Python函数中apply、map、applymap的区别
Nov 27 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 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 Session 变量的使用方法详解与实例代码
2013/09/11 PHP
PHP 验证登陆类分享
2015/03/13 PHP
php解析xml方法实例详解
2015/05/12 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
js实现文字跟随鼠标移动而移动的方法
2015/02/28 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
jQuery选择器实例应用
2017/01/05 Javascript
jQuery给表格添加分页效果
2017/03/02 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
浅谈vuex 闲置状态重置方案
2018/01/04 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
美国设计师精美珠宝购物网:Netaya
2016/08/28 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
商务日语毕业生自荐信范文
2013/11/14 职场文书
公安局负责人查摆问题及整改方案
2014/09/27 职场文书
个人整改措施落实情况汇报
2014/10/29 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python