A. androidkiller是什麼軟體
Android Killer
一個朋友寫的工具,挺方便好用,發到此處,留給新手同學們學習使用。詳細信息看下文介紹。
Android Killer 是一款可視化的安卓應用逆向工具,集Apk反編譯、Apk打包、Apk簽名,編碼互轉,ADB通信(應用安裝-卸載-運行-設備文件管理)等特色功能於一 身,支持logcat日誌輸出,語法高亮,基於關鍵字(支持單行代碼或多行代碼段)項目內搜索,可自定義外部工具;吸收融匯多種工具功能與特點,打造一站 式逆向工具操作體驗,大大簡化了用戶在安卓應用/游戲修改過程中的各類繁瑣工作。
主要功能:
1、可視化、全自動的反編譯、編譯、簽名;支持批量編譯APK。
2、以樹形目錄管理反編譯出的Apk源碼文件,瀏覽、打開、編輯、都可以統一在軟體中實現,不同項目間可以自由切換,方便快捷。
3、自動識別圖像資源,並提供該類資源的快捷替換功能,方便修改這類圖片資源。
4、內置代碼編輯器,支持包含(但不限於).samli、.xml、.html等各類格式文件的語法高亮顯示,根據 smali文件格式的自動匹配相應語法;同時支持使用系統編輯器來編輯代碼文件。
5、內置基於文件內容的單行或多行代碼關鍵字搜索、可顯示無窮多個搜索結果以標簽的形式分門別類;可指定搜索范圍(整個項目或在指定的文件或文件夾中搜索)、大小寫,編碼類型;從此無需再藉助其他工具,即可輕松的完成搜索任務。
6、內嵌Unicode、UTF8、ANSI編碼互轉工具,方便硬編碼文字的檢索以及相關漢化類修改。
7、內置Log等調試工具,方便應用進程、logcat輸出查看等進階操作,監測修改apk的運行狀況,以助於分析和查找錯誤
8、內置ADB功能,包括使用ADB向設備(或模擬器)安裝、卸載、運行修改後的apk,進行測試,並可管理所連接設備的存儲文件(包括系統以及用戶文件)
9、所有操作步驟、結果都會顯示在日誌窗口,方便查看。
10、默認支持記事本、計算器等小工具,開放設置介面可根據本人需要自定義外部工具,滿足個性化需求。
先放兩張界面圖:
注意:如果軟體首次運行時提示未找到java SDK,說明未安裝JAVA SDK或者未將JAVA SDK設置到WINDOWS系統環境變數中,請自己手動配置。
另外說明:xml, smali, html, jar 等相關文件格式可以直接拖到窗口界面上打開,將裝有圖片的文件夾拖拽到窗口界面上,可預覽圖片中的相關格式。
Android killer 正式版 V1.0.0.102更新
本次正式版更新不得不說是給新手一次福利:
本次更新總概覽:
1. 增加代碼描述提示功能(適合新手)
2. 代碼自動補全功能(適合新手)
3. 在項目工程中優化並顯示apk圖標。
4. 優化類以及方法圖標。
5. 編譯生成文件名稱變化,以及快速打開編譯項目所在位置。
6. 增加代碼模板插入功能
7. 優化右鍵菜單,更簡潔方便
8. 優化logcat日誌顯示,查看更方便。
9. 添加16進制/10進制轉換功能
一、 增加代碼描述提示(適合新手)
將滑鼠游標定位在代碼上,會提示當前代表所表示的含義,再也不要一次次的查表看代碼了,
二、 代碼自動補全功能(適合新手)
代碼自動補全功能,在輸入法在英文狀態下。使用shift+空格鍵即使用,只需輸入第一個或者前幾個字母即可提示代碼自動補全。
三、 在項目工程中優化並顯示apk圖標
項目中顯示ap圖標可以讓你在眾多項目中找到某個項目
對於首次反編譯APK未及時更新工程選項卡圖標的原因,是因為正常APK在反編譯後才會得到其中的資源,所以在首次反編譯時,使用工具默認的安卓小圖標代替,反編譯成功後,可在「開始」列表中右鍵刷新列表,更新下工程圖標緩存即可。
四、 優化類以及方法圖標
圖標採用eclispe中圖標顯示
五、 編譯生成文件名稱變化,以及快速打開編譯項目所在位置
快速找到編譯後的文件
方法一:
點選 "工程管理器" 中 Android 小圖標按鈕或點擊下面路徑進行查看
方法二:直接點擊下面的藍色字體即可
B. 如何反編譯android應用以及重編譯,簽名和對齊優化
首先,了解一下我們為什麼需要反編譯apk
大部分情況下,是由於想本地化一款優秀的應用,才需要做這事兒;又或者進行少量的smali修改以達到想要的效果(如添加歸屬地,使3G版Nexus 7支持Wi-Fi熱點)。
下面我們先准備運行環境和工具
建立工作目錄,如.\workspace\apktoolbox (下面同樣以此路徑為例)
必不可少的JDK:Oracle Java下載,安裝完成後把<jdk-inst-path>\bin添加到$PATH環境變數中
反編譯和重編譯工具apktool:Google Code下載,按平台下載(一個apktool-install-<platform>-<ver>-tar.bz2,一個apktool<ver>.tar.bz2,下載完成後解壓至.\workspace\apktoolbox\bin
密鑰文件,共4組。test/shared/media/platform,從android source中獲取,分別對應不同共享用戶ID時簽名所需(查看應用AndroidManifest.xml第二行android:sharedUserId項 ),放到.\workspace\apktoolbox\bin下
test - 無android:sharedUserId項
shared - android:sharedUserId=android.uid.shared
media - android:sharedUserId=android.uid.media
platform - android:sharedUserId=android.uid.system
簽名工具signapk.jar,放到.\workspace\apktoolbox\bin下
對齊優化工具zipalign(從android sdk中獲取,在tools目錄下),放到.\workspace\apktoolbox\bin下
准備工作完成
接下來我們就要開始工作了(以本地化工作為例)
把待反編譯的apk放到.\workspace\apktoolbox\apks下
在命令行模式下進入.\workspace\apktoolbox\bin目錄,輸入以下命令進行解包(反編譯)
apktool d ..\apks\<apkfile>.apk ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\res下的values目錄(英文原版)和values-r<locale>目錄(本地化)就是我們需要的對象。
本地化工作完成後,在命令行中輸入以下命令進行重新打包(重新編譯)
apktool b ..\apks\<outdir>
.\workspace\apktoolbox\apks\<outdir>\dist目錄下會生成重新打包後的apk(未簽名,未對齊優化)
重新打包完成後,在命令行中輸入以下命令進行簽名(根據實際情況選用密鑰,這里以test密鑰為例)
java -jar signapk.jar testkey.x509.pem testkey.pk8 ..\apks\<outdir>\dist\<apkfile>.apk ..\apks\<apkfile>_signed.apk
簽名完成後,在命令行中輸入以下命令進行對齊優化
zipalign -f -v 4 ..\apks\<apkfile>_signed.apk ..\apks\<apkfile>_zipaligned.apk
<apkfile>_zipaligned.apk就是我們最終需要的apk了。
完成
部分apk需要系統框架資源,沒有的話在重新打包時會報錯,這種情況下我們只需要先安裝一下對應系統框架即可(從你目標ROM中把/system/framework/framework-res.apk提取出,放到.\workspace\apktoolbox\apks下)。在命令行中輸入以下命令進行安裝
apktool if ..\apks\framework-res.apk
C. anzhuo應用程序怎麼反編譯
讓我們先來認識下APK文件. Android的應用程序包為擴展名為.apk文件, 無論你是從手機市場里下載, 還是電腦中下載. 都是這類APK文件. APK是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程序,並非Java ME的位元組碼而是Dalvik位元組碼。Android在運行一個程序時首先需要UnZip,然後類似Symbian那樣直接,和Windows Mobile中的PE文件有區別.
android
一個APK文件解壓開通常有這樣的文件夾:
META-INF 目錄:
MANIFEST.MF: manifest文件
CERT.RSA: 應用程序證書
CERT.SF: SHA-1資源簽名列表. 例如:
Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA1-Digest-Manifest: wxqnEAI0UA5nO5QJ8CGMwjkGGWE=
...
Name: res/layout/exchange_component_back_bottom.xml
SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w=
...
Name: res/drawable-hdpi/icon.png
SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=
lib: 這個目錄包含某些特定編譯代碼, 這個文件夾分成下面這些
armeabi: 只基於所有ARM處理器的編譯代碼.
armeabi-v7a: 所有ARMv7處理器的編譯代碼
x86: 僅針對x86處理器的編譯代碼
mips: 為MIPS處理器的編譯代碼
res: 包含資源的目錄不編譯到資源文件,看下面:
assets: 包含應用程序的資產,可以通過AssetManager進行檢索.
AndroidManifest.xml: 包含應用程序的元數據文件,描述名稱、版本、訪問許可權、引用應用程序的庫文件。此文件在Android二進制格式, 可被工具轉化為可讀的純文本XML工具,如 AXMLPrinter2,apktool,或Androguard。設置,可以通過AssetManager進行檢索
classes.dex: Dalvik位元組碼
resources.arsc : 一個包含預編譯資源文件,如二進制的XML.
有兩種方法反編譯APK, 如果是為了漢化程序, 可以使用apktool:
安裝過程
1.下載apktool1.5.2.tar.bz2和apktool-install-windows-r05-brut1.tar.bz2
2.把兩個文件都解壓放在同一個目錄,共三個文件
aapt.exe
apktool.bat
apktool.jar用於解包,apktool.jar和aapt.exe聯合用於打包。
在命令行執行:
apktool d d:xxx.apk d:xxx
xxx 為你的輸出目錄, 然後你就可以看一些xml的資源文件, 以及Smali文件. 如下圖某APK文件反編譯輸出目錄:
由此可見,Android應用程序反編譯並不難, 加密與解密的斗爭一直會持續.
D. 瀹夊崜apk鍙嶇紪璇戝伐鍏峰畨鍗揳pk鍙嶇紪璇
apktool5.0奼夊寲鐗堬紵
Apktool5.0奼夊寲鐗堟槸涓嬈懼畨鍗撶Щ鍔ㄥ鉤鍙頒笂鐨勫弽緙栬瘧宸ュ叿杞浠訛紝!Apktool鐜板凡瀹岀編鍏煎笰ndroid5.0L錛屼嬌鐢ㄥ畠鍙浠ヤ慨鏀硅蔣浠跺簲鐢ㄥ悕縐幫紝緇欒蔣浠跺簲鐢ㄥ幓騫垮憡銆佺牬瑙c佺懼悕銆乑IP浼樺寲絳夛紝鏀鎸乯ava緙栬瘧鍣錛屽彲鍦ㄦ墜鏈轟笂瀹屾垚綆鍗曠殑.java鏂囦歡緙栬瘧鍙婅繍琛岋紝鎵嬫満鍏氬java鐨勫埄鍣!浣滆呬粠鍙戝竷浠ユ潵涓鐩村緢浣庤皟錛岄潪甯稿己鎮嶇殑鎵嬫満絝鍙嶇紪璇戝伐鍏楓
鍙嶇紪璇慳pk鎶io寮傚父鏄鎬庝箞鍥炰簨錛
榪欎釜apktool鏈韜灝變笉鏀鎸佷竴浜沘pk鐨勫弽緙栬瘧錛屽洜涓哄弽緙栬瘧涓嶅彧鏄鏇挎崲瀛楃﹂偅涔堢畝鍗曠殑錛屽畠閲岄潰寰堝氬湴鏂逛細鐢ㄥ埌鎹曟崏閿欒錛屽洜涓哄紑鍙戣呯殑綺懼姏鏈夐檺錛屽緢澶氶敊璇閮芥槸琚涓鍒鍒囷紝瑙嗕負鏃犳硶榪愯岃ユラわ紝鐒跺悗鎶婇棶棰樹涪緇欑敤鎴楓
鐭ラ亾apk鐨勫悕縐板備綍鍘誨繪壘錛
1.杈撳叆鍛戒護錛歛dbshellammonitor銆
鐒跺悗鍚鍔ㄩ渶瑕佽幏鍙栧寘鍚嶇殑搴旂敤銆
2.鏌ョ湅鑷宸卞畨瑁呯殑app鍖呭悕銆
3.瀹夊崜緋葷粺涓錛氳劇疆鈥斺斿簲鐢ㄢ斺旀e湪榪愯屾煡鐪嬨
4.瀹夊崜緋葷粺涓錛氭枃浠剁$悊鍣ㄨ塊棶鐩褰/data/data涓嬶紝鏂囦歡澶瑰嵆涓哄寘鍚嶃
5.灝哸pk鍖呭弽緙栬瘧鍚庯紝鎵撳紑AndroidManifest.xml錛屾悳緔package鑾峰彇鍖呭悕銆
apk鏂囦歡鎬庝箞鍐欙紵
APK鏄疉ndroidPackage鐨勭緝鍐欙紝鍗矨ndroidapplicationpackage鏂囦歡鎴朅ndroid瀹夎呭寘銆傚彲浠ョ敤apktool錛宎pkmanager絳塧pk鍙嶇紪璇戝埄鍣ㄨ繘琛岀紪鍐
E. 如何反編譯Android 的apk/dex/odex,獲得源碼
關於APK,DEX的介紹
當我們編譯一個安卓項目的時候,整個項目會被打包成一個 .apk文件。這個文件其實是一個標準的zip文件,因此可以用解壓縮工具打開。這個apk文件一般都包含程序的代碼(在classes.dex文件中), 資源文件, 證書, manifest 文件等。 其中對我們最重要的是classes.dex文件,因為編譯後的位元組碼(bytecode)都是放在這個文件中。我們後面講的反編譯就是針對這個dex文件來的。
反編譯普通的APK文件:
對於普通的APK/DEX文件的反編譯,其實工具有很多, 包括:
ByteCode Viewer: 一個可視化的集成工具,說實話,不太好用,不夠穩定,生成代碼質量中等。
dex2jar + jd_gui: 這兩個工具組合還可以, 用起來比ByteCode Viewer麻煩一些,但比較穩定,生成代碼質量中等。
在線反編譯工具JADX: http://www.javadecompilers.com/apk , 這是基於SourceForge上的JADX的開源工具來實現的。本來以為在線反編譯質量不會好,但出人意料的是:JADX是我發現的最好的反編譯工具, 不但使用簡單(直接上傳,轉換,下載就ok),而且反編譯出來的代碼質量很高,特別是變數命名方面,可讀性很不錯。
反編譯ODEX文件:
Android 5.0 Lollipop以後,Google用ART代替了以前的Dalvik,對於普通的app來說我們仍然可以用上面的方法來把dex文件反編譯成Java源代碼。但對於系統預裝的App,特別是類似應用商店,播放器等, 你會發現這些應用的apk文件中找不到對應的classes.dex文件,而是會發現在其子目錄下有個.odex文件。 那如何反編譯這個odex文件呢?我通過google查了查,知道應該用baksmali,但從github上下載了幾個版本都不行,報各種不同錯誤。經過反復搜索和嘗試,終於找到了這篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具體方法如下:
1. 從這里下載工具包, 解壓縮到本地。 這里的baksmali的版本是2.0.3. 不同版本的baksmali針對的Android內核不同。有時候高版本反倒不好用。
2. 打開工具所在目錄, 按住shift鍵, 點擊滑鼠右鍵,打開windows命令窗口
3. 把 odex文件拷貝到該目錄
4. 在命令窗口運行: oat2dex.bat *.odex. 正常情況下,應該顯示OK等信息。如果報錯的話,說明這個文件無法轉換,後面的也不用試了。
5. 運行 oat2dex.bat *.odex temp.dex . 運行後會創建一個temp.dex文件。
6. 運行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 運行後會創建一個source的文件夾,並將temp.dex反編譯到該文件夾。-a 21 表明的是Android內核的版本21
7. 運行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反編譯為classes.dex文件。
需要注意的是:由這種方式反編譯成的classes.dex 文件相比原生的classes.dex 還是缺少了些信息,因此反編譯這種classes.dex 文件後生成的java代碼可讀性會更差些。
8. 用在線工具JADX 來把 classes.dex 最終反編譯為java代碼。