APK 安卓反編譯

在學習Android開發的過程你,你往往會去借鑒別人的應用是怎么開發的,那些漂亮的動畫和精致的布局可能會讓你愛不釋手,作為一個開發者,你可能會很想知道這些效果界面是怎么去實現的,這時,你便可以對改應用的APK進行反編譯查看。下面是我參考了一些文章后簡單的教程詳解。

(注:反編譯不是讓各位開發者去對一個應用破解搞重裝什么的,主要目的是為了促進開發者學習,借鑒好的代碼,提升自我開發水平。)


測試環境:

? ? ? ??win 7?


使用工具:

? ? ?CSDN上下載地址:

? ? ? ?Android反編譯整合工具包(最新)?下載

?

? ? ?官方最新版本下載地址:

? ? ???apktool(https://bbuseruploads.s3.amazonaws.com/0becf6a1-1706-4f2e-9ae6-891e00a8dd5f/downloads/b524f033-55a9-4932-854e-0d4f7c0c6e27/apktool_2.3.1.jar?Signature=UZ%2Bthh1Ip2nPdIdVyw8oWnWzXCw%3D&Expires=1514367580&AWSAccessKeyId=AKIAIQWXW6WLXMB5QZAQ&versionId=lozeb5QntKhSEiTTBTDSqBySxEHYHKu9&response-content-disposition=attachment%3B%20filename%3D%22apktool_2.3.1.jar%22)

???dex2jar(google code)??

???jd-gui(google code)最新版請見官方


工具介紹:

apktool??

? ? ?作用:資源文件獲取,可以提取出圖片文件和布局文件進行使用查看

dex2jar

? ? ?作用:將apk反編譯成java源碼(classes.dex轉化成jar文件)

jd-gui

? ? ?作用:查看APK中classes.dex轉化成出的jar文件,即源碼文件


反編譯流程:

一、apk反編譯得到程序的源代碼、圖片、XML配置、語言資源等文件

下載上述工具中的apktool,解壓得到3個文件:aapt.exeapktool.batapktool.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個文件夾:

build

dist(里面存放著打包出來的APK文件)


二、Apk反編譯得到Java源代碼

下載上述工具中的dex2jarjd-gui?,解壓

將要反編譯的APK后綴名改為.rar或則 .zip,并解壓,得到其中的額classes.dex文件(它就是java文件編譯再通過dx工具打包而成的),將獲取到的classes.dex放到之前解壓出來的工具dex2jar-0.0.9.15?文件夾內,

在命令行下定位到dex2jar.bat所在目錄,輸入dex2jar.bat???classes.dex效果如下:

在改目錄下會生成一個classes_dex2jar.jar的文件,然后打開工具jd-gui文件夾里的jd-gui.exe,之后用該工具打開之前生成的classes_dex2jar.jar文件,便可以看到源碼了,效果如下:

被混淆過的效果圖(類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名):



三、 圖形化反編譯apk(本人未使用過)

上述步驟一、二講述了命令行反編譯apk,現在提供一種圖形化反編譯工具:Androidfby

首先,下載上述反編譯工具包,打開Androidfby目錄,雙擊Android反編譯工具.exe,就可以瀏覽打開要反編譯的apk


通過反編譯,你可以獲知該應用用到了什么第3方的庫文件,它的代碼是如何編寫的等等。

然而,如果該APK進行了混淆處理,那么你看到的類文件名稱以及里面的方法名稱都會以a,b,c....之類的樣式命名,所以你可以想找到你所想得知的界面代碼可能會十分費勁,找到了代碼可能看起來也會很費勁,可是一個大體的思路會獲得,有了這個思路,你就可以自己去嘗試了。

本人曾經想寫一個類似唱吧的名人界面布局,可是當初第一次接觸不知道如何去寫,進進行了反編譯,即使他的那個代碼是混淆過的,我也看出來他是通過LISTVIEW的TYPE設定不同的ITEM布局實現了。可能好多引用都是采用重寫VIEW來實現效果,你可以得到他的大體思路對你的開發有益無害。


還有處于一個開發者辛辛苦苦將自己的應用開發出來被別人一反編譯便成為了他自己的東西,所以要進行混淆處理:

以下是我轉載的混淆的教程:http://blog.csdn.net/vipzjyno1/article/details/21042823

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444733.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444733.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql查詢實例2(借書卡、圖書、借書記錄)

問題描述: 本題用到下面三個關系表: CARD 借書卡。 CNO 卡號,NAME 姓名,CLASS 班級 BOOKS 圖書。 BNO 書號,BNAME 書名,AUTHOR 作者,PRICE 單價,QUANTITY 庫存冊數 BORROW 借書記錄。 CNO 借…

開始學習Unity3D(一)

本人最近轉行開始做海外獨立游戲的發行,主要是負責服務器,開會注意到海外的服務越來越豐富越來越細分,對國內將會造成很大的沖擊,比如AWS,Google,GameSparks等,這導致國內的所謂服務器開發將越來越簡單,國內對服務器開發的需求越來越少,反而客戶端的需求越來越多,所以…

List 流的使用

摘要 本文將介紹在 Java 1.8 中對 List 進行流操作的使用方法。引入的 java.util.stream 包為開發者提供了一種更為便捷和強大的方式來處理集合數據。通過使用流,我們能夠以聲明性的方式進行集合操作,減少了樣板代碼,提高了代碼的可讀性和可…

推薦系統(3)-協同過濾2-矩陣分解算法

協同過濾-矩陣分解算法1.奇異值分解2.梯度下降3.矩陣分解方法的優缺點《深度學習/推薦系統》讀書筆記(其實矩陣分解和協同過濾已經沒有特別大的聯系了) 2006年,在Netfilx舉辦的推薦算法競賽中Netflix Prize Challenge中,以矩陣分解…

leetcode141 環形鏈表

給定一個鏈表,判斷鏈表中是否有環。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 示例 1: 輸入:head …

iPhoneX適配

目錄(?)[-]核心代碼自動化修改代碼參考資料iPhoneX適配,比較搓的一種方式,在不修改分辨率(720 x 1280)的情況下適配iphone X 主屏尺寸: 5.8英寸 主屏分辨率: 2436 x 1125核心代碼修改 工程目錄/Classes/Un…

centos安裝nginx,配置負載均衡

1、安裝nginx安裝教程,參照:http://mp.weixin.qq.com/s/RVaRlRpHqZRjCaXGmOlfKw 2、反向代理的配置修改部署目錄下conf子目錄的nginx.conf文件的內容[html]view plaincopylocation / { #設置主機頭和客戶端真實地…

leetcode142 環形鏈表II

給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。 為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有…

PaperNotes(18)-VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized Representation

自動駕駛論文閱讀筆記11. Ployline Garph2. Global Graph3. 模型目標函數4.Related work5.Experiment5.1 實驗設置5.2 消融實驗5.3 模型資源消耗5.4 與其他模型的對比實驗VectorNet- Encoding HD Maps and Agent Dynamics from Vectorized RepresentationVectorNet: 通過矢量化…

ubuntu的apache配置https

一、配置Apache 1、開啟SSL模塊a2enmod ssl 2、啟用SSL站點a2ensite default-ssl 3、加入監聽端口vi /etc/apache2/ports.conf #編輯Apache端口配置,加入443端口 Listen 443注:Ubuntu啟用SSL站點后,缺省已經加入了 (…

vim特別好的教程

歡 迎 閱 讀 《 V I M 教 程 》 —— 版本 1.7 Vim 是一個具有很多命令的功能非常強大的編輯器。限于篇幅,在本教程當中 就不詳細介紹了。本教程的設計目標是講述一些必要的基本命令,而掌握好這 些命令&#x…

jquery、javascript實現(get、post兩種方式)跨域解決方法

&#xfeff;&#xfeff;jquery、javascript實現(get、post兩種方式)跨域解決方法一、實現get方式跨域請求數據瀏覽器端<script> $(document).ready(function(){$.ajax({url: "http://www.xxx.cn/index.php",type: "get",dataType: "jsonp&quo…

推薦系統(4)-邏輯回歸LR、POLY2、FM、FFM

邏輯回歸LR、POLY2、FM、FFM1.邏輯回歸LR2.辛普森悖論3.POLY24.FM-20105.FFM6.GBDTLR-20147.LS-PLM-2017《深度學習/推薦系統》讀書筆記1.邏輯回歸LR Logistic Regression – 融合多種特征&#xff0c;通過sigmoid 函數&#xff0c;預測樣本的被點擊的概率。樣本用特征向量x[x…

leetcode125驗證回文串

給定一個字符串&#xff0c;驗證它是否是回文串&#xff0c;只考慮字母和數字字符&#xff0c;可以忽略字母的大小寫。 說明&#xff1a;本題中&#xff0c;我們將空字符串定義為有效的回文串。 示例 1: 輸入: "A man, a plan, a canal: Panama" 輸出: true 示例 …

配置 Elastic Beanstalk 環境負載均衡器以終止 HTTPS

&#xfeff;&#xfeff;配置 Elastic Beanstalk 環境負載均衡器以終止 HTTPS 要更新您的 AWS Elastic Beanstalk 環境以使用 HTTPS&#xff0c;您需要為您的環境中的負載均衡器配置 HTTPS 偵聽器。以下兩種類型的負載均衡器支持 HTTPS 偵聽器&#xff1a;傳統負載均衡器和應用…

AWS 給負載均衡器配置偵聽器并上傳IAM證書

&#xfeff;&#xfeff;1.打開EC2的負載均衡器&#xff1a;添加偵聽器&#xff0c;選擇https&#xff0c;ssl證書需要有一個CA證書&#xff0c;可以去阿里云申請&#xff0c;也可以從亞馬遜獲取&#xff1a;注意&#xff0c;這里的ssl證書要這樣寫其中私有密鑰不是那種xxxxxx…

PaperNotes(19)-Learning Lane Graph Representations for Motion Forecasting

Learning Lane Graph Representations for Motion Forecasting1.ActorNet2.MapNet3.FusionNet4.Prediction Header5.模型參數學習自動駕駛論文閱讀筆記2 Uber–ECCV2020–論文文章代碼 模型的作用&#xff1a;Motion Forecasting &#xff08;這個motion都包括什么呢&#xff…

leetcode41 缺失的第一個正數

給定一個未排序的整數數組&#xff0c;找出其中沒有出現的最小的正整數。 示例 1: 輸入: [1,2,0] 輸出: 3 示例 2: 輸入: [3,4,-1,1] 輸出: 2 示例 3: 輸入: [7,8,9,11,12] 輸出: 1 說明: 你的算法的時間復雜度應為O(n)&#xff0c;并且只能使用常數級別的空間。 思路&am…

Linux(10)-Make編譯,Configure

Make編譯機制,Configure1.Make機制demo1.make編譯demo2.make清理demo3:make 安裝demo4:make 卸載2.configure2.1 Autoconf2.2 軟件的源碼安裝軟件發布的一些基礎知識。gcc, cpp, as, ld–施工隊&#xff0c;底層干活工人make --包工頭&#xff0c;指揮工人工作configure–分析師…

redis排行榜之日排行周排行設計

排行榜功能是一個很普遍的需求。使用 Redis 中有序集合的特性來實現排行榜是又好又快的選擇。 一般排行榜都是有實效性的,比如“用戶積分榜”。如果沒有實效性一直按照總榜來排,可能榜首總是幾個老用戶,對于新用戶來說,那真是太令人沮喪了。 首先,來個“今日積分榜”吧,…