android反編譯formac
⑴ Android反編譯
你用的是最新的apktool嗎
bitbucket.org/iBotPeaches/apktool/downloads
另外,使用新的apktool之前,請先把c盤里舊的framework-res.apk刪掉,每次更新都要做這個動作。
⑵ Android 如何對apk文件進行反編譯以及重新
第一:使用apktool直接反編譯apk
第六:把生成的hellodemo.apk安裝到手機,可以看到主界面上已經顯示的是hello,而不再是你好。說明反編譯重新打包成功!
⑶ 如何在 Mac 下搭建 Android 編譯環境 for quick v3
### 安裝最新的 Android ADT bundle 和 Android NDK
下載 Android 所需
1. adt-bundle-mac-x86_64_20140321.zip
2. android-ndk-r9d-darwin-x86_64.tar.bz2
3. android-8.zip
* 將 adt-bundle-mac-x86_64-2013???? 目錄改名為 android
* 將 android/sdk 目錄改名為 android/android-sdk-macos
* 將 android-*.zip 解壓到 android/android-sdk-macos/platforms/
* 移動目錄 android-ndk-r? 到 android/android-ndk-r?
最終的目錄結構:
```
<PATH_TO>/android/android-ndk-r?
<PATH_TO>/android/android-sdk-macosx
<PATH_TO>/android/android-sdk-macosx/platforms/android-?
<PATH_TO>/android/eclipse
```
運行 android/android-sdk-macosx/tools/android, 可以看到 Android 2.2 已經安裝好.
### 設置環境變數
~/.bash_profile 中添加以下代碼:
```
ANDROID=/Users/mac/Documents/SDK/android
export ANDROID_NDK_ROOT=${ANDROID}/android-ndk-r9d
export ANDROID_SDK_ROOT=${ANDROID}/android-sdk-macosx
export ANDROID_HOME=${ANDROID_SDK_ROOT}
```
完畢 ~
⑷ 如何將反編譯android代碼
反編譯android代碼並在eclipse中查看: apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件 下載上述工具中的apktool,解壓得到3個文件:aapt.exe,apktool.bat,apktool.jar ,將需要反編譯的APK文件放到該目錄下, 打開命令行界面(運行-CMD) ,定位到apktool文件夾,輸入以下命令:apktool.bat d -f test.apk test 在改目錄下會生成一個classes_dex2jar.jar的文件,然後打開工具jd-gui文件夾里的jd-gui.exe,之後用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了,效果如下:
⑸ android反編譯生成的代碼如下 像MainActivity.access$000(this.this$0);這樣的代碼該怎樣解釋,怎麼改
access$0表示調用一個外部類的方法,說明這段代碼是在內部類中使用的:
在調用的外部類方法定義代碼的上面,應該會有一段。methodstaticsyntheticaccess$0。
的代碼,這個代碼裡面才是真正要調用的方法。
安卓虛擬機指令在調用外部類方法的時候,需要區分類的調用關系。
thiscmdisdeprecated,usethed2j-dex2jarifpossible
dex2jarversion:translator-0.0.9.15
dex2jar..Apkd(d2j)classes.dex->..Apkd(d2j)classes_dex2jar.jar
(5)android反編譯formac擴展閱讀
反編譯是一個復雜的過程,反編譯軟體有:
1、SWF相關的反編譯程序
ActionScriptViewer
第一個也是最強大的商業SWF反編譯工具,同類產品中,它的AS代碼反編譯效果最好,SWF轉Fla工程重建成功率最高。
2、Android相關的反編譯程序
SMALI/BAKSMAL
SMALI/BAKSMALI是一個強大的apk文件編輯工具,用於Dalvik虛擬機(Google公司自己設計用於Android平台的虛擬機)來反編譯和回編譯classes.dex。其語法是一種寬松式的Jasmin/dedexer語法,而且它實現了.dex格式所有功能(註解,調試信息,線路信息等)。
⑹ Android-Mac電腦怎麼進行APK反編譯
第一步:下載反編譯工具集,apktool、dex2jar、jd-gui,最後我會上傳這些工具,解壓後如下圖:
下面那個彈出框是JD-GUI的,用來將位元組碼反編譯成java源文件用的
第二步,工具集准備好之後還不能進行反編譯,你在命令窗口下執行輸入apktool 會提示命令不存在,需要配置一下環境變數
,怎麼配置呢,如下命令:
1.打開命令窗口,cd /usr/local/bin下,可能有的mac電腦不存在bin這個目錄,直接在創建一個就好了,命令是:sudo mkdir bin,執行後會讓你輸入root許可權密碼,輸入完後執行ls命令查看,bin目錄就存在了,如圖:
2.將你解壓後的apktool文件夾下的三個文件aapt、apktool、apktool.jar 復制到/usr/local/bin/目錄下,怎麼復制呢,當然用命令cp了,如下圖:
復制多個文件用空格隔開,android-workspace/APK/apktool/目錄是源目錄,存放的是我們要復制的那三個文件,執行命令後,提示輸入密碼,輸完密碼後就復製成功了,ls查看一下,這三個文件已經存在了。
這時候就已經配置好環境變數PATH了,什麼,我怎麼沒看到和PATH有關的任何命令,其實,/usr/local/bin本來就在PATH下,不信我執行命令你看:
這也是我們把apktool3個文件放在/usr/local/bin下的原因,現在你再輸入apktool命令試試:
輸出這樣的命令就代表環境配置好了
第三步:開始進行反編譯了,其實用到的命令也很簡單,我們隨便拿一個apk來,例如:
我們要對dz-android.apk進行反編譯,命令行進入這個目錄 cd /Users/hailonghan/android-workspace/APK,到這個目錄後,
執行命令apktool d dz-android.apk,如下圖:
執行成功後,會在當前目錄下生成一個da-android文件夾,點擊去就看到相關apk的資源文件了,選中AndroidManifest.xml,然後空格鍵,就可以看到反編譯後的內容了:
第四步:反編譯java源文件
這就用到dex2jar和jd-gui了,將dz-android.apk重命名改成dz-android.zip,然後利用解壓縮軟體解壓,得到一個dz-android目錄,我們要拿到裡面的classes.dex文件,
將其復制到dex2jar-0.0.9.15目錄下,
然後執行命令:sh dex2jar.sh classes.dex,
執行成功後會生成一個classes_dex2jar.jar文件,
最後,用jd-gui工具打開這個jar包就可以看到java源代碼了,
⑺ 如何在Mac上進行Android反編譯
這恐怕不是學習之用了。。。呵呵。。。。。樓主打消自己的念頭吧。。。已經把變數名A改成B了,怎麼知道B以前是A還是C還是D呢。。。
⑻ 如何反編譯android應用並重新打包
一.看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,不能直接替換(因為簽名不一樣)
⑼ android 怎麼進行反編譯
下載附件解壓在桌面,打開桌面Android lollipop special文件夾里點擊Android lollipop special.bat文件輸入apktool回車測試apktool可用性 提取ROM里的框架和ui 放在桌面Android lollipop special文件夾里點擊Android lollipop special.bat文件輸入apktool if framework-res.apk回車載入框架完成 反編譯ui打開桌面Android lollipop special文件夾里點擊Android lollipop special.bat文件輸入apktool d SystemUI.apk回車反編譯完成 回編譯ui打開桌面Android lollipop special文件夾里點擊Android lollipop special.bat文件輸入apktool b SystemUI回車回編譯完成
⑽ 跪求android apk反編譯詳細教程,本人著實愚笨,看不懂網上滴步驟
一、更改apk文件的後綴名,如:LianyunHelper3.0.11.apk改成LianyunHelper3.0.11.zip
二、用zip解壓縮LianyunHelper3.0.11.zip文件
三、從解壓縮的文件夾中取出classes.dex文件並放到dex2jar.bat所在目錄
四、運行cmd命令,進入dex2jar.bat所在的目錄,輸入dex2jar.bat classes.dex即可生成classes.dex.dex2jar.jar文件
五、用jd-gui工具打開classes.dex.dex2jar.jar文件,即可看到源碼
六、將AndroidManifest.xml文件放到AXMLPrinter2.jar所在目錄,運行cmd命令,進入 AXMLPrinter2.jar所在目錄,輸入java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt。