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 相关文章推荐
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
Python文件和目录操作详解
Feb 08 Python
简单学习Python time模块
Apr 29 Python
python中print的不换行即时输出的快速解决方法
Jul 20 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
python爬取酷狗音乐排行榜
Feb 20 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
pandas 对日期类型数据的处理方法详解
Aug 08 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
May 09 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
高考考python编程是真的吗
Jul 20 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
JavaScript创建命名空间的5种写法
2014/06/24 PHP
PHP7.0版本备注
2015/07/23 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
php生成HTML文件的类方法
2019/10/11 PHP
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
js 事件截取enter按键页面提交事件示例代码
2014/03/04 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
Vue之Watcher源码解析(2)
2017/07/19 Javascript
jQuery Layer弹出层传值到父页面的实现代码
2017/08/17 jQuery
js中的数组对象排序分析
2018/12/11 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
django foreignkey(外键)的实现
2019/07/29 Python
python中eval与int的区别浅析
2019/08/11 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Python 如何实现访问者模式
2020/07/28 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
校三好学生主要事迹
2014/01/11 职场文书
白酒营销策划方案
2014/08/17 职场文书
文明单位创建材料
2014/12/24 职场文书
给老师的一封感谢信
2015/01/20 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
唐山大地震观后感
2015/06/05 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
vue完美实现el-table列宽自适应
2021/05/08 Vue.js