apk逆コンパイル上のピットの道

4777 ワード

360のプラグイン化を解決するため、第三者のaarファイルを使って、プラグインの独立版のapkのコンパイルは問題がなくて、インストールしてタイムズを開くだけで間違って、ここで360のプラグイン化の開発にツッコミを入れて、このように明らかな1
 java.lang.VerifyError: Verifier rejected class com.llvision.glass3.core.lcd.LCDService: void com.llvision.glass3.core.lcd.LCDService.onCreate() failed to verify: void com.llvision.glass3.core.lcd.LCDService.onCreate(): [0x66] register v1 has type Reference: java.lang.Object but expected Precise Reference: android.support.v4.content.LocalBroadcastManager (declaration of 'com.llvision.glass3.core.lcd.LCDService' appears in /data/app/com.example.llapplication-1/split_lib_dependencies_apk.apk)
11-11 20:30:10.693986  3761  3761 D AEE_AED : 	at java.lang.Class.newInstance(Native Method)
11-11 20:30:10.693986  3761  3761 D AEE_AED : 	at android.app.ActivityThread.handleCreateService(ActivityThread.java:3233)
11-11 20:30:10.693986  3761  3761 D AEE_AED : 	at android.app.ActivityThread.-wrap5(ActivityThread.java)
11-11 20:30:10.693986  3761  3761 D AEE_AED : 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1617)
11-11 20:30:10.693986  3761  3761 D AEE_AED : 	at android.os.Handler.dispatchMessage(Handle
11-11 20:30:10.694209  3761  3761 I AEE_AED : Process: com.example.llapplication:llvision

バグを解決しないのか?
360プラグインを使用してandroid.support.v 4.content.LocalBroadcastManagerというタイプのプロパティを取得するときに、Objタイプが返され、正しいタイプが返されないため、逆コンパイルして修正する必要があります.
修正啓発はもう一人のブロガーに啓発され、ここで感謝します:原文リンクhttps://juejin.im/post/5aa3571651882555635decdb
くだらないことは言わないでください.
逆コンパイル上のピットを記録します.
まずbaksmailやsmailなどの逆コンパイルjarをダウンロードし、アドレス:https://bitbucket.org/JesusFreke/smali/downloads/
通常の逆コンパイルツール:
Baksmali:https://github.com/JesusFreke/smali
Apktool:https://ibotpeaches.github.io/Apktool/
dex2jar:https://sourceforge.net/projects/dex2jar/
同時に:
コンパイルの手順は、ネット上のチュートリアルに従って一歩一歩進みます.
最後にずっと間違っていました.
Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
        at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
        at com.beust.jcommander.JCommander.parse(JCommander.java:304)
        at com.beust.jcommander.JCommander.parse(JCommander.java:287)
        at org.jf.baksmali.Main.main(Main.java:90)

最後の解決策は
 
1. classes.dex    .smali
# java -jar baksmali-2.2.7.jar -o test baksmali-2.2.7.jar classes.dex
  :
Exception in thread "main" com.beust.jcommander.MissingCommandException: Expected a command, got -o
	at com.beust.jcommander.JCommander.parseValues(JCommander.java:725)
	at com.beust.jcommander.JCommander.parse(JCommander.java:304)
	at com.beust.jcommander.JCommander.parse(JCommander.java:287)
	at org.jf.baksmali.Main.main(Main.java:90)
 
2.  
# java -jar baksmali-2.2.7.jar disassemble classes.dex

smailを使用して、生成されたsmailファイルをdexファイルに変換します.
d:\sdk\Sdk\Sdk\tools>java -jar smali-2.3.4.jar assemble  out/ -o classes.dex

次にclasses.dexファイルを解凍パッケージに入れ、apkに再パッケージします.
 
上記の生成apkは使えませんが、まだ解決していません.  後ろでなぜかもう一度見てみましょう.
 
 
また、逆コンパイラが見つかりました.
apktoolsこれはbaksmailとsmailの2つの仕事をすべてして、同時にパッケージ化に成功しました.
以下に整理します.
1.apktool.jarとapktool.datをダウンロードし、同じフォルダに配置します.たとえば、Apktools
ダウンロード後のapktool_XXX.jarは必ずapktool.jarに変更してから使用します.
 Apktool公式サイト:https://ibotpeaches.github.io/Apktool/
2.変数環境の構成:
 環境を配置するのはくだらないことではありません.次の最初のリンクを参照してください.
3.正式に開始:
   パッケージ化に成功したapkを、apktoolsフォルダの下に配置します.
逆コンパイルのコマンドを実行します.
      
F:\apktools\apktools>apktool d -r app-release.apk
I: Using Apktool 2.4.0 on app-release.apk
I: Copying raw resources...
I: Baksmaling classes.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

 必ず-rを加えてください.そうしないと、apktool.ymlが見つからないという問題が発生します.
コンパイルバック:
修正したプロジェクトをコンパイルし、次の名前を付けます.
F:\apktools\apktools>apktool b app-release -o newll.apk
I: Using Apktool 2.4.0
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Copying raw resources...
I: Copying libs... (/lib)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk...

コンパイルに成功した後もこのapkは使用できません.鍵を追加してからインストールに成功する必要があります.このとき、鍵をapktoolsフォルダの下に置く必要があります.
次のコマンドを実行します.
F:\apktools\apktools>jarsigner -verbose -keystore llkeystore.jks -signedjar newllq.apk newll.apk llkeystore

実行中に鍵のパスワードを入力し、車に戻るをクリックしてパッケージを開始する必要があります.
 
 
 
参考ブログ:https://blog.csdn.net/sonnyjack/article/details/79273023
                  https://blog.csdn.net/niuba123456/article/details/85868949
 
あとは記録がたくさんあるので、今日は先にここに着きます.