安卓app反編譯教程(安卓反編譯apk)
今天給各位分享安卓app反編譯教程的知識,其中也會對安卓反編譯apk進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、如何更改安卓安裝包的內(nèi)置文件?
- 2、如何使用apktool反編譯apk
- 3、如何實現(xiàn)APK的反編譯得到APK的源碼
- 4、安卓app360加固怎么反編譯
- 5、如何反編譯android應(yīng)用并重新打包
- 6、android studio 如何回編譯一個APP
如何更改安卓安裝包的內(nèi)置文件?
工具:安卓修改大師、一個你要修改的app安裝包(這里以貪吃蛇大作戰(zhàn)為例)。
1、選取一個要進行反編譯的游戲或應(yīng)用:點擊安卓修改大師頂部的安卓游戲選項卡,打開的頁面中找到任何一款想修改的游戲,例如,本示例將要修改的游戲為“貪吃蛇大作戰(zhàn)”。
2、開始進行反編譯:點擊該游戲的“安裝”按鈕,彈出相關(guān)的反編譯選項菜單。點擊菜單中的“反編譯”按鈕,進入到游戲的反編譯界面。
3、修改圖標(biāo)、程序名稱等:在“反編譯”界面,左側(cè)為功能分類選項卡,右側(cè)為當(dāng)前選項卡對應(yīng)的可操作項。默認(rèn)選項卡是“常規(guī)信息”,在這里修改應(yīng)用圖標(biāo)和應(yīng)用名稱,注意圖標(biāo)要為png格式,設(shè)置128*128像素大小或者更大的圖標(biāo)。
4、重新打包:經(jīng)過前面的步驟后,已經(jīng)修改了應(yīng)用的名稱和圖標(biāo)以及相關(guān)的應(yīng)用參數(shù),點擊前述界面左側(cè)的“打包/簽名”選項卡,然后點擊開始打包按鈕進行打包。
5、打包完成,馬上點擊“安裝到手機”按鈕,可以開始安裝到您的手機上。
更改安卓安裝包的內(nèi)置文件需要反編譯已經(jīng)打包的APK安裝包,此方法推薦使用“安卓修改大師”,可以在沒有源代碼的情況下,直接反編譯安裝包,通過修改代碼實現(xiàn)添加和去除部分功能,也可以修改應(yīng)用圖標(biāo)和應(yīng)用程序名稱。
如何使用apktool反編譯apk
1.下載apktool所需文件:
a、 apktool1.5.2.tar.bz2
b、apktool-install-windows-r05-ibot.tar.bz2 (windows系統(tǒng))
2.解壓剛剛下載的文件,并將解壓的文件放入C:\Windows目錄下
3.啟動控制臺,輸入apktool,回車可查看到apktool工具常用指令
4.新建一個文件夾,用于存放apk及待解壓的文件,這里筆者將文件夾建在D:\apk目錄,同時放入用于測試的android app包(test.apk)
5.控制臺輸入:apktool d D:\apk\test.apk D:\apk\test 進行反編譯操作
中句話中“D:\apk\test.apk”指apk存放位置,“D:\apk\test”指反編譯后文件存放的位置
6.反編譯成功之后,進入D:\apk\test文件目錄可以查看到反編譯后的文件
如何實現(xiàn)APK的反編譯得到APK的源碼
最新的反編譯不用此方法, 有最新的一鍵自動反編譯工具:
這段時間在學(xué)Android應(yīng)用開發(fā),在想既然是用Java開發(fā)的應(yīng)該很好反編譯從而得到源代碼吧,google了一下,確實很簡單,以下是我的實踐過程。
在此鄭重聲明,貼出來的目的不是為了去破解人家的軟件,完全是一種學(xué)習(xí)的態(tài)度,不過好像通過這種方式也可以去漢化一些外國軟件。
注:本Android反編譯教程,在Windows7-Ultimate-64bit操作系統(tǒng)上,測試通過!
下述所需的反編譯工具包 下載
一、反編譯Apk得到Java源代碼
首先要下載兩個工具:dex2jar和JD-GUI
前者dex2jar是將apk中的classes.dex轉(zhuǎn)化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。以下是下載地址:
dex2jar:
JD-GUI:
具體步驟:
首先將apk文件,將后綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;
解壓下載的dex2jar,將classes.dex復(fù)制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄(在DOS命令下CD 目錄)
運行
dex2jar.bat classes.dex
生成
classes.dex.dex2jar.jar
生成jar文件的截圖如下:
運行JD-GUI(jd-gui.exe),打開上面生成的jar包,即可看到源代碼了
HelloAndroid源碼(編譯前的apk源碼對照)如下:
二、反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件
如果是漢化軟件,這將特別有用。首先還是下載工具,這次用到的是apktool
下載地址:
下載:apktool1.4.1.tar.bz2 和 apktool-install-windows-r04-brut1.tar.bz2(兩個包都下載)
具體步驟:
將下載的兩個包解壓到同一個文件夾下,應(yīng)該會有三個文件:aapt.exe,apktool.bat,apktool.jar
在命令行下定位到apktool.bat文件夾,輸入以下命令:apktool d C:\*.apk C:\*文件夾,如下圖:
命令行解釋:apktool d [apk文件 ] [輸出文件夾]
反編譯的文件如下(AndroidManifest.xml為例):
特別注意:你要反編譯的文件一定要放在C盤的根目錄里(其實不用放在C盤根目錄也行)
例如:在D盤目錄D:\apktool1.4.1
cd /d D:\apktool1.4.1 //切換到D盤目錄,包含HelloAndroid.apk以及aapt.exe,apktool.bat,apktool.jar三個文件
apktool.bat d -f HelloAndroid.apk HelloAndroid // apktool反編譯命令,注意 d和
-f 的寫法
將反編譯完的文件重新打包成apk,很簡單,輸入apktool b c:\***文件夾(你編譯出來文件夾)即可,命令如下:這個主意你文件所在盤
打包apk后的文件在目錄C:\HelloAndroid下,生成了兩個文件夾:
build
dist
其中,打包生成的HelloAndroid.apk,在上面的dist文件夾下,Ok
最后,再介紹一款剛出來的反編譯工具 Androidfby ,它是一款對上述步驟進行了封裝的圖形界面工具,下載地址
但是,針對部分簽名的apk,無法實現(xiàn)反編譯,但本博客方法則仍然可以反編譯成功!僅供參考使用
另外,作為應(yīng)用開發(fā)者,肯定不希望自己的代碼被反編譯的,下一遍博客將講述如何通過混淆代碼防止被別人反編譯
Android如何防止apk程序被反編譯
作為Android應(yīng)用開發(fā)者,不得不面對一個尷尬的局面,就是自己辛辛苦苦開發(fā)的應(yīng)用可以被別人很輕易的就反編譯出來。
Google似乎也發(fā)現(xiàn)了這個問題,從SDK2.3開始我們可以看到在android-sdk-windows\tools\下面多了一個proguard文件夾
proguard是一個java代碼混淆的工具,通過proguard,別人即使反編譯你的apk包,也只會看到一些讓人很難看懂的代碼,從而達到保護代碼的作用。
下面具體說一說怎么樣讓SDK2.3下的proguard.cfg文件起作用,先來看看android-sdk-windows\tools\lib\proguard.cfg的內(nèi)容:
[html] view
plaincopyprint?
1. -optimizationpasses 5
2. -dontusemixedcaseclassnames
3. -dontskipnonpubliclibraryclasses
4. -dontpreverify
5. -verbose
6. -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
7.
8. -keep public class * extends android.app.Activity
9. -keep public class * extends android.app.Application
10. -keep public class * extends android.app.Service
11. -keep public class * extends android.content.BroadcastReceiver
12. -keep public class * extends android.content.ContentProvider
13. -keep public class * extends android.app.backup.BackupAgentHelper
14. -keep public class * extends android.preference.Preference
15. -keep public class com.android.vending.licensing.ILicensingService
16.
17. -keepclasseswithmembernames class * {
18. native methods;
19. }
20.
21. -keepclasseswithmembernames class * {
22. public init(android.content.Context, android.util.AttributeSet);
23. }
24.
25. -keepclasseswithmembernames class * {
26. public init(android.content.Context, android.util.AttributeSet, int);
27. }
28.
29. -keepclassmembers enum * {
30. public static **[] values();
31. public static ** valueOf(java.lang.String);
32. }
33.
34. -keep class * implements android.os.Parcelable {
35. public static final android.os.Parcelable$Creator *;
36. }
從腳本中可以看到,混淆中保留了繼承自Activity、Service、
Application、BroadcastReceiver、ContentProvider等基本組件以及
com.android.vending.licensing.ILicensingService,
并保留了所有的Native變量名及類名,所有類中部分以設(shè)定了固定參數(shù)格式的構(gòu)造函數(shù),枚舉等等。(詳細信息請參考proguard_path/examples中的例子及注釋。)
讓proguard.cfg起作用的做法很簡單,就是在eclipse自動生成的default.properties文件中加上一句“proguard.config=proguard.cfg”就可以了
完整的default.properties文件應(yīng)該如下:
[html] view
plaincopyprint?
1. # This file is automatically generated by Android Tools.
2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3. #
4. # This file must be checked in Version Control Systems.
5. #
6. # To customize properties used by the Ant build system use,
7. # "build.properties", and override values to adapt the script to your
8. # project structure.
9.
10. # Project target.
11. target=android-9
12. proguard.config=proguard.cfg
大功告成,正常的編譯簽名后就可以防止代碼被反編譯了。反編譯經(jīng)過代碼混淆的apk得到的代碼應(yīng)該類似于下面的效果,是很難看懂的:
如果您使用的是2.3之前的SDK版本也沒關(guān)系,把上面的proguard.cfg文件復(fù)制一份放到項目中,然后進行相同的操作即可
安卓app360加固怎么反編譯
1 對比
上傳demo進行加固,解包后對比下原包和加固包,發(fā)現(xiàn)加固包在assets文件夾下多了libjiagu.so,libjiagu_x86,lib文件夾下多了libjiagu_art.so,同時修改了dex文件和AndroidManifest文件
打開manifest文件,看到xxx加固對Application標(biāo)簽做了修改,添加了殼入口,也就是我們反編譯后看到的StubApplication.smali這個文件。
相比于之前版本的加固,自從1.x.x.x加固版本之后,多了幾次反調(diào)試,使得動態(tài)難度稍微增大了一些,不過針對脫殼機脫殼,再多了反調(diào)試也是無用?;蛘咄ㄟ^修改系統(tǒng)源碼,也能達到消除反調(diào)試的作用。
2 動態(tài)調(diào)試
(1)把app安裝到手機,以調(diào)試模式打開app
(2)以shell模式root權(quán)限打開IDA的android_server監(jiān)聽
(3)tcp轉(zhuǎn)發(fā)
(4)打開IDA,修改配置為在進程開始時下斷
(5)搜索到進程后jdwp轉(zhuǎn)發(fā),pid值即為我們進程號,并在命令行下附加。
成功附加后,可以下段了,打開Debugger Option
我們選擇在線程開始和庫加載時下斷,修改成功后,jdb附加,點擊運行
程序會斷在elf頭處,按下G鍵,搜索mmap,在mmap函數(shù)的段首和斷尾下段
F9運行,來到斷尾時F8單步,
來到此處時,在 BLunk_5C999C2C下斷,F(xiàn)9一下,F(xiàn)7跟進去
跟進去今后在BLX LR處進行下斷,此處就是進行反調(diào)試的地方,原理依然是獲取TracePid的值判斷當(dāng)前是不是處于調(diào)試狀態(tài),建議第一次調(diào)試的人在fgets和fopen處下斷,再f7跟進此調(diào)用就可以看到TracePid的值了。
跟進去之后,我們直接把方法移到最下方,就可以看到kill符號了,這就是殺進程的地方,如果當(dāng)前處于調(diào)試狀態(tài),則直接結(jié)束進程。
我們在此函數(shù)的所有cmpR0,#0處下斷,F(xiàn)9一下后即斷在斷點處,觀察寄存器窗口的R0值,實質(zhì)就是當(dāng)前的TracePid的16進制的值
不確定的可以使用cat /proc/pid/status進行對比一下,我們直接把R0置0,右鍵選擇Zero Value即可清0,繼續(xù)F9
我們看到程序又來到了mmap處,繼續(xù)f9
當(dāng)繼續(xù)斷在調(diào)用反調(diào)試功能的方法時,繼續(xù)F7跟進,依然在所有的cmp R0,#0處下斷,斷下后把R0清0后繼續(xù)F9運行
目前的規(guī)律是,調(diào)用BLXLR的第一次,第二次和第四次是進行反調(diào)試判斷的,第三次并不影響,可以直接f9跳過去,三次反調(diào)試搞定后,就可以愉快的F9運行并觀察堆棧窗口了
當(dāng)看到出現(xiàn)如下所示時:
說明殼已經(jīng)開始解密并釋放dex文件了,我們直接F8單步十幾步,最后F9一下就可以看到我們需要的dex頭了
直接腳本dump出來即可,最后把libjiagu的所有文件刪除,并修復(fù)下Application標(biāo),如果存在則修復(fù),不存在刪除即可
如何反編譯android應(yīng)用并重新打包
一.看android的源代碼1)將Apkd.apk 用zip解壓后,出現(xiàn)了一個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.15dex2jar.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所在的目錄會出現(xiàn) classes_dex2jar.jar 文件。 3) 用JD-GUI對jar包進行查看,可以查看源文件二.反編譯apk1.在 下載 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目錄下的內(nèi)容如下: 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 如果你給定的已經(jīng)存在,那么輸入完該命令后會提示你,并且無法執(zhí)行,需要你重新修改命令加入-f指令 apktool d –f這樣就會強行覆蓋已經(jīng)存在的文件 2).build 該命令用于編譯修改好的文件,一般用法為 apktool b這里的 就是剛才你反編譯時輸入的 (如C:\MusicPlayer),輸入這行命令后,如果一切正常,你會發(fā)現(xiàn)C:\MusicPlayer內(nèi)多了2個文件夾build和dist,其中分別存儲著編譯過程中逐個編譯的文件以及最終打包的apk文件。 3).install-framework 該命令用于為APKTool安裝特定的framework-res.apk文件,以方便進行反編譯一些與ROM相互依賴的APK文件。具體情況請看常見問題四.smali與java源碼對照,并做出相應(yīng)的修改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; }}對應(yīng)的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;-()Vreturn-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, 0x7f03invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;-setContentView(I)V.line 14 const/high16 v1, 0x7f08invoke-virtual {p0, v1}, Lali/text/apkd/MainActivity;-findViewById(I)Landroid/view/View;move-result-object v0check-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 v0const/high16 v1, 0x7f07invoke-virtual {v0, v1, p1}, Landroid/view/MenuInflater;-inflate(ILandroid/view/Menu;)V.line 22 const/4 v0, 0x1return v0 .end method通過對比可以看到,常量是沒有必變的,可以根據(jù)的smali的語法,進行相應(yīng)的修改五.3、打包、簽名和安裝修改后的apk修改完了,就可以打包回apk了。執(zhí)行以下命令: apktool b decode_dir 在mygame目錄下的dist在會看到打包好的apk。 當(dāng)然,現(xiàn)在一般是無法安裝的,因為apk還沒有簽名。下面就來簽名。簽名需要keystore文件,我已經(jīng)有專用的keystore了,如果還沒有,請參閱這里進行生成。 執(zhí)行以下命令為重新編譯的my_game.apk簽名: jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore 最后,在安裝到手機前,需要把手機中的已有版本先卸載,因為如果簽名不同,是不能覆蓋安裝的,會提示“應(yīng)用程序未安裝”錯誤。 完整的運行情況如下:D:\developer\tools\test_apk\new\decode\distkeytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore 輸入keystore密碼: 再次輸入新密碼: 您的名字與姓氏是什么? [Unknown]: rao 您的組織單位名稱是什么? [Unknown]: rao 您的組織名稱是什么? [Unknown]: 您所在的城市或區(qū)域名稱是什么? [Unknown]: 您所在的州或省份名稱是什么? [Unknown]: 該單位的兩字母國家代碼是什么 [Unknown]: CN=rao, OU=rao, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 正確嗎? [否]: y輸入的主密碼 (如果和 keystore 密碼相同,按回車):D:\developer\tools\test_apk\new\decode\distjarsigner -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.arscD:\developer\tools\test_apk\new\decode\dist 到此為止,修改后的apk可以正常的安裝了,不過,在安裝之前,必須要先卸載以前的apk,不能直接替換(因為簽名不一樣)
android studio 如何回編譯一個APP
android studio中不能編譯反編譯出來的文件,android studio只能編譯源代碼。
1.反編譯Apk得到Java源代碼
首先要下載兩個工具:dex2jar和JD-GUI
前者是將apk中的classes.dex轉(zhuǎn)化成Jar文件,而JD-GUI是一個反編譯工具,可以直接查看Jar包的源代碼。
具體步驟:
首先將apk文件,將后綴改為zip,解壓,得到其中的classes.dex,它就是java文件編譯再通過dx工具打包而成的;
解壓下載的dex2jar,將classes.dex復(fù)制到dex2jar.bat所在目錄。在命令行下定位到dex2jar.bat所在目錄
運行 dex2jar.bat classes.dex
生成 classes.dex.dex2jar.jar
2.反編譯apk生成程序的源代碼和圖片、XML配置、語言資源等文件
還是下載工具,這次用到的是apktool
具體步驟:
將下載的兩個包解壓到同一個文件夾下,應(yīng)該會有三個文件:aapt.exe,apktool.bat,apktool.jar
1.解壓縮下載的兩個文件包,apktool-install-windows-r04-brut1.tar解壓縮后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool1.4.1.tar解壓后的一個.jar 文件copy到解壓后的\apktool-install-windows-r04-brut1文件夾里)
2.特別注意:你要反編譯的文件一定要放在C盤的根目錄里
關(guān)于安卓app反編譯教程和安卓反編譯apk的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。