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连接字符串的方法小结
Jul 13 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python中itertools模块zip_longest函数详解
Jun 12 Python
python实现雨滴下落到地面效果
Jun 21 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
python Kmeans算法原理深入解析
Aug 23 Python
python线程join方法原理解析
Feb 11 Python
Python实现链表反转的方法分析【迭代法与递归法】
Feb 22 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
python 装饰器的基本使用
Jan 13 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
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
2013/12/25 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
Javascript中的数学函数
2007/04/04 Javascript
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
js 动态加载事件的几种方法总结
2013/12/25 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
JS前向后瞻正则表达式定义与用法示例
2016/12/27 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
jquery平滑滚动到顶部插件使用详解
2017/05/08 jQuery
Node.js Buffer用法解读
2018/05/18 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
vue实现搜索功能
2019/05/28 Javascript
jQuery 动画与停止动画效果实例详解
2020/05/19 jQuery
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
Python制作爬虫抓取美女图
2016/01/20 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
html5如何在Canvas中实现自定义路径动画示例
2017/09/18 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
介绍一下RMI的基本概念
2016/12/17 面试题
服装设计专业求职信
2014/06/16 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
小学生毕业评语
2014/12/26 职场文书
MySQL学习之基础操作总结
2022/03/19 MySQL