1はじめに
アプリのクロールの過程で、不明なパラメーターが発生した場合、アプリを逆クラックし、Pythonを使用してパラメーター生成ロジックを実装する必要があります。
一部のアプリパラメータの生成ロジックは、複数のJARファイルに書き込まれている可能性があります。現時点では、PythonでJARを実行するだけで済みます。
この記事では、PythonがJARのメソッドを呼び出す方法について説明します
2.JARをマージします
Androidアプリを例にとると、暗号化パラメーター生成ロジックが複数のJARにあると仮定すると、最初にすべてのJARファイルを1つのJARファイルにマージする必要があります。
PS:AARファイルの場合、最初に解凍ソフトウェアを使用して解凍してから、JARをマージできます。
JARのマージは2つのステップに分かれています。
JARを解凍します
すべてのソースコードをマージする
2-1JARを解凍します
JDKをインストールした後、jar -xvfコマンドを使用して単一のJARを解凍します。これにより、パッケージ名に従って同じディレクトリにJAVAコンパイル済みクラスファイルが生成されます。
#JARを1つずつ解凍します
#クラスファイルをローカルで生成する
jar -xvf a.jar
jar -xvf b.jar
jar -xvf c.jar
2-2すべてのソースコードをマージする
jar -cvfMコマンドを使用して、すべてのローカルクラスファイルから新しいJARを生成します。
#現在のディレクトリ内のすべてのソースコードを1つのJARに結合します
#その中で:output.jarは新しいJARを表します
jar -cvfMoutput.jar。
3.PythonがJARを呼び出す
まず、依存関係パッケージjpypeをインストールします。
#依存関係をインストールする
pip3インストールJPype1
JARの暗号化ロジック実装コードは次のとおりであると想定します。
パッケージcom.xingag.common;
パブリッククラスEncryHelper {
public String crypto(String content){
//暗号化ロジック
}
}
Pythonを使用してJARのメソッドを呼び出すには、次の3つのステップがあります。
JVMを起動します
JAVAオブジェクトをインスタンス化し、対応するメソッドを呼び出します
JVMをシャットダウンします
3-1JVMを起動します
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-2JAVAオブジェクトをインスタンス化してメソッドを呼び出す
呼び出されたメソッドのパッケージ名に従って、jpyteのJClass()メソッドを使用してクラスJAVAオブジェクトをインスタンス化し、最後にJAVAオブジェクトのメソッドを呼び出します。
Javaはインスタンスメソッドであるため、最初にオブジェクトをインスタンス化してからメソッドを呼び出す必要があることに注意してください。静的メソッドの場合は、メソッドを直接呼び出すことができます。
#パッケージ名を使用して、JAVAオブジェクトをインスタンス化します
EncryClass = jpype.JClass( "com.xingag.common.EncryHelper")
encryClass = EncryClass()
#JAVAで暗号化メソッドを呼び出す
content_encry = encryClass.encrypt( "xag")
print(content_encry)
3-3JVMをシャットダウンします
JVMをアクティブにシャットダウンするか、Pythonプログラムの実行後に自動的にシャットダウンしてリソースを解放するかを選択できます
jpypeをインポートする
#jvmを閉じる
jpype.shutdownJVM()
4.最後に
PythonはJARのメソッドを直接呼び出すため、ホイールを再利用してクローラーの作業負荷を軽減できます。