1.下載反編譯工具
需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:將apk中的classes.dex轉化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
2.解壓縮APK包
apk文件也是一種常見的zip,常用的壓縮軟體就可輕松地解壓apk文件。用壓縮軟體將apk文件中的文件解壓到一個文件夾中,得到APK中的資源包括XML文件和classes.dex文件,classes.dex就是java文件編譯再通過dx工具打包而成的。
解壓截圖:
3.反編譯dex文件
解壓apk文件後,你會發現res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex文件,無法用普通的反編譯class文件的方法來處理,dex2jar可以將dex文件轉換成普通的jar包。
解壓下載的dex2jar,把解壓後的文件夾放到系統盤跟目錄中並把這個目錄加到系統path變數中,就可以直接用:dex2jar.bat或dex2jar.sh轉換dex文件了。
DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路徑)。
將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
編譯截圖:
生成jar文件的截圖如下:
4.反編譯jar包
得到jar包後,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形界面,可以反編譯單個class文件,也可以反編譯jar包,比較方便。
打開壓縮文件JD-GUI,運行jd-gui.exe,打開上面生成的jar包,即可看到源代碼了。
截圖如下:
5.反編譯xml文件
打開解壓的res\layout目錄,有很多xml文件,如果你想看下作者是如何設計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。
具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。把這個文件夾也放到系統盤的根目錄中並把這個目錄加到path變數中。以HelloWord.apk為例:
在DOS命令行中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。
截圖如下:
生成的文件:
這樣就得到了可以得到編譯的源碼和XML資源。
注意:文件的路徑中最好不要出現中文!
2. 加固的apk,如何反編譯AndroidManifest.xml
工具:
鏈接: http://pan..com/s/1i4QpEAh 密碼:l6oq
首先配置好Java的環境,在將apk重命名為*.zip,然後解壓zip文件,就可獲得AndroidManifest.xml文件,此時該文件無法打開,接下來就要用上面的AXMLPrinter2.jar工具。
命令為:java -jar AXMLPrinter2.jar AndroidManifest.xml > a.xml
3. 如何使用安卓反編譯破解游戲
一、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
4. 如何反編譯xml文件
網上很多發編譯apk的例子,方法也很多,我只取最簡單的用。
首先說一下這個xml文件,就是.apk文件改成.zip文件後用解壓縮工具解壓出來的。比如
反編譯這個xml用到的軟甲是A2. AXMLPrinter2
第一步:把上面提到過的需要發編譯的.xml文件和下載下載的AXMLPrinter2.jar這兩個文件都拷貝到android-sdk-windows/tools文件夾中。
第二步:運行cmd,進入tools目錄,鍵入
java -jar AXMLPrinter2.jar AndroidManifest.xml > main.txt
用java -jar 命令配合AXMLPrinter2.jar這文件把AndroidManifest.xml編譯寫入到main.txt文件中
(說明一下,我的xml是AndroidManifest.xml,如果你拷進去的不是這個,請自己改文件名)
回車後沒有報錯的話,就成功了
打開../android-sdk-windows/tools/目錄,找到main.txt,打開看一下
5. 如何反編譯apk文件得到源碼和XML文件
相信很多開發者都知道反編譯APK,正常情況下,如果我們想要看看xml,看看java源代碼,是看不了的。用壓縮工具解壓apk得到的文件也都是二進制文件,打開後全是亂碼。
開發者能夠用的也僅僅是圖片資源,這往往也滿足不了開發者的需求。
下面我就給大家詳細講解一下Android-apk的反編譯步驟:
注意:反編譯的前提是:開發者沒有使用proguard(java代碼混淆的工具)。
1.下載反編譯工具
需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:將apk中的classes.dex轉化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
6. Android APK+Dex文件反編譯及回編譯工具的工具說明
1. APK文件反編譯工具 ApkTool v2.0.0用於直接反編譯APK文件,同時也會反編譯dex文件。
2. DEX文件反編譯工具 Baksmali/Smali v2.0.2專門用來反編譯Dex文件,可以跟ApkTool兼容使用。
3. DEX文件反編譯資源查看工具Dex2jar v0.0.9.15和JD-GUI v0.3.5用來查看反編譯Dex後源碼的工具,據說能完整的反編譯出Dex文件源碼。
4. APK文件簽名工具 SignApk為APK文件執行簽名,專門提供給廣大漢化工作者們。
5. APK安裝器 PC版 QQApktool為用戶提供可以預先查看軟體的所有信息包括許可權的APK安裝器。
6. 顯示APK自身圖標 Apkshellext v2.3該程序非常不錯,可惜佔用緩存和讀取速度較慢,容易出現讀取滯留狀態,從而導致APK文件無法刪除,建議配置低的電腦慎用。
7. 如何利用apktool反編譯apk桌面快捷
所需工具:手機端反編譯神器apktool,我用的是apktool4.4,RE文件管理器,後面會給下載鏈接。
解壓下載的apktool文件,將整個apktool文件夾移到根目錄下,把需要修改的apk移到apktool文件夾內這里以最新的V4A音效為例
安裝apktool,授予root許可權,進入apktool文件夾,點擊com.vipercn.viper4android_v2-1.apk,選擇最上面的反編譯全部,過程大概需要2~3分鍾。
這時就需要用到RE文件管理器了,進入apktool文件夾,進入com.vipercn.viper4android_v2-1_src文件夾,找到AndroidManifest.xml,長按選擇作為在文本編輯器中打開,找到下面這句
<category android:name="android.intent.category.LAUNCHER"/>
復制代碼
並刪除,之後返回並保存,刪除自動備份的AndroidManifest.xml.bak文件,這時就可以進行回編了。
打開apktool,進入apktool文件夾,長按com.vipercn.viper4android_v2-1_src文件夾,選擇編譯,編譯大概也是2~3分分鍾。並且apktool文件夾里會出現一個com.vipercn.viper4android_v2-1_src.apk
這時候基本上就完成的差不多了,但是還沒結束,因為沒對apk進行簽名,所以無法安裝。點擊com.vipercn.viper4android_v2-1_src.apk,選擇簽名,簽名完成後會出現一個com.vipercn.viper4android_v2-1_src_sign.apk這才是最終的。
安裝看看,打開選項已經沒有用了,桌面上也找不到該應用的圖標。
8. AXMLPrinter2.jar這個反編譯XML的工具怎麼使用
1、用AXMLPrinter2.jar反編譯xxx.xml文件
2、解壓xxx.apk,選擇main.xml
對於解壓xxx.apk,選擇main.xml),復制到AXMLPrinter2.jar所在目錄,通過cmd進入AXMLPrinter2.jar所在目錄。
9. 手機apktool怎麼回編譯
1、反編譯=回編譯後分別是
smali目錄 回編譯為 classes.dex 文件
res目錄 回編譯為 resources.arsc 文件
2、回編譯順序
在回編譯時,會先檢查「源」即resources
當你漢化文件,修改出錯了(缺少一個符號也不行),
那麼回編譯會自動跳過編譯res文件夾,直接回編譯smali 。
所以,如果沒有對smali(classes.dex)漢化,那麼建議大家刪掉這個文件夾,
這要會大大加快回編譯速度。
3、出錯問題1
在漢化時,往往會不小心刪掉一些符號,如 "<" ">"符號等等。
<string name="app_name">File Manager</string>
<string name="app_name">文件管理器/string>
<string name="app_name"文件管理器</string>
這些小小的錯誤都會導致回編時譯檢查出錯。
所以漢化時,注意對校,然後再回編譯。
建議使用一些高級的文本編輯器,支持語法高亮視圖的。
4、出錯問題2
最近發現有些APK文件 反編譯後,就算不漢化直接回編譯,都會出錯。
有可能的原因1,反編譯後XML文件語法中@符號 前面多了"\" (\@ ),
用文本編輯工具 直接替換【\@】為【@】,應該可以解決。
建議使用最新版本的反編譯工具。
5、建議大家使用新版本的APKTool工具,
當然如果新的有問題也可以試試舊的(作者說的)
10. 為什麼我用show java手機版反編譯出來的工程用AIDE打開會有很多錯誤
本文詳細介紹了如何反編譯一個未被混淆過的Android APK,修改smali位元組碼後,再回編譯成APK並更新簽名,使之可正常安裝。破譯後的apk無論輸入什麼樣的用戶名和密碼都可以成功進入到第二個Activity。
有時難免要反編譯一個APK,修改其中的若干關鍵判斷點,然後再回編譯成一個全新的可用的apk,這完全是可實現的。若要完成上述工作,需要以下工具,雜家後面會把下載鏈接也附上。這些軟體截止本文發布時,經過雜家確認都是最新的版本。
1.APK-Multi-Toolv1.0.11.zip 用它來反編譯apk,得到smali類型的源碼和資源文件。一般來講,直接解壓縮一個apk也可以看到其資源文件,但部分xml是不可閱讀的,需用此工具反編譯。網上流傳較廣的是一個經過高人漢化過的版本1.0.3,第一次使用這個工具可以用這個漢化的版本,熟悉其命令。但經過雜家測試,這個漢化的版本再回編譯apk簽名時已經出問題了,簽不了,最終用的最新版才ok。
2.dex2jar-0.0.9.15.zip 用於將一個apk文件轉換成jar類型的文件,轉換之後再利用下面的jd-gui工具才能看到其java代碼。上面的apk-tool固然強大,但是反編譯出來是smali文件,即dalvik位元組碼,類似匯編語言的一種代碼,直接閱讀如天書一樣,為此我們需要使用dex2jar + jd-gui來得到其java代碼,進行閱讀找到要修改的關鍵點。
3.jd-gui-0.3.6.windows.zip 可以打開一個jar類型的文件,看到java代碼。並能將代碼保存,保存後再弄到sourceinsight里就方便看了。最好使用本文所說的最新版本,使用老版本會發現一個BActivity,如果裡面有內部類,則又多出一個BActivity$1.java,類似這種文件。新版本沒這個問題。
4.Smali2Java.1.0.0.558.zip 用於將smali文件轉成java文件,這個工具僅僅是備用。因為用上面三個工具已經能夠勝任本文的要求了。
如果第一次接觸反編譯,不了解smali語法,可以閱讀鏈接1 鏈接2
下面雜家先上一個Android APK,用來簡單模擬用戶登錄的情況,注意只能是模擬哈。因為正式的apk很少有在本地進行判斷的。此apk要求用戶輸入用戶名和密碼,如果用戶名為yanzi,密碼為123,則認為合法,自動跳轉到第二個Activity。否則提示用戶名或密碼不正確。
<span style="font-family:Comic Sans MS;font-size:18px;">package org.yanzi.decomdemo.activity;
import org.yanzi.decompiledemo.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends Activity {
EditText loginName = null;
EditText loginPswd = null;
Button loginBtn = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initUI();
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isAllowLogin()){
Intent intent = new Intent(LoginActivity.this, SecondActivity.class);
startActivity(intent);
LoginActivity.this.finish();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.login, menu);
return true;
}
private void initUI(){
loginName = (EditText)findViewById(R.id.edit_login_name);
loginPswd = (EditText)findViewById(R.id.edit_login_pswd);
loginBtn = (Button)findViewById(R.id.btn_login);
}
private boolean isAllowLogin(){
String name = loginName.getText().toString().trim();
String pswd = loginPswd.getText().toString().trim();
if(name != null && pswd != null){
if(name.equals("") || pswd.equals("")){
Toast.makeText(this, "密碼或用戶名不能為空", Toast.LENGTH_SHORT).show();
return false;
}
}
if(name.equals("yanzi") && pswd.equals("123")){
return true;
}else{
Toast.makeText(getApplicationContext(), "用戶名或密碼不符", Toast.LENGTH_SHORT).show();
}
return false;
}
}
</span>
附上出處鏈接:http://blog.csdn.net/yanzi1225627/article/details/38425453