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 base64 decode incorrect padding错误解决方法
Jan 08 Python
python 打印对象的所有属性值的方法
Sep 11 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
解决PyCharm同目录下导入模块会报错的问题
Oct 13 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
深入理解Python异常处理的哲学
Feb 01 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Django结合ajax进行页面实时更新的例子
Aug 12 Python
Python socket模块方法实现详解
Nov 05 Python
Python语法垃圾回收机制原理解析
Mar 25 Python
Python自带的IDE在哪里
Jul 01 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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 生成WML页面方法详解
2009/08/09 PHP
php float不四舍五入截取浮点型字符串方法总结
2013/10/28 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
Vuex简单入门
2017/04/19 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
python的re模块应用实例
2014/09/26 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
运用Python的webbrowser实现定时打开特定网页
2019/02/21 Python
如何通过python的fabric包完成代码上传部署
2019/07/29 Python
python中的RSA加密与解密实例解析
2019/11/18 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
小学运动会宣传稿
2015/07/23 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
六一儿童节园长致辞
2015/07/31 职场文书
学习雷锋主题班会
2015/08/14 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
python字符串的一些常见实用操作
2022/04/06 Python