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 21 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
分享Python文本生成二维码实例
Jan 06 Python
利用Python破解斗地主残局详解
Jun 30 Python
使用Python & Flask 实现RESTful Web API的实例
Sep 19 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
Apr 19 Python
Python3自定义json逐层解析器代码
May 11 Python
JAVA SWT事件四种写法实例解析
Jun 05 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 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将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
2015/12/09 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
Vue 应用中结合vux使用微信 jssdk的方法
2018/08/28 Javascript
angular inputNumber指令输入框只能输入数字的实现
2019/12/03 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
[41:08]2014 DOTA2国际邀请赛中国区预选赛 HGT VS NE
2014/05/22 DOTA
[03:02]安得倚天剑,跨海斩长鲸——中国军团出征DOTA2国际邀请赛
2018/08/14 DOTA
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
django模型层(model)进行建表、查询与删除的基础教程
2017/11/21 Python
python实现数据导出到excel的示例--普通格式
2018/05/03 Python
python 处理数字,把大于上限的数字置零实现方法
2019/01/28 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
如何在django中实现分页功能
2020/04/22 Python
python上selenium的弹框操作实现
2020/07/13 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
java关于string最常出现的面试题整理
2021/01/18 Python
英国日常交易网站:Wowcher
2018/09/04 全球购物
泰国网上购物:Shopee泰国
2018/09/14 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
编辑找工作求职信范文
2013/12/16 职场文书
团购业务员岗位职责
2014/03/15 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android