如何反编译android应用并重新打包

\u5982\u4f55\u53cd\u7f16\u8bd1android\u5e94\u7528\u5e76\u91cd\u65b0\u6253\u5305

\u4e00.\u770bandroid\u7684\u6e90\u4ee3\u7801

\u3000\u30001)\u5c06Apkd.apk \u7528zip\u89e3\u538b\u540e\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2aclasses.dex\u6587\u4ef6
\u3000\u30002014/02/19 19:42
\u3000\u3000.
\u3000\u30002014/02/19 19:42
\u3000\u3000..
\u3000\u30002014/02/19 15:35 1,656 AndroidManifest.xml
\u3000\u30002014/02/19 15:35 687,024 classes.dex
\u3000\u30002014/02/19 15:49
\u3000\u3000META-INF
\u3000\u30002014/02/19 15:49
\u3000\u3000res
\u3000\u30002014/02/19 15:35 2,200 resources.arsc
\u3000\u30002)\u8fdb\u5165\u5230dex2jar\u76ee\u5f55\u4e2d\uff0c\u8fd0\u884c\u60c5\u51b5\u5982\u4e0b\uff1a
\u3000\u3000D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
\u3000\u3000ex"
\u3000\u3000this cmd is deprecated, use the d2j-dex2jar if possible
\u3000\u3000dex2jar version: translator-0.0.9.15
\u3000\u3000dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
\u3000\u3000Done.
\u3000\u3000\u5728apk\u6240\u5728\u7684\u76ee\u5f55\u4f1a\u51fa\u73b0 classes_dex2jar.jar \u6587\u4ef6\u3002
\u3000\u30003) \u7528JD-GUI\u5bf9jar\u5305\u8fdb\u884c\u67e5\u770b\uff0c\u53ef\u4ee5\u67e5\u770b\u6e90\u6587\u4ef6

\u3000\u3000\u4e8c.\u53cd\u7f16\u8bd1apk

\u3000\u30001.\u5728\u3000\u4e0b\u8f7d\u3000APKTOOL\u4e2d\u7684\u4e09\u4e2a\u6587\u4ef6\uff08aapt.exe\u3001apktool.bat\u3001apktool.jar\uff09\u89e3\u538b\u7f29\u5230\u4f60\u7684Windows\u5b89\u88c5\u76ee\u5f55\u4e0b\uff0c\u4ee5\u65b9\u4fbf\u4f7f\u7528Dos\u547d\u4ee4.
\u3000\u30002012/12/06 11:44 854,016 aapt.exe
\u3000\u30002014/02/19 17:15 277,372 Apkd.apk\u3000//\u793a\u4f8b\u7528\u3000apk\u6587\u4ef6
\u3000\u30002012/12/23 23:39 92 apktool.bat
\u3000\u30002013/02/03 02:37 2,655,843 apktool.jar
\u3000\u30002.\u8fdb\u5165\u5230apktool.bat\u6240\u5728\u7684\u76ee\u5f55\uff0c\u8fd0\u884c\uff1a
\u3000\u3000apktool d Apkd.apk decode_dir
\u3000\u3000\u53cd\u7f16\u8bd1\u540e,decode_dir\u76ee\u5f55\u4e0b\u7684\u5185\u5bb9\u5982\u4e0b\uff1a
\u3000\u30002014/02/19 17:16 716 AndroidManifest.xml
\u3000\u30002014/02/19 17:16 237 apktool.yml
\u3000\u30002014/02/19 17:18
\u3000\u3000build
\u3000\u30002014/02/19 17:16
\u3000\u3000res
\u3000\u30002014/02/19 17:16
\u3000\u3000smali
\u3000\u3000\u6b64\u65f6\u6211\u53ef\u4ee5\u67e5\u770b\u539f\u6587\u4ef6AndroidManifest.xml\u4e86\uff0c\u4e5f\u662f\u67e5\u770bsmali\u6e90\u6587\u4ef6\uff08\u662f\u7528smali\u8bed\u8a00\u5199\u7684\uff0c\u53ef\u4ee5\u5bf9\u7167java\u770b\uff09\u3002

\u3000\u3000\u4e09.APKTOOL\u7684\u4f7f\u7528

\u3000\u30001).decode
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u8fdb\u884c\u53cd\u7f16\u8bd1apk\u6587\u4ef6\uff0c\u4e00\u822c\u7528\u6cd5\u4e3a
\u3000\u3000apktool d

\u3000\u3000\u4ee3\u8868\u4e86\u8981\u53cd\u7f16\u8bd1\u7684apk\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u6700\u597d\u5199\u7edd\u5bf9\u8def\u5f84\uff0c\u6bd4\u5982C:\MusicPlayer.apk
\u3000\u3000\u4ee3\u8868\u4e86\u53cd\u7f16\u8bd1\u540e\u7684\u6587\u4ef6\u7684\u5b58\u50a8\u4f4d\u7f6e\uff0c\u6bd4\u5982C:\MusicPlayer
\u3000\u3000\u5982\u679c\u4f60\u7ed9\u5b9a\u7684\u5df2\u7ecf\u5b58\u5728\uff0c\u90a3\u4e48\u8f93\u5165\u5b8c\u8be5\u547d\u4ee4\u540e\u4f1a\u63d0\u793a\u4f60\uff0c\u5e76\u4e14\u65e0\u6cd5\u6267\u884c\uff0c\u9700\u8981\u4f60\u91cd\u65b0\u4fee\u6539\u547d\u4ee4\u52a0\u5165-f\u6307\u4ee4
\u3000\u3000apktool d \u2013f

\u3000\u3000\u8fd9\u6837\u5c31\u4f1a\u5f3a\u884c\u8986\u76d6\u5df2\u7ecf\u5b58\u5728\u7684\u6587\u4ef6
\u3000\u30002).build
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u7f16\u8bd1\u4fee\u6539\u597d\u7684\u6587\u4ef6\uff0c\u4e00\u822c\u7528\u6cd5\u4e3a
\u3000\u3000apktool b

\u3000\u3000\u8fd9\u91cc\u7684
\u3000\u3000\u5c31\u662f\u521a\u624d\u4f60\u53cd\u7f16\u8bd1\u65f6\u8f93\u5165\u7684
\u3000\u3000\uff08\u5982C:\MusicPlayer\uff09,\u8f93\u5165\u8fd9\u884c\u547d\u4ee4\u540e\uff0c\u5982\u679c\u4e00\u5207\u6b63\u5e38\uff0c\u4f60\u4f1a\u53d1\u73b0C:\MusicPlayer\u5185\u591a\u4e862\u4e2a\u6587\u4ef6\u5939build\u548cdist\uff0c\u5176\u4e2d\u5206\u522b\u5b58\u50a8\u7740\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u9010\u4e2a\u7f16\u8bd1\u7684\u6587\u4ef6\u4ee5\u53ca\u6700\u7ec8\u6253\u5305\u7684apk\u6587\u4ef6\u3002
\u3000\u30003).install-framework
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u4e3aAPKTool\u5b89\u88c5\u7279\u5b9a\u7684framework-res.apk\u6587\u4ef6\uff0c\u4ee5\u65b9\u4fbf\u8fdb\u884c\u53cd\u7f16\u8bd1\u4e00\u4e9b\u4e0eROM\u76f8\u4e92\u4f9d\u8d56\u7684APK\u6587\u4ef6\u3002\u5177\u4f53\u60c5\u51b5\u8bf7\u770b\u5e38\u89c1\u95ee\u9898

\u3000\u3000\u56db.smali\u4e0ejava\u6e90\u7801\u5bf9\u7167\uff0c\u5e76\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539

\u3000\u3000java\u6e90\u4ee3\u7801\uff1a

\u3000\u3000import android.os.Bundle;
\u3000\u3000import android.app.Activity;
\u3000\u3000import android.view.Menu;
\u3000\u3000import android.widget.*;

\u3000\u3000public class MainActivity extends Activity {

\u3000\u3000@Override
\u3000\u3000protected void onCreate(Bundle savedInstanceState) {
\u3000\u3000super.onCreate(savedInstanceState);
\u3000\u3000setContentView(R.layout.activity_main);
\u3000\u3000TextView a = (TextView)this.findViewById(R.id.test) ;
\u3000\u3000a.setText("raoliang");
\u3000\u3000}

\u3000\u3000@Override
\u3000\u3000public boolean onCreateOptionsMenu(Menu menu) {
\u3000\u3000// Inflate the menu; this adds items to the action bar if it is present.
\u3000\u3000getMenuInflater().inflate(R.menu.main, menu);
\u3000\u3000return true;
\u3000\u3000}

\u3000\u3000}

\u3000\u3000\u5bf9\u5e94\u7684smali\u6e90\u4ee3\u7801\uff1a
\u3000\u3000.class public Lali/text/apkd/MainActivity;
\u3000\u3000.super Landroid/app/Activity;
\u3000\u3000.source "MainActivity.java"

\u3000\u3000# direct methods
\u3000\u3000.method public constructor ()V
\u3000\u3000.locals 0

\u3000\u3000.prologue
\u3000\u3000.line 8
\u3000\u3000invoke-direct {p0}, Landroid/app/Activity;->()V

\u3000\u3000return-void
\u3000\u3000.end method

\u3000\u3000# virtual methods
\u3000\u3000.method protected onCreate(Landroid/os/Bundle;)V
\u3000\u3000.locals 2
\u3000\u3000.parameter "savedInstanceState"

\u3000\u3000.prologue
\u3000\u3000.line 12
\u3000\u3000invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

\u3000\u3000.line 13
\u3000\u3000const/high16 v1, 0x7f03

\u3000\u3000invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V

\u3000\u3000.line 14
\u3000\u3000const/high16 v1, 0x7f08

\u3000\u3000invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;

\u3000\u3000move-result-object v0

\u3000\u3000check-cast v0, Landroid/widget/TextView;

\u3000\u3000.line 15
\u3000\u3000.local v0, a:Landroid/widget/TextView;
\u3000\u3000const-string v1, "raoliang"

\u3000\u3000invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

\u3000\u3000.line 16
\u3000\u3000return-void
\u3000\u3000.end method

\u3000\u3000.method public onCreateOptionsMenu(Landroid/view/Menu;)Z
\u3000\u3000.locals 2
\u3000\u3000.parameter "menu"

\u3000\u3000.prologue
\u3000\u3000.line 21
\u3000\u3000invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;

\u3000\u3000move-result-object v0

\u3000\u3000const/high16 v1, 0x7f07

\u3000\u3000invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V

\u3000\u3000.line 22
\u3000\u3000const/4 v0, 0x1

\u3000\u3000return v0
\u3000\u3000.end method

\u3000\u3000\u901a\u8fc7\u5bf9\u6bd4\u53ef\u4ee5\u770b\u5230\uff0c\u5e38\u91cf\u662f\u6ca1\u6709\u5fc5\u53d8\u7684\uff0c\u53ef\u4ee5\u6839\u636e\u7684smali\u7684\u8bed\u6cd5\uff0c\u8fdb\u884c\u76f8\u5e94\u7684\u4fee\u6539

\u3000\u3000\u4e94.3\u3001\u6253\u5305\u3001\u7b7e\u540d\u548c\u5b89\u88c5\u4fee\u6539\u540e\u7684apk

\u3000\u3000\u4fee\u6539\u5b8c\u4e86\uff0c\u5c31\u53ef\u4ee5\u6253\u5305\u56deapk\u4e86\u3002\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a
\u3000\u3000apktool b decode_dir
\u3000\u3000\u5728mygame\u76ee\u5f55\u4e0b\u7684dist\u5728\u4f1a\u770b\u5230\u6253\u5305\u597d\u7684apk\u3002
\u3000\u3000\u5f53\u7136\uff0c\u73b0\u5728\u4e00\u822c\u662f\u65e0\u6cd5\u5b89\u88c5\u7684\uff0c\u56e0\u4e3aapk\u8fd8\u6ca1\u6709\u7b7e\u540d\u3002\u4e0b\u9762\u5c31\u6765\u7b7e\u540d\u3002\u7b7e\u540d\u9700\u8981keystore\u6587\u4ef6\uff0c\u6211\u5df2\u7ecf\u6709\u4e13\u7528\u7684keystore\u4e86\uff0c\u5982\u679c\u8fd8\u6ca1\u6709\uff0c\u8bf7\u53c2\u9605\u8fd9\u91cc\u8fdb\u884c\u751f\u6210\u3002
\u3000\u3000\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u4e3a\u91cd\u65b0\u7f16\u8bd1\u7684my_game.apk\u7b7e\u540d\uff1a
\u3000\u3000jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
\u3000\u3000\u6700\u540e\uff0c\u5728\u5b89\u88c5\u5230\u624b\u673a\u524d\uff0c\u9700\u8981\u628a\u624b\u673a\u4e2d\u7684\u5df2\u6709\u7248\u672c\u5148\u5378\u8f7d\uff0c\u56e0\u4e3a\u5982\u679c\u7b7e\u540d\u4e0d\u540c\uff0c\u662f\u4e0d\u80fd\u8986\u76d6\u5b89\u88c5\u7684\uff0c\u4f1a\u63d0\u793a\u201c\u5e94\u7528\u7a0b\u5e8f\u672a\u5b89\u88c5\u201d\u9519\u8bef\u3002
\u3000\u3000\u5b8c\u6574\u7684\u8fd0\u884c\u60c5\u51b5\u5982\u4e0b\uff1a

\u3000\u3000D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
\u3000\u3000\u8f93\u5165keystore\u5bc6\u7801\uff1a
\u3000\u3000\u518d\u6b21\u8f93\u5165\u65b0\u5bc6\u7801:
\u3000\u3000\u60a8\u7684\u540d\u5b57\u4e0e\u59d3\u6c0f\u662f\u4ec0\u4e48\uff1f
\u3000\u3000[Unknown]\uff1a rao
\u3000\u3000\u60a8\u7684\u7ec4\u7ec7\u5355\u4f4d\u540d\u79f0\u662f\u4ec0\u4e48\uff1f
\u3000\u3000[Unknown]\uff1a rao
\u3000\u3000\u60a8\u7684\u7ec4\u7ec7\u540d\u79f0\u662f\u4ec0\u4e48\uff1f
\u3000\u3000[Unknown]\uff1a
\u3000\u3000\u60a8\u6240\u5728\u7684\u57ce\u5e02\u6216\u533a\u57df\u540d\u79f0\u662f\u4ec0\u4e48\uff1f
\u3000\u3000[Unknown]\uff1a
\u3000\u3000\u60a8\u6240\u5728\u7684\u5dde\u6216\u7701\u4efd\u540d\u79f0\u662f\u4ec0\u4e48\uff1f
\u3000\u3000[Unknown]\uff1a
\u3000\u3000\u8be5\u5355\u4f4d\u7684\u4e24\u5b57\u6bcd\u56fd\u5bb6\u4ee3\u7801\u662f\u4ec0\u4e48
\u3000\u3000[Unknown]\uff1a
\u3000\u3000CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown \u6b63\u786e\u5417\uff1f
\u3000\u3000[\u5426]\uff1a y

\u3000\u3000\u8f93\u5165\u7684\u4e3b\u5bc6\u7801
\u3000\u3000\uff08\u5982\u679c\u548c keystore \u5bc6\u7801\u76f8\u540c\uff0c\u6309\u56de\u8f66\uff09\uff1a

\u3000\u3000D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
\u3000\u3000\u8f93\u5165\u5bc6\u94a5\u5e93\u7684\u53e3\u4ee4\u77ed\u8bed\uff1a
\u3000\u3000\u6b63\u5728\u6dfb\u52a0\uff1a META-INF/MANIFEST.MF
\u3000\u3000\u6b63\u5728\u6dfb\u52a0\uff1a META-INF/DEMO_KEY.SF
\u3000\u3000\u6b63\u5728\u6dfb\u52a0\uff1a META-INF/DEMO_KEY.RSA
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/drawable-hdpi/ic_launcher.png
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/drawable-mdpi/ic_launcher.png
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/drawable-xhdpi/ic_launcher.png
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/drawable-xxhdpi/ic_launcher.png
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/layout/activity_main.xml
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a res/menu/main.xml
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a AndroidManifest.xml
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a classes.dex
\u3000\u3000\u6b63\u5728\u7b7e\u540d\uff1a resources.arsc

\u3000\u3000D:\developer\tools\test_apk\new\decode\dist>
\u3000\u3000\u5230\u6b64\u4e3a\u6b62\uff0c\u4fee\u6539\u540e\u7684apk\u53ef\u4ee5\u6b63\u5e38\u7684\u5b89\u88c5\u4e86\uff0c\u4e0d\u8fc7\uff0c\u5728\u5b89\u88c5\u4e4b\u524d\uff0c\u5fc5\u987b\u8981\u5148\u5378\u8f7d\u4ee5\u524d\u7684apk\uff0c\u4e0d\u80fd\u76f4\u63a5\u66ff\u6362\uff08\u56e0\u4e3a\u7b7e\u540d\u4e0d\u4e00\u6837\uff09

\u4e00.\u770bandroid\u7684\u6e90\u4ee3\u7801

\u3000\u30001)\u5c06Apkd.apk \u7528zip\u89e3\u538b\u540e\uff0c\u51fa\u73b0\u4e86\u4e00\u4e2aclasses.dex\u6587\u4ef6
\u3000\u30002014/02/19 19:42
\u3000\u3000.
\u3000\u30002014/02/19 19:42
\u3000\u3000..
\u3000\u30002014/02/19 15:35 1,656 AndroidManifest.xml
\u3000\u30002014/02/19 15:35 687,024 classes.dex
\u3000\u30002014/02/19 15:49
\u3000\u3000META-INF
\u3000\u30002014/02/19 15:49
\u3000\u3000res
\u3000\u30002014/02/19 15:35 2,200 resources.arsc
\u3000\u30002)\u8fdb\u5165\u5230dex2jar\u76ee\u5f55\u4e2d\uff0c\u8fd0\u884c\u60c5\u51b5\u5982\u4e0b\uff1a
\u3000\u3000D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
\u3000\u3000ex"
\u3000\u3000this cmd is deprecated, use the d2j-dex2jar if possible
\u3000\u3000dex2jar version: translator-0.0.9.15
\u3000\u3000dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
\u3000\u3000Done.
\u3000\u3000\u5728apk\u6240\u5728\u7684\u76ee\u5f55\u4f1a\u51fa\u73b0 classes_dex2jar.jar \u6587\u4ef6\u3002
\u3000\u30003) \u7528JD-GUI\u5bf9jar\u5305\u8fdb\u884c\u67e5\u770b\uff0c\u53ef\u4ee5\u67e5\u770b\u6e90\u6587\u4ef6

\u3000\u3000\u4e8c.\u53cd\u7f16\u8bd1apk

\u3000\u30001.\u5728\u3000\u4e0b\u8f7d\u3000APKTOOL\u4e2d\u7684\u4e09\u4e2a\u6587\u4ef6\uff08aapt.exe\u3001apktool.bat\u3001apktool.jar\uff09\u89e3\u538b\u7f29\u5230\u4f60\u7684Windows\u5b89\u88c5\u76ee\u5f55\u4e0b\uff0c\u4ee5\u65b9\u4fbf\u4f7f\u7528Dos\u547d\u4ee4.
\u3000\u30002012/12/06 11:44 854,016 aapt.exe
\u3000\u30002014/02/19 17:15 277,372 Apkd.apk\u3000//\u793a\u4f8b\u7528\u3000apk\u6587\u4ef6
\u3000\u30002012/12/23 23:39 92 apktool.bat
\u3000\u30002013/02/03 02:37 2,655,843 apktool.jar
\u3000\u30002.\u8fdb\u5165\u5230apktool.bat\u6240\u5728\u7684\u76ee\u5f55\uff0c\u8fd0\u884c\uff1a
\u3000\u3000apktool d Apkd.apk decode_dir
\u3000\u3000\u53cd\u7f16\u8bd1\u540e,decode_dir\u76ee\u5f55\u4e0b\u7684\u5185\u5bb9\u5982\u4e0b\uff1a
\u3000\u30002014/02/19 17:16 716 AndroidManifest.xml
\u3000\u30002014/02/19 17:16 237 apktool.yml
\u3000\u30002014/02/19 17:18
\u3000\u3000build
\u3000\u30002014/02/19 17:16
\u3000\u3000res
\u3000\u30002014/02/19 17:16
\u3000\u3000smali
\u3000\u3000\u6b64\u65f6\u6211\u53ef\u4ee5\u67e5\u770b\u539f\u6587\u4ef6AndroidManifest.xml\u4e86\uff0c\u4e5f\u662f\u67e5\u770bsmali\u6e90\u6587\u4ef6\uff08\u662f\u7528smali\u8bed\u8a00\u5199\u7684\uff0c\u53ef\u4ee5\u5bf9\u7167java\u770b\uff09\u3002

\u3000\u3000\u4e09.APKTOOL\u7684\u4f7f\u7528

\u3000\u30001).decode
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u8fdb\u884c\u53cd\u7f16\u8bd1apk\u6587\u4ef6\uff0c\u4e00\u822c\u7528\u6cd5\u4e3a
\u3000\u3000apktool d

\u3000\u3000\u4ee3\u8868\u4e86\u8981\u53cd\u7f16\u8bd1\u7684apk\u6587\u4ef6\u7684\u8def\u5f84\uff0c\u6700\u597d\u5199\u7edd\u5bf9\u8def\u5f84\uff0c\u6bd4\u5982C:\MusicPlayer.apk
\u3000\u3000\u4ee3\u8868\u4e86\u53cd\u7f16\u8bd1\u540e\u7684\u6587\u4ef6\u7684\u5b58\u50a8\u4f4d\u7f6e\uff0c\u6bd4\u5982C:\MusicPlayer
\u3000\u3000\u5982\u679c\u4f60\u7ed9\u5b9a\u7684\u5df2\u7ecf\u5b58\u5728\uff0c\u90a3\u4e48\u8f93\u5165\u5b8c\u8be5\u547d\u4ee4\u540e\u4f1a\u63d0\u793a\u4f60\uff0c\u5e76\u4e14\u65e0\u6cd5\u6267\u884c\uff0c\u9700\u8981\u4f60\u91cd\u65b0\u4fee\u6539\u547d\u4ee4\u52a0\u5165-f\u6307\u4ee4
\u3000\u3000apktool d \u2013f

\u3000\u3000\u8fd9\u6837\u5c31\u4f1a\u5f3a\u884c\u8986\u76d6\u5df2\u7ecf\u5b58\u5728\u7684\u6587\u4ef6
\u3000\u30002).build
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u7f16\u8bd1\u4fee\u6539\u597d\u7684\u6587\u4ef6\uff0c\u4e00\u822c\u7528\u6cd5\u4e3a
\u3000\u3000apktool b

\u3000\u3000\u8fd9\u91cc\u7684
\u3000\u3000\u5c31\u662f\u521a\u624d\u4f60\u53cd\u7f16\u8bd1\u65f6\u8f93\u5165\u7684
\u3000\u3000\uff08\u5982C:\MusicPlayer\uff09,\u8f93\u5165\u8fd9\u884c\u547d\u4ee4\u540e\uff0c\u5982\u679c\u4e00\u5207\u6b63\u5e38\uff0c\u4f60\u4f1a\u53d1\u73b0C:\MusicPlayer\u5185\u591a\u4e862\u4e2a\u6587\u4ef6\u5939build\u548cdist\uff0c\u5176\u4e2d\u5206\u522b\u5b58\u50a8\u7740\u7f16\u8bd1\u8fc7\u7a0b\u4e2d\u9010\u4e2a\u7f16\u8bd1\u7684\u6587\u4ef6\u4ee5\u53ca\u6700\u7ec8\u6253\u5305\u7684apk\u6587\u4ef6\u3002
\u3000\u30003).install-framework
\u3000\u3000\u8be5\u547d\u4ee4\u7528\u4e8e\u4e3aAPKTool\u5b89\u88c5\u7279\u5b9a\u7684framework-res.apk\u6587\u4ef6\uff0c\u4ee5\u65b9\u4fbf\u8fdb\u884c\u53cd\u7f16\u8bd1\u4e00\u4e9b\u4e0eROM\u76f8\u4e92\u4f9d\u8d56\u7684APK\u6587\u4ef6\u3002\u5177\u4f53\u60c5\u51b5\u8bf7\u770b\u5e38\u89c1\u95ee\u9898

\u3000\u3000\u56db.smali\u4e0ejava\u6e90\u7801\u5bf9\u7167\uff0c\u5e76\u505a\u51fa\u76f8\u5e94\u7684\u4fee\u6539

\u3000\u3000java\u6e90\u4ee3\u7801\uff1a

\u3000\u3000import android.os.Bundle;
\u3000\u3000import android.app.Activity;
\u3000\u3000import android.view.Menu;
\u3000\u3000import android.widget.*;

\u3000\u3000public class MainActivity extends Activity {

\u3000\u3000@Override
\u3000\u3000protected void onCreate(Bundle savedInstanceState) {
\u3000\u3000super.onCreate(savedInstanceState);
\u3000\u3000setContentView(R.layout.activity_main);
\u3000\u3000TextView a = (TextView)this.findViewById(R.id.test) ;
\u3000\u3000a.setText("raoliang");
\u3000\u3000}

\u3000\u3000@Override
\u3000\u3000public boolean onCreateOptionsMenu(Menu menu) {
\u3000\u3000// Inflate the menu; this adds items to the action bar if it is present.
\u3000\u3000getMenuInflater().inflate(R.menu.main, menu);
\u3000\u3000return true;
\u3000\u3000}

一.看android的源代码

  1)将Apkd.apk 用zip解压后,出现了一个classes.dex文件
  2014/02/19 19:42
  .
  2014/02/19 19:42
  ..
  2014/02/19 15:35 1,656 AndroidManifest.xml
  2014/02/19 15:35 687,024 classes.dex
  2014/02/19 15:49
  META-INF
  2014/02/19 15:49
  res
  2014/02/19 15:35 2,200 resources.arsc
  2)进入到dex2jar目录中,运行情况如下:
  D:\developer\tools\test_apk\dex2jar-0.0.9.15>dex2jar.bat "..\Apkd(d2j)\classes.d
  ex"
  this cmd is deprecated, use the d2j-dex2jar if possible
  dex2jar version: translator-0.0.9.15
  dex2jar ..\Apkd(d2j)\classes.dex -> ..\Apkd(d2j)\classes_dex2jar.jar
  Done.
  在apk所在的目录会出现 classes_dex2jar.jar 文件。
  3) 用JD-GUI对jar包进行查看,可以查看源文件

  二.反编译apk

  1.在 下载 APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.
  2012/12/06 11:44 854,016 aapt.exe
  2014/02/19 17:15 277,372 Apkd.apk //示例用 apk文件
  2012/12/23 23:39 92 apktool.bat
  2013/02/03 02:37 2,655,843 apktool.jar
  2.进入到apktool.bat所在的目录,运行:
  apktool d Apkd.apk decode_dir
  反编译后,decode_dir目录下的内容如下:
  2014/02/19 17:16 716 AndroidManifest.xml
  2014/02/19 17:16 237 apktool.yml
  2014/02/19 17:18
  build
  2014/02/19 17:16
  res
  2014/02/19 17:16
  smali
  此时我可以查看原文件AndroidManifest.xml了,也是查看smali源文件(是用smali语言写的,可以对照java看)。

  三.APKTOOL的使用

  1).decode
  该命令用于进行反编译apk文件,一般用法为
  apktool d

  代表了要反编译的apk文件的路径,最好写绝对路径,比如C:\MusicPlayer.apk
  代表了反编译后的文件的存储位置,比如C:\MusicPlayer
  如果你给定的已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令
  apktool d –f

  这样就会强行覆盖已经存在的文件
  2).build
  该命令用于编译修改好的文件,一般用法为
  apktool b

  这里的
  就是刚才你反编译时输入的
  (如C:\MusicPlayer),输入这行命令后,如果一切正常,你会发现C:\MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。
  3).install-framework
  该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

  四.smali与java源码对照,并做出相应的修改

  java源代码:

  import android.os.Bundle;
  import android.app.Activity;
  import android.view.Menu;
  import android.widget.*;

  public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  TextView a = (TextView)this.findViewById(R.id.test) ;
  a.setText("raoliang");
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
  }

  }

  对应的smali源代码:
  .class public Lali/text/apkd/MainActivity;
  .super Landroid/app/Activity;
  .source "MainActivity.java"

  # direct methods
  .method public constructor ()V
  .locals 0

  .prologue
  .line 8
  invoke-direct {p0}, Landroid/app/Activity;->()V

  return-void
  .end method

  # virtual methods
  .method protected onCreate(Landroid/os/Bundle;)V
  .locals 2
  .parameter "savedInstanceState"

  .prologue
  .line 12
  invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

  .line 13
  const/high16 v1, 0x7f03

  invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->setContentView(I)V

  .line 14
  const/high16 v1, 0x7f08

  invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;

  move-result-object v0

  check-cast v0, Landroid/widget/TextView;

  .line 15
  .local v0, a:Landroid/widget/TextView;
  const-string v1, "raoliang"

  invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

  .line 16
  return-void
  .end method

  .method public onCreateOptionsMenu(Landroid/view/Menu;)Z
  .locals 2
  .parameter "menu"

  .prologue
  .line 21
  invoke-virtual {p0}, Lali/text/apkd/MainActivity;->getMenuInflater()Landroid/view/MenuInflater;

  move-result-object v0

  const/high16 v1, 0x7f07

  invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;->inflate(ILandroid/view/Menu;)V

  .line 22
  const/4 v0, 0x1

  return v0
  .end method

  通过对比可以看到,常量是没有必变的,可以根据的smali的语法,进行相应的修改

  五.3、打包、签名和安装修改后的apk

  修改完了,就可以打包回apk了。执行以下命令:
  apktool b decode_dir
  在mygame目录下的dist在会看到打包好的apk。
  当然,现在一般是无法安装的,因为apk还没有签名。下面就来签名。签名需要keystore文件,我已经有专用的keystore了,如果还没有,请参阅这里进行生成。
  执行以下命令为重新编译的my_game.apk签名:
  jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
  最后,在安装到手机前,需要把手机中的已有版本先卸载,因为如果签名不同,是不能覆盖安装的,会提示“应用程序未安装”错误。
  完整的运行情况如下:

  D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore
  输入keystore密码:
  再次输入新密码:
  您的名字与姓氏是什么?
  [Unknown]: rao
  您的组织单位名称是什么?
  [Unknown]: rao
  您的组织名称是什么?
  [Unknown]:
  您所在的城市或区域名称是什么?
  [Unknown]:
  您所在的州或省份名称是什么?
  [Unknown]:
  该单位的两字母国家代码是什么
  [Unknown]:
  CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正确吗?
  [否]: y

  输入的主密码
  (如果和 keystore 密码相同,按回车):

  D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
  输入密钥库的口令短语:
  正在添加: META-INF/MANIFEST.MF
  正在添加: META-INF/DEMO_KEY.SF
  正在添加: META-INF/DEMO_KEY.RSA
  正在签名: res/drawable-hdpi/ic_launcher.png
  正在签名: res/drawable-mdpi/ic_launcher.png
  正在签名: res/drawable-xhdpi/ic_launcher.png
  正在签名: res/drawable-xxhdpi/ic_launcher.png
  正在签名: res/layout/activity_main.xml
  正在签名: res/menu/main.xml
  正在签名: AndroidManifest.xml
  正在签名: classes.dex
  正在签名: resources.arsc

  D:\developer\tools\test_apk\new\decode\dist>
  到此为止,修改后的apk可以正常的安装了,不过,在安装之前,必须要先卸载以前的apk,不能直接替换(因为签名不一样)

  • 瀹夊崜4.0濡備綍鍙嶇紪璇resources.arsc
    绛旓細resources鏄疉PK涓殑璧勬簮鏂囦欢,渚嬪鍥剧墖甯冨眬绛夌瓑,android 鍙嶇紪璇鐨勬柟娉,闇瑕佺敤鍒板嚑涓伐鍏,鐧惧害涓涓嬮兘鑳芥壘鍒颁笅杞藉湴鍧 dex2jar JD-GUI apktool 鍙嶇紪璇戞楠:1.鍙嶇紪璇慉pk寰楀埌Java婧愪唬鐮 棣栧厛瑕佷笅杞戒袱涓伐鍏凤細dex2jar鍜孞D-GUI 鍓嶈呮槸灏哸pk涓殑classes.dex杞寲鎴怞ar鏂囦欢锛岃孞D-GUI鏄竴涓弽缂栬瘧宸ュ叿锛屽彲浠ョ洿鎺...
  • 瀹夊崜app360鍔犲浐鎬庝箞鍙嶇紪璇
    绛旓細1 瀵规瘮 涓婁紶demo杩涜鍔犲浐锛岃В鍖呭悗瀵规瘮涓嬪師鍖呭拰鍔犲浐鍖咃紝鍙戠幇鍔犲浐鍖呭湪assets鏂囦欢澶逛笅澶氫簡libjiagu.so锛宭ibjiagu_x86锛宭ib鏂囦欢澶逛笅澶氫簡libjiagu_art.so锛屽悓鏃朵慨鏀逛簡dex鏂囦欢鍜AndroidManifest鏂囦欢 鎵撳紑manifest鏂囦欢锛岀湅鍒皒xx鍔犲浐瀵笰pplication鏍囩鍋氫簡淇敼锛屾坊鍔犱簡澹冲叆鍙o紝涔熷氨鏄垜浠鍙嶇紪璇鍚庣湅鍒扮殑StubApplication....
  • Android绯荤粺涓殑鍙嶇紪璇鍜屽姞澹虫湁鍝簺鎶鏈
    绛旓細鐒惰岋紝鍦Android搴旂敤绋嬪簭鐨勫紑鍙戜腑锛屼竴浜涢噸瑕佺殑瀹夊叏闂涔熼愭笎娴幇銆傚叾涓紝鍙嶇紪璇鍜屽姞澹虫妧鏈槸鏈涓哄父瑙佺殑瀹夊叏闂涔嬩竴銆傚弽缂栬瘧鎶鏈槸鎸囧皢宸茬粡缂栬瘧鍜屾墦鍖呭ソ鐨凙ndroid搴旂敤绋嬪簭杩涜瑙f瀯鍜岄噸缁勶紝杩樺師鍑哄叾婧愪唬鐮佸拰璧勬簮鏂囦欢鐨勮繃绋嬨傞氳繃鍙嶇紪璇戯紝榛戝鍙互杞绘澗鍦拌幏鍙栧埌搴旂敤绋嬪簭鐨勬牳蹇冧唬鐮侊紝骞惰繘琛屼慨鏀广佸鍒躲佺牬瑙g瓑杩濇硶...
  • 濡備綍鍙嶇紪璇apk鏂囦欢寰楀埌婧愮爜鍜孹ML鏂囦欢
    绛旓細鐩镐俊寰堝寮鍙戣呴兘鐭ラ亾鍙嶇紪璇APK锛屾甯告儏鍐典笅锛屽鏋滄垜浠兂瑕佺湅鐪媥ml锛岀湅鐪媕ava婧愪唬鐮侊紝鏄湅涓嶄簡鐨勩傜敤鍘嬬缉宸ュ叿瑙e帇apk寰楀埌鐨勬枃浠朵篃閮芥槸浜岃繘鍒舵枃浠讹紝鎵撳紑鍚庡叏鏄贡鐮併傚紑鍙戣呰兘澶熺敤鐨勪篃浠呬粎鏄浘鐗囪祫婧愶紝杩欏線寰涔熸弧瓒充笉浜嗗紑鍙戣呯殑闇姹傘備笅闈㈡垜灏辩粰澶у璇︾粏璁茶В涓涓Android-apk鐨勫弽缂栬瘧姝ラ锛氭敞鎰忥細鍙嶇紪璇戠殑鍓嶆彁...
  • anzhuo搴旂敤绋嬪簭鎬庝箞鍙嶇紪璇
    绛旓細鑰屼笖瀹冨疄鐜颁簡.dex鏍煎紡鎵鏈夊姛鑳.浣犲彲浠ヤ娇鐢╠ex2jar, 涓嬭浇鍚庤В鍘, 鐩存帴鎶奱pk鏂囦欢鎷栧埌dex2jar.bat鏂囦欢涓,灏卞彲浠ョ敓鎴愬搴*.jar鏂囦欢,杩欐椂浣跨敤JD-GUI, 鎵撳紑jar鏂囦欢,灏卞彲浠ョ湅鍒癹ava婧愮爜,鍚屾椂鍙互瀵煎嚭.鐢辨鍙,Android搴旂敤绋嬪簭鍙嶇紪璇戝苟涓嶉毦, 鍔犲瘑涓庤В瀵嗙殑鏂椾簤涓鐩翠細鎸佺画.
  • 璺眰android apk鍙嶇紪璇璇︾粏鏁欑▼,鏈汉鐫瀹炴剼绗,鐪嬩笉鎳傜綉涓婃淮姝ラ_鐧惧害鐭 ...
    绛旓細涓夈佷粠瑙e帇缂╃殑鏂囦欢澶逛腑鍙栧嚭classes.dex鏂囦欢骞舵斁鍒癲ex2jar.bat鎵鍦ㄧ洰褰 鍥涖佽繍琛宑md鍛戒护锛岃繘鍏ex2jar.bat鎵鍦ㄧ殑鐩綍锛岃緭鍏ex2jar.bat classes.dex鍗冲彲鐢熸垚classes.dex.dex2jar.jar鏂囦欢 浜斻佺敤jd-gui宸ュ叿鎵撳紑classes.dex.dex2jar.jar鏂囦欢锛屽嵆鍙湅鍒版簮鐮 鍏佸皢AndroidManifest.xml鏂囦欢鏀惧埌AXMLPrinter2...
  • 濡備綍鍙嶇紪璇慉ndroid 鐨刟pk/dex/odex,鑾峰緱婧愮爜
    绛旓細鍙嶇紪璇ODEX鏂囦欢锛Android 5.0 Lollipop浠ュ悗锛孏oogle鐢ˋRT浠f浛浜嗕互鍓嶇殑Dalvik锛屽浜庢櫘閫氱殑app鏉ヨ鎴戜滑浠嶇劧鍙互鐢ㄤ笂闈㈢殑鏂规硶鏉ユ妸dex鏂囦欢鍙嶇紪璇戞垚Java婧愪唬鐮併備絾瀵逛簬绯荤粺棰勮鐨凙pp锛岀壒鍒槸绫讳技搴旂敤鍟嗗簵锛屾挱鏀惧櫒绛夛紝 浣犱細鍙戠幇杩欎簺搴旂敤鐨刟pk鏂囦欢涓壘涓嶅埌瀵瑰簲鐨刢lasses.dex鏂囦欢锛岃屾槸浼氬彂鐜板湪鍏跺瓙鐩綍涓嬫湁涓.odex...
  • 濡備綍鍒╃敤apktool鍙嶇紪璇apk
    绛旓細鍚姩鎺у埗鍙帮紝杈撳叆apktool锛屽洖杞﹀彲鏌ョ湅鍒癮pktool宸ュ叿甯哥敤鎸囦护锛屽鍥 鏂板缓涓涓枃浠跺す锛岀敤浜庡瓨鏀綼pk鍙婂緟瑙e帇鐨勬枃浠讹紝杩欓噷绗旇呭皢鏂囦欢澶瑰缓鍦―:\apk鐩綍锛屽悓鏃舵斁鍏ョ敤浜庢祴璇曠殑android app鍖咃紙test.apk锛夋帶鍒跺彴杈撳叆锛歛pktool d D:\apk\test.apk D:\apk\test 杩涜鍙嶇紪璇鎿嶄綔 涓彞璇濅腑鈥淒:\apk\test.apk鈥...
  • 濡備綍鍙嶇紪璇慳ndroid鐨刟pk鏂囦欢寰楀埌璧勬簮鏂囦欢
    绛旓細涓嬭浇瀹屾垚鍚庯紝瑙e帇apktool-install-windows鍒颁换鎰忔枃浠跺す锛屼緥濡傦紝瑙e帇鍒癋:\apktool鐩綍涓嬶細鐒跺悗瑙e帇apktool鍒颁换鎰忔枃浠跺す锛岃В鍘嬪畬鎴愬悗浼氬緱鍒颁竴涓猘pktool.jar鏂囦欢 鏈鍚庢妸apktool.jar鏂囦欢瑙e帇鍒癮pktool-install-windows鍚岀洰褰曚笅锛氳В鍘嬪畬鎴愬悗apktool.jar鏂囦欢涓嶈兘鍒犻櫎锛屼箣鍚庤繕浼氱敤鍒般傜劧鍚庢垜浠妸鎴戜滑瑕鍙嶇紪璇鐨刟pk...
  • 濡備綍鍦∕ac涓婇潰杩涜AndroidApk鍙嶇紪璇
    绛旓細浣嗘槸锛岄拡瀵归儴鍒嗙鍚嶇殑apk锛屾棤娉曞疄鐜板弽缂栬瘧锛屼絾鏈崥瀹㈡柟娉曞垯浠嶇劧鍙互鍙嶇紪璇戞垚鍔燂紒浠呬緵鍙傝冧娇鐢 鍙﹀锛屼綔涓哄簲鐢ㄥ紑鍙戣咃紝鑲畾涓嶅笇鏈涜嚜宸辩殑浠g爜琚弽缂栬瘧鐨勶紝涓嬩竴閬嶅崥瀹㈠皢璁茶堪濡備綍閫氳繃娣锋穯浠g爜闃叉琚埆浜鍙嶇紪璇 Android濡備綍闃叉apk绋嬪簭琚弽缂栬瘧 浣滀负Android搴旂敤寮鍙戣咃紝涓嶅緱涓嶉潰瀵逛竴涓按灏殑灞闈紝灏辨槸鑷繁杈涜緵鑻﹁嫤...
  • 扩展阅读:苹果android怎么设置 ... 苹果android在哪里找 ... android苹果版下载 ... 免费反编译软件 ... 反编译apk手机版 ... 安装包反编译软件 ... android在哪里打开 ... 反编译apk找到服务器 ... 反编译软件哪个最好用 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网