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 list转dict示例分享
Jan 28 Python
Python遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
Python脚本实现虾米网签到功能
Apr 12 Python
python3.x上post发送json数据
Mar 04 Python
PyQt5每天必学之布局管理
Apr 19 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
python requests更换代理适用于IP频率限制的方法
Aug 21 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Django+python服务器部署与环境部署教程详解
Mar 30 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 Python
python中os.remove()用法及注意事项
Jan 31 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
Zerg兵种介绍
2020/03/14 星际争霸
PHP print类函数使用总结
2010/06/25 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php实现对两个数组进行减法操作的方法
2015/04/17 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
js前台分页显示后端JAVA数据响应
2013/03/18 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
异步安全加载javascript文件的方法
2015/07/21 Javascript
jquery实现下拉框功能效果【实例代码】
2016/05/06 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
redux中间件之redux-thunk的具体使用
2018/04/17 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
python socket 超时设置 errno 10054
2014/07/01 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
python列表推导式操作解析
2019/11/26 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
python实现拼接图片
2020/03/23 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
教师档案管理制度
2014/01/23 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
检查接待方案
2014/02/27 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
小数乘法教学反思
2016/02/22 职场文书
如何在Python中创建二叉树
2021/03/30 Python