好用的apk反編譯
1. apk反編譯工具
apk反編譯工具:http://www.laixiaxia.com/tools/3273.html
apktool 使用說明:
普通APK:
1.將APK放置到APKTool目錄下,並改名為123.apk
2.打開APKTool,選擇1進行反編譯操作完成後會生成一個apk文件夾,大家可以進行改代碼、換圖標等操作!
3.修改完成後,選擇數字3,進行回編譯和簽名工作,此時生成的apk就可以直接安裝了!
當然你也可以選擇2,只進行回編譯操作(這時的APK沒有簽名不能安裝)
4.然後選擇4進行單獨的簽名工作!
系統APK:
需要將系統APK,framework-res.apk放置到APKTool目錄里,並將系統apk改名為123.apk
2. 怎麼反編譯APK文件
一、dexmp方法
dexmp是emulator自帶提供的查看dex文件的工具,可使用類似這樣的命令將dex文件mp到txt文件中:
D:\Program Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>dexmp.exe -d classes.dex > spk.mp.txt
得到的文件內容,描述了類的信息,但實在是不好讀啊~~~~
二、dex2jar + XJad 方法
該方法是使用dex2jar.jar包,將classes.dex文件解包成jar,在通過XJad(或者其他class反編譯工具)進行java反編譯。如:
1、dex2jar.bat d:\play\classes.dex
默認的輸出路徑同classes.dex,生成的文件名為classes.dex.dex2jar.jar
2、使用XJad反編譯該jar包
之後的使用方法,大家都懂的:)
該方法的好處在於,通過XJad反編譯後,大家可直接開到java源文件,缺點在於只能反編譯出開發時的java文件,而開發時使用的lib包不能反編譯出來。
三、AXMLPrinter2.jar + baksmali.jar + smali.jar 方法
這個方法就強大了,AXMLPrinter2是還原AndroidManifest.xml和main.xml的工具,直接打開這兩個xml文件是亂碼,而通過還原之後,可以很明白的看到裡面的內容(我猜測還是使用了位元組異或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar則是再還原成dex的工具
操作方式如下:
1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml > AndroidManifest.txt
2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt
3、java -jar baksmali-1.2.5.jar -o classout/ d:\play\classes.dex
baksmali可解析(注意,是解析,不是反編譯)原java包以及引用的lib包,解析出的文件認真看還是能看懂,比如以下片段:
view plain to clipboardprint?
.class Lcom/paul/test/a;
.super Landroid/view/View;
# static fields
.field private static final a:Landroid/graphics/Typeface;
# instance fields
.field private b:I
.field private c:I
.field private d:Z
.field private e:J
.field private f:I
.field private l:[Ljava/lang/String;
# direct methods
.method static constructor ()V
.registers 2
sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;
const/4 v1, 0x0
invoke-static {v0, v1}, Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
move-result-object v0
sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;
return-void
.end method
#
# other methods ..........
#
# virtual methods
.method public onKeyUp(ILandroid/view/KeyEvent;)Z
.registers 4
const/16 v0, 0x42
if-eq p1, v0, :cond_8
const/16 v0, 0x17
if-ne p1, v0, :cond_b
:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V
:cond_b
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
move-result v0
return v0
.end method
.class Lcom/paul/test/a;
.super Landroid/view/View;
# static fields
.field private static final a:Landroid/graphics/Typeface;
# instance fields
.field private b:I
.field private c:I
.field private d:Z
.field private e:J
.field private f:I
.field private l:[Ljava/lang/String;
# direct methods
.method static constructor ()V
.registers 2
sget-object v0, Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;
const/4 v1, 0x0
invoke-static {v0, v1}, Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)Landroid/graphics/Typeface;
move-result-object v0
sput-object v0, Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;
return-void
.end method
#
# other methods ..........
#
# virtual methods
.method public onKeyUp(ILandroid/view/KeyEvent;)Z
.registers 4
const/16 v0, 0x42
if-eq p1, v0, :cond_8
const/16 v0, 0x17
if-ne p1, v0, :cond_b
:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V
:cond_b
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
move-result v0
return v0
.end method
認真一看,就知道:
# static fields 定義靜態變數的標記
# instance fields 定義實例變數的標記
# direct methods 定義靜態方法的標記
# virtual methods 定義非靜態方法的標記
以onKeyUp方法為例,其中定義了處理邏輯,if-eq p1, v0, :cond_8 表示如果p1和v0相等,則執行cond_8的流程:
:cond_8
invoke-direct {p0}, Lcom/paul/test/a;->d()V
調用com.paul.test.a的d()方法
不相等: if-ne p1, v0, :cond_b 則執行cond_b的流程:
:cond_b
const/4 v0, 0x0
invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
move-result v0
大概意思就是調用com.paul.test.a的setPressed方法,然後再調用父類View的onKeyUp方法
最後 return v0
該方法,能把外部引用的lib包類也解析出來,能開到包的全貌。缺點在於,解析出的smali文件並不是反編譯出的java文件,可讀性降低了,但仔細研究也能看出大概。
3. 怎樣反編譯一個apk,利用哪些工具
工具:
apktool:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看
dex2jar:將apk反編譯成Java源碼(classes.dex轉化成jar文件)
jd-gui:查看APK中classes.dex轉化成出的jar文件,即源碼文件
反編譯流程:
一、apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件
下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下,
打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入命令:apktool.bat d -f test.apk test
(命令中test.apk指的是要反編譯的APK文件全名,test為反編譯後資源文件存放的目錄名稱,即為:apktool.bat d -f [apk文件 ] [輸出文件夾])
說明獲取成功,之後發現在文件夾下多了個test文件,點擊便可以查看該應用的所有資源文件了。
如果想將反編譯完的文件重新打包成apk,可以:輸入apktool.bat b test(你編譯出來文件夾)便可,之後在之前的test文件下便可以發現多了2個文件夾:
builddist(裡面存放著打包出來的APK文件)
4. 安卓apk文件如何反編譯
安卓apk文件反編譯:
一、反編譯xml文件
1>
首先下載我給你們提供的文件夾apk_fanbianyi,把它放到某個盤的根目錄下(為了方便輸入dos命令),然後打開apktool文件夾,安裝win+r鍵,然後輸入cmd,進入dos命令行,大家別怕,不用暈,很簡單的。
2>
然後在dos命令中首先輸入文件夾所在盤符+「:」回車,接著再輸入cd+apktool所在目錄,切換dos工作空間到apktool文件夾下。
3>
接著輸入
apktool.bat
d
【需反編譯apk文件路徑】
{【反編譯文件反編譯後的路徑】},其中最後一部分可以省去,系統會默認把apk文件反編譯到apktool目錄下,例如輸入
apktool.bat
d
d:/apk_fanbianyi/ttkp.apk,在apktool文件夾下就會生成一個ttpk的文件夾,所有的xml文件全部反編譯成功。
二、反編譯java文件
1>
首先解壓需要反編譯的apk文件,拷貝出裡面的classes.dex文件到dex2jar文件夾(為了方便操作,省去dos命令輸入路徑的麻煩)
2>
把工作空間切換到dex2jar文件夾下,輸入命令cd
d:/apk_fanbianyi/dex2jar回車
3>
輸入命令dex2jar.bat
classes.dex回車,發現dex2jar文件夾下多了一個classes_dex2jar.jar文件,這是反編譯成功的java文件
三、xml文件的打開
1>
打開apktool文件夾下的ttkp文件夾,任意找到一個xml文件,選中單擊右鍵,選擇notepad++打開(需下載),如果沒有此軟體,可以選擇打開方式,選擇記事本打開
四、java文件的打開
1>
dex2jar文件夾下的classes_dex2jar.jar拷貝到apktool文件夾的ttkp文件夾中,不能用notepad++打開,不然會亂碼的
2>
啟動apk_fanbianyi文件夾下的jd-gui.exe,然後點左上角file,選擇open
file,找到classes_dex2jar.jar文件,可以發現有很多包,選擇包下的任意一個java文件,打開不亂碼了,是不是很神奇,哈哈,你學會了安卓apk文件反編譯
5. apk反編譯工具怎麼使用
反編譯apk工具使用最廣泛的就是apktool,這里先說一下整個流程用到的工具有:
1.apktool,下載後拿到apktool.bat和apktool.jar,然後把這兩個工具放到C:Windows底下。這個工具的作用主要是得到apk的資源文件和配置文件
2.dex2jar 下載這個工具解壓後放到任意盤都可以,後面主要用這個根據apk的classes.dev文件生成供jd-gui工具解析的jar。
3.jd-gui上一步提到其作用,和2一樣,也是下載後放到任意盤即可,到時候只要運行jd-gui.exe打開上一步生成的jar即可查看源碼,下面對這個工具不再贅述
下面詳細說一下前面兩個工具類的詳細用法:
先說apktool的用法:
1.下載後拿到apktool.bat和apktool.jar,然後把這兩個工具放到C:Windows底下
2.cmd打開後默認是你的計算機,默認的不用改,直接輸入apktool,如果出現如下圖的效果,即表示准備已就緒
6. Android 將 apk 反編譯為源碼
將 apk 解壓,在解壓後的文件夾中可以找到 classes.dex 文件。(除了 classes.dex 文件,可能還會有 classes2.dex , classes3.dex 等等,本文以 classes.dex 為例,對其他幾個 dex 文件的操作是類似的)
使用 dex2jar 工具,將 dex 文件轉換為 jar 文件
使用方式:
執行命令後,生成的 classes-dex2jar.jar 就是我們需要的 jar 文件。
使用 Luyten 工具查看 jar 文件,就能看到反編譯後的源碼了。
本例中, classes.dex 文件中存儲的是 android 的一些基礎庫,實際編寫的源碼在 classes3.dex 中,對 classes3.dex 執行第二步,查看生成的 classes3-dex2jar.jar 文件,可以看到如下內容:
這就是反編譯 apk 的基本操作了。
Cmder 是一個非常好用的命令行工具。
效果如下:
只需要執行 apk2jar 命令,就可以實現把 apk 解壓到 apk_ 文件夾中,並將 apk_ 文件夾中的 classes.dex 文件轉換為 jar 。原理就是通過 Cmder 添加別名,把上述的第一步和第二步中執行的命令行組合起來了。
為 Cmder 添加別名很簡單,編輯 Cmder安裝目錄\config\user_aliases.cmd 文件,將別名添加到裡面即可。本例添加的別名如下:
其中:
7. 如何利用apktool反編譯apk
工具/原料
電腦必須裝JAVA
JAVA電腦環境教程
apktool
方法/步驟
1. 配置好JAVA環境變數,下載:apktool 解壓的文件放在C盤根目錄的apktool文件夾里(apktool文件夾自己創立)
打開命令提示符,(開始-運行-輸入cmd)
2. 輸入:cd \apktool 系統指令到了apktool文件夾(這里就是為什麼要把解壓的apktool解壓的文件放到apktool文件夾的原因,當然你也可以自命名文件夾的名稱,那麼比如arc,那麼指令就變成了:cd \arc 前提是你必須把apktool解壓的文件放到這個文件夾裡面)
3. 使用RE管理器把系統裡面的framework-res.apk 與 SystemUI.apk 提取出來放在apktool文件夾裡面
4. 如果只是想反編譯framework-res.apk
輸入apktool if framework-res.apk(框架的建立)
5. 開始最重要的反編譯,輸入指令,apktool d framework-res.apk
(反編輯的APK一定要用沒換過圖片的,否則回編輯失敗)
6. 最後反編譯完成
7. 修改代碼完成後,輸入代碼:apktool d framework-res 即可完成回編譯
8. 如果反編譯的是系統文件,比如,SystemUI.apk 那麼必須進行掛載框架,反編譯時,必須敲入一下命令:(然後再重復4-7步驟)
apktool if framework-res.apk
apktool if SystemUI.apk
9. 對於三星手機(比如9100、9108/9100G),如果反編譯SystemUI.apk要敲入一下命令進行框架掛載apktool if framework-res.apk
apktool if twframework-res.apk
apktool if SystemUI.apk
10. 回編譯的命令是 apktool b XXX (沒有後面的apk後綴)反編譯的命令是 apktool d xxx (有後面的apk)
8. 有什麼軟體可以反編譯安卓apk游戲安裝包
一、Apk反編譯得到Java源代碼 下載上述反編譯工具包,打開apk2java目錄下的dex2jar-0.0.9.9文件夾,內含apk反編譯成java源碼工具,以及源碼查看工具。 apk反編譯工具dex2jar,是將apk中的classes.dex轉化成jar文件 源碼查看工具jdgui,是一個反。
9. Android 如何對apk文件進行反編譯以及重新
第一:使用apktool直接反編譯apk
第六:把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
10. 推薦幾款在手機使用的apk反編譯軟體
dede 反編譯delphi
depb,pbkill 反編譯pb
vb rezq 反編譯vb
Reflector 反編譯.net
foxtoolsd 反編譯 vf
等等
不要對反編譯期望太大,幾乎沒什麼用,Reflector反編譯不錯,因為是偽代碼,只要沒用混淆器混淆的,代碼幾乎能拿過來使用,
其它的效果不是很理想
在使用過程中,沒遇到什麼需要注意的問題,軟體使用很簡單,就是用了沒多大用,望採納!謝謝!