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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
20个常用Python运维库和模块
Feb 12 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
详解程序意外中断自动重启shell脚本(以Python为例)
Jul 26 Python
python sorted函数原理解析及练习
Feb 10 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
Python如何将函数值赋给变量
Apr 28 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JS控制表格隔行变色
2006/06/26 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
Bootstrap自动适应PC、平板、手机的Bootstrap栅格系统
2016/05/27 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
laydate 显示结束时间不小于开始时间的实例
2017/08/11 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
python刷投票的脚本实现代码
2014/11/08 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
python绘制圆柱体的方法
2018/07/02 Python
配置 Pycharm 默认 Test runner 的图文教程
2018/11/30 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
Pycharm调试程序技巧小结
2020/08/08 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
华为慧通面试题
2012/09/11 面试题
财经学院自荐信范文
2014/02/02 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
催款律师函范文
2015/05/27 职场文书
公司开业主持词
2015/07/02 职场文书
方法汇总:Python 安装第三方库常用
2022/04/26 Python