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实现的一个找零钱的小程序代码分享
Aug 25 Python
由Python运算π的值深入Python中科学计算的实现
Apr 17 Python
在Python的web框架中编写创建日志的程序的教程
Apr 30 Python
django中send_mail功能实现详解
Feb 06 Python
Python BS4库的安装与使用详解
Aug 08 Python
深入了解Django View(视图系统)
Jul 23 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
你可能不知道的Python 技巧小结
Jan 29 Python
Python 自由定制表格的实现示例
Mar 20 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
Python的三个重要函数详解
Jan 18 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判断上传文件类型的解决办法
2015/10/20 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
PHP 文件上传限制问题
2019/09/01 PHP
javascript 时间比较实现代码
2009/10/28 Javascript
js数组的操作详解
2013/03/27 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
自制的文件上传JS控件可支持IE、chrome、firefox etc
2014/04/18 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
Javascript实现基本运算器
2017/07/15 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
JS运动特效之同时运动实现方法分析
2018/01/24 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
python 根据pid杀死相应进程的方法
2017/01/16 Python
python根据url地址下载小文件的实例
2018/12/18 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
UNIX命令速查表
2012/03/10 面试题
大专应届生个人简历的自我评价
2013/10/15 职场文书
酒店总经理助理职责
2014/02/12 职场文书
医院院务公开实施方案
2014/05/03 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
幼儿园秋季开学寄语
2014/08/02 职场文书
JVM钩子函数的使用场景详解
2021/08/23 Java/Android
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript