python 逆向爬虫正确调用 JAR 加密逻辑
1.前言
在App端爬虫过程中,遇到未知的参数,往往需要我们去逆向破解App,针对参数的生成逻辑,使用Python去实现
部分App参数的生成逻辑可能已经写入到多个JAR文件中,这时候,我们只需要用Python执行JAR 即可
本篇文章将聊聊Python如何调用JAR中的方法
2.合并JAR
以AndroidApp为例,假设加密参数生成逻辑在多个JAR中,我们首先需要将所有的JAR文件合并为一个JAR文件
PS:对于AAR文件,可以先通过解压软件解压,然后再合并JAR
合并JAR分为2步:
- 解压JAR
- 合并所有源码
2-1 解压JAR
安装JDK之后,通过 jar-xvf 命令去解压单个JAR,这样会按包名在同级目录下生成JAVA编译后的class文件
#一个个地去解压JAR #在本地生成class文件 jar-xvfa.jar jar-xvfb.jar jar-xvfc.jar
2-2 合并所有源码
使用 jar-cvfM 命令,将本地所有的class文件生成一个新的JAR
#合并当前目录下所有源码为一个JAR #其中:output.jar代表新的JAR jar-cvfMoutput.jar.
3.Python调用JAR
首先,我们安装依赖包:jpype
# 安装依赖包 pip3 install JPype1
假设JAR中加密逻辑实现代码如下:
packagecom.xingag.common; publicclassEncryHelper{ publicStringencrypt(Stringcontent){ //加密逻辑 } }
使用Python调用JAR中的方法分为3步:
- 启动JVM
- 实例化JAVA对象,调用对应方法
- 关闭JVM
3-1 启动JVM
importjpype #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加密逻辑的资料请关注毛票票其它相关文章!