那些值得你試試的 Android 競品分析工具
最近一段時間因為瑣事(有公有私)太多,加上搬家後,家裡斷網了一週,雖然有很多東西想寫,但卻遲遲沒有動手。好在目前基本事情都搞完,又可以愉快的寫東西了,所以,接下來部落格更新的頻率將會有所提高。寫部落格的好處是很多的哈,一方面總結可以分享也方便自己回顧,另一方面是當作者對知識點理解可能存在侷限(或者錯誤)時,讀者也會幫你指出。
前言
本文整理了一些自己在開發過程中經常會用到的競品分析工具,這些工具可以幫助分析競品。讓我們得以瞭解競品相應的一些技術資訊,例如:程式碼質量、某種業務的實現方式、用了什麼第三方庫等。除此之外,也有一些高階玩家會玩起 HOOK ,更有甚者是通過修改程式碼然後進行二次打包。當然這些損害開發者利益的事情,是不值得提倡的。但如果只是出於學習的目的,我是十分建議多折騰的。
提前宣告:
- 本文只對工具做簡要功能介紹,要求面面俱到講解每個工具使用,本人表示能力有限啊;
- 下文所介紹的工具,都會附上這些工具的官方地址以及相應的使用教程連結(如果有);
- 有童鞋對下文提到的工具已經用得出神入化,歡迎寫成文章,可以的話,也歡迎給個連結讓我補充進本文,順帶學習一下;
- 本文所有提到的工具只做分析學習使用,請不要拿去做損害他人利益的事情;
Apk 內部結構
為了方便介紹工具,需要先簡單科普一下 Apk 的內部結構,已經很熟悉的童鞋可以忽略此章節。需要注意的是,這裡介紹的 Apk 結構並不包含加固的情況,雖然很多廠家推出了加固服務用於對抗反編譯,但是加固也有諸多的問題存在,另外基本上分析的大廠應用都沒有發現有加固的,可能也是考慮到加固後安裝包存在的諸多問題吧。
直接使用 Android Studio 建立一個 HelloWorld 的 Moudle,然後打個 release 的 Apk 安裝包,並修改後綴 apk 為 zip 後進行解壓,可以看到下面一個標準的結構:
- META-INF: 存放簽名檔案簽名信息的目錄,用於系統簽名校驗
- res: 存放資原始檔的目錄,包含專案中的 xml 和 圖片資源等
- AndroidManifest.xml: Android專案中的配置檔案
- classes.dex: 由Java產生的位元組碼檔案打包生成為虛擬機器可以解讀的位元組碼檔案,所有的原始碼都在其中
- resources.arsc: 資原始檔的ID索引表,如:layout、drawable、mipmap都會在R檔案生成相應的ID資源
- 其他目錄:開發者自行新增的目錄,如:存放資源的 asserts 、存放依賴包的 lib 目錄等
上面介紹完了一個最基本的 Apk 解壓後的目錄結構,下面直接拿微信作為示例,看看大廠應用的結構是怎樣的:
我們可以看到微信除包含了上面提到的,還有 asserts、lib、r 這三個自行新增的目錄,至於前兩個目錄是幹嘛的上面已經提到,r 目錄裡面主要存放了一些 svg 和 xml 檔案,有興趣可以自行試試。如果要問為什麼微信有3個dex檔案的話,只能說它超了 Android 系統設定 65k 方法的限制,所以有多個dex包。
OK,關於 Apk 的目錄結構介紹基本到此,這有助於我們去理解下面即將要介紹的工具!
Apktool
工具名:Apktool
原始碼:
功能:
- 還原 Apk 中所包含的 resources.arsc, classes.dex, 9.png 和 xml 等檔案;
- 對 Apk 進行重新(二次)打包;
- 反編譯依賴於 Framework 的 apk 檔案;
- 執行除錯 Smali 檔案;
下面以微信的Apk為例簡要介紹每個功能。
1、還原 Apk 中所包含的 resources.arsc, classes.dex, 9.png 和 xml 等檔案。通過DOS視窗去到Apktool目錄下,執行如下命令
apktool d XXX.apk
可以看到上圖的反編譯過程中列印資訊日誌,以及反編譯成功後得到的微信目錄。反編譯成功後,進入微信目錄可以看到如下的目錄結構
2、對 Apk 進行重新(二次)打包。通過DOS視窗去到Apktool目錄下,執行如下命令:
apktool b 目錄名
本想對微信做重新打包,結果發現微信果然做了處理了,打包不成功,大廠考慮得好周到。於是狡猾的拿了另一個物件試手,果然一下子搞定了
可以去到反編譯生成目錄下的dist目錄看到我們重新打包好後的 Apk
這個功能主要有兩個應用場景,一個是對應用進行本地化處理,例如反編譯後對應用進行漢化。另一個是無恥的對應用進行廣告植入,重新打包發放市場並以此牟利(非常強烈的不贊同大家去這麼做)。
3、反編譯依賴於 Framework 的 apk 檔案。這個功能我並沒有用過,但是也做了大致的瞭解。舉個例子(摘自網路的栗子):一般來說,你在使用 Apktool 進行反編譯前不需要做其他的事情,然而由於有的廠商,如HTC,三星等,他們定製了 Framework 檔案並且在他們的系統應用中使用了這些檔案,這時,為了能正常的反編譯這些Apk檔案,你就必須從你的裝置中拷貝出framework檔案並且安裝到apktool中。對這個功能感興趣的童鞋,可以直接檢視這篇文章:http://bbs.gfan.com/android-2657915-1-1.html
4、執行除錯 Smali 檔案。首先需要解釋一下什麼是Smali,它是 Android 虛擬機器所使用的一種機器語言,差不多可以理解成組合語言那樣子。利用 Apktool 反編譯後,classes.dex 會被翻譯成 Smali 原始碼
去到下面隨便找個目錄開啟,可以看到都是字尾為 smali 的檔案,
隨便找個檔案開啟你會發現, smali 的語法還是比較好理解的
有興趣想要了解 smali 語法的,可以看看這位作者寫的文章:http://blog.isming.me/2015/01/14/android-decompile-smali/。看到這裡你可能會想問,瞭解 smali 的語法有什麼用呢?哈,非常簡單粗暴,如果懂語法,就能讀懂人家的應用裡面的業務邏輯,還可以加以修改等。 再加上 Apktool 提供的除錯 Smali 功能,可以玩得很爽。但是在 2.0.3 的版本上,作者已經宣佈廢棄此功能,到了 2.1 時此功能已經完全移除掉了。這也並不意味這我們無法玩轉 smali 檔案。感興趣的童鞋可以直接玩耍下面這個 smali 除錯外掛:
反正我一看到 SmaliIdea 是震驚了。目前 SmaliIdea 最新的版本是 0.03,喜歡玩耍的童鞋可以到下面的下載地址中:
找到最新版的 SmaliIdea 進行安裝使用
對了,這個外掛是基於 IntelliJ IDEA / Android Studio 的,還在 Eclipse 下擼碼的童鞋可以忽略。
使用 Apktool 需要注意還需要注意以下幾點:
1、下載完 Apktool 後,記得要把 jar 檔案改成 apktool.jar,與 apktool.bat 同名;
2、如果之前使用過舊版的 apktool ,記得到自己對應的使用者目錄下將 1.apk 檔案刪除,否則會造成反編譯失敗;
Clock 是我在 Windows 下的使用者目錄,其他童鞋自己換成自己對應的使用者目錄即可。
3、不要拿去使用 Apktool 去幹違法盜版的事情,這也是工具的作者特別強調的;
dex2jar
工具名:dex2jar
原始碼:
配置文件:很簡單,去官網連結直接下載到本地即可
使用文件:同樣比較簡單,直接看下面示例,或者 Google 一下
功能:
- 將 dex 檔案還原成為 jar 檔案;
- 將 dex 檔案還原成為 smali 檔案;
- 其他一些命令列很少用,喜歡折騰的童鞋,同樣自行摸索;
繼續拿微信開刀,解壓 Apk 去除一個 dex 包,對其進行如下命令列操作
d2j-dex2jar.bat dex檔名
可以看到生成一個對應的 jar 包,這樣就可以結合下一個工具很方便的檢視原始碼了。如果想要將 dex 轉換成 smali ,同樣可以執行如下操作:
d2j-dex2smali.bat dex檔名
classes-out 目錄中就可以看到由 dex 包生成的所有 smali 檔案了。想必大家也留意到所有的檔案都存在同名但是字尾不同的兩份
bat 字尾的是 Windows 使用者可以呼叫的批處理檔案,sh 字尾的則是 Linux 使用者的 Shell 指令碼。根據自己的環境去選擇用 bat 還是 sh 即可。
jd-gui
工具名:jd-gui
功能:
- 檢視 dex 檔案還原成為 jar 檔案程式碼;
- 將 jar 檔案中所有的 class 檔案轉換成為 java 檔案;
使用很方便,下載後,直接把用 dex2jar 生成的微信 jar 包拖曳進去即可檢視到對應的原始碼。
也可以去到工具欄選擇 File -> Save 或者 File -> Save All Sources 將單個 class 檔案或者整個 jar 包儲存成為 java 檔案。可惜的是,這個工具的作者從 2015 年開始就停止了維護,所以遲早尋求一個替代品。網上有童鞋說,jadx 不錯,可以取代 jd-gui 。我自己還沒玩過,童鞋們可以自行試試:
enjarify
工具名:enjarify
配置文件:下載原始碼到本地,並安裝 Python3 的環境,同時配置好環境變數
功能:可直接將 apk 檔案還原成為 jar 檔案,也可以和 dex2jar 一樣,直接操作某個dex
這是 Google 出品的一個逆向分析工具,從反編譯成 jar 包的流程來說,要比 dex2jar 方便得多。下載完工具到本地並配置好 Python 環境後,需要修改 enjarify 目錄下的 enjarify.bat 檔案,將 python3 改為 python
再通過DOS視窗去到其目錄下,執行如下命令:
enjarify.bat XXX.apk
這裡同樣需要注意,一定要將 apk 拷貝到和 enjarify.bat 同級目錄,如果使用 apk 的全目錄的話,會報錯。
enjarify 相較於 dex2jar 做了更多的優化處理,去避免在反編譯得到 jar 包的過程中出錯。雖然我在使用 dex2jar 的過程中還沒遇到過出錯的情況,但是在使用 enjarify 時,確實感受到相對更加方便的地方。例如:可以直接對apk進行操作,而不需要先解壓提取classes.dex,特別是針對那些本來就不止一個dex包的大型應用。而 enjarfy 也並非萬能的,它目前存在的一些限制,如暫時還無法逆向獲得原始檔的屬性、行數和註釋等。當然,相信 Google 的工程師也會盡力去優化改善 enjarfy 的功能,還是很值得期待的。
Procyon
工具名:Procyon
功能:將反編譯得到 jar 包還原成 java 檔案,同時能夠更強的還原始碼的邏輯結構
下面直接對比一下,即可看到 Procyon 的優勢所在了。直接去到 Procyon 的目錄下,並將 enjarify 反編譯好的微信 jar 檔案放置到同級目錄,同時執行如下命令反編譯整個 jar 包:
java -jar procyon-decompiler-0.5.30.jar -jar XXX.jar -o 目錄名
即可看到目錄下指定生成的目錄,和控制檯視窗相應的反編譯 log 資訊。為了驗證 Procyon 的亮點,我同時將 dex2jar 反編譯微信的某個類拿出來做對比(類名是MCacheItem)得到結果如下:
相同的一個方法體的程式碼邏輯,圖一是 dex2jar 的,圖二是 Procyon 的,哪個能夠更好的讀懂相信大家自然心中有數,像這樣的栗子是很多的,這裡就不一一例舉。除了上面反編譯這個 jar 檔案的命令外,Procyon 還有下面兩個檔案使用比較高頻:
java -jar procyon-decompiler-0.5.30.jar 獲取幫助命令
java -jar procyon-decompiler-0.5.30.jar xxx.class 反編譯單個class檔案
ClassyShark
工具名:ClassyShark
使用文件:
功能:可直接瀏覽 Apk,支援對.dex, .aar, .so,.apk, .jar, .class等檔案的操作。
ClassyShark 同樣是 Google 的親兒子,利用它我們可以檢視一些 Apk 使用了什麼技術,方便作為我們開發的參考進行使用。同樣以別人家的 Apk 作為分析的栗子,這回不拿微信了,因為從 Apk 分析上看,微信大部分基本上都是用自己的技術,參考價值可能不太大,換一個目標下手(常常逛知乎,就拿知乎了)。操作同樣很傻瓜化,去到 ClassShark 的目錄下執行如下命令即可:
java -jar ClassyShark.jar -open XXX.apk
可以看到如下介面
我們可以看到如下介面,左邊包含了 xml 檔案、 classes 檔案以及 lib 目錄及其所包含的 so 庫。直接點選某個 xml 檔案即可看到其檔案內容,非常方便,不過這個工具的重點不在這裡。直接點選 classes 目錄下某個 dex 檔案
從上面兩張圖中你可以看到知乎兩個 dex 包所包含的方法數是多少(這個資訊對我們可能沒啥用),還有就是它使用了 Facebook 開源的圖片載入庫 Fresco、開源資料庫 Realm、還有騰訊和新浪的一些SDK。
如果我切換到另外一個 Tab,還可以看到更多的資訊
它分別列出了 Apk 下每個包中的方法數,並且以直觀的扇形圖展示在右邊。透過這裡也可以看到知乎還用了 Apache 的開源庫、Twitter 的移動開發檢測平臺 Fabric、 Rxjava、 Retrofit 以及 Square 出品的 OKIO 庫。發現大廠引入的開源技術我們也可以進行相應的學習,並權衡考慮引入使用。
最後補充一點,ClassyShark 能顯示包中方法數的這個功能對我們開發自家產品還是有所幫助的,假設你引入大量的第三方庫而導致了 Apk 超過了 65K 方法的限制,可以通過它來查詢是哪些第三方庫的方法過多導致。網上很多童鞋都推薦什麼計算方法數的 AS 外掛,個人覺得還不如用 ClassyShark 方便一些。
TcpDump
工具名:TcpDump
使用文件:
功能:對手機進行網路抓包,前提是手機已經獲取 Root 許可權。支援 HTTP 和 HTTPS ,還支援更多其他協議。
Tcpdump 的使用就不介紹太多,具體怎麼玩可以看上面 Trinea 和 MrPeak 的文章,已經寫得很完善了。TcpDump 沒有GUI,要檢視抓包日誌可以通過控制檯視窗,但明顯很雞肋,為了方便還是把所有網路日誌的抓包資訊放到 pcap 檔案裡面,然後結合下面要介紹的 WireShark 進行操作。
WireShark
工具名:WireShark
功能:
- 配置 Tcpdump 生成打 pcap 檔案,進行分析;
- 或者可以讓電腦建立熱點,手機連上電腦建立的熱點進行抓包,這種方式處理起來更加方便靈活;
WireShark 支援的協議也是非常多,可以看到我抓包出來的結構也非常詳細,WireShark 的基本使用自行參考上面提供的連結即可,如果要玩得很深的話,需要對網路協議有一定深度的瞭解,童鞋們可以選擇性自由發揮。
Fiddler
工具名:Fiddler
功能:支援對 HTTP 和 HTTPS 兩種協議進行抓包。
相比 Tcpdump ,它的好處在於手機不需要 Root,且有自己的 GUI 。不過它只支援 HTTP 和 HTTPS 兩種協議。另外在使用時,手機也需要連線 WIFI 並設定好代理,具體檢視 Trinea 的文章好了。抓包的過程還是能夠獲得不少資訊的,我在抓了新浪微博和微信的包後感受是,微信的防抓包工作比以前做得好了,微博好像就沒發現有什麼變化,不知道是不是錯覺。
Fiddler 是本文介紹的最後一個工具,需要補充一下,請教了一些童鞋,它們說 Mac 下使用 Charles 會更爽,額,我是 Windows 使用者,Mac 下的童鞋就自行折騰吧。
總結
以上就是目前自己常用的一些競品分析工具,有針對 Apk 反編譯的,也有對應用進行網路抓包的。競品分析並非只是幫助我們去了解競爭對手的產品,很多時候我只是出於對某些應用的技術實現感興趣,而對其進行一番挖掘,挖掘的過程中你會發現某種新技術你可以開始學習了。例如像知乎使用 realm 資料庫一樣,其實 realm 正式版釋出也沒多久,不過既然大廠已經投入使用那有空也需要適當的跟進學習,說不定哪天 realm 真的幹掉來了 SQLite 呢。
當然有時候除了學新技術,還派上了另一番用場,諸如某次同事對一個 App 的某些資料資訊感興趣,於是乎專門做了爬蟲到網上爬取資料,後來我反編譯了 App 後大致捋了一遍,發現該 App 在 raw 目錄下其實已經放著一個本地資料庫了,對比了資料基本差別無幾,直接可以拿來用了。或者可以拿著這些工具來對自家應用動手,找找自家的產品哪裡的安全性還不夠,可以進行完善彌補,未嘗不是一件好事。
文章總結到此,本人水平有限,無法做過多深入講解,感興趣的競品(逆向)分析技術的童鞋可以考慮看看 《Android軟體安全與逆向分析》 或者逛逛看雪論壇膜拜一些大神的奇技淫巧!
相關推薦
那些值得你試試的 Android 競品分析工具
最近一段時間因為瑣事(有公有私)太多,加上搬家後,家裡斷網了一週,雖然有很多東西想寫,但卻遲遲沒有動手。好在目前基本事情都搞完,又可以愉快的寫東西了,所以,接下來部落格更新的頻率將會有所提高。寫部落格的好處是很多的哈,一方面總結可以分享也方便自己回顧,另一方面是當作者對知
競品分析怎麼做?4要素+6大核心方法論教你迅速掌握競品分析精髓
好用的核心就是,使用者覺得用的比較順手,或者說在某個點,刺激使用者的體驗,使使用者覺得用得很舒服導師 / 趙毅,《創世兵魂》運營總監,主導過億級使用者產品從0到1的階段。 理論篇:競品定義的四要素與競品分析的四要素 在我們接觸競品分析工作的時候,可能大家的第一感覺是,怎麼競
Zine和石墨文檔競品分析
操作 我想 麻煩 是否 實時 好友 更換 體驗 吸引 市場環境 (1)該類產品的市場生成狀況如何,收益比例如何然後再決定是否加入 屬於工具類產品,筆記類的工具產品在市場上很多:印象筆記、為知筆記、石墨文檔、Zine等等。 這些產品基本
產品經理如何進行競品分析?
避免 層級 header 產品經理 根據 軟件 好的 選擇 線路 產品經理如何進行競品分析? 競品分析:對競爭對手的產品進行分析 產品經理做產品分析的目的: 了解市場 了解對手 了解需求 競品分析的思路(註:競品分析可以根據目的選擇幾個方面來做分析,不一定要面面俱到)
立體化監控平臺之競品分析
監控平臺之競品分析https://help.aliyun.com/product/34364.htmlhttps://www.aliyun.com/product/edas?spm=5176.8135679.793319.11.18eefecclxXsV4EDAShttps://www.aliyun.com/
paas平臺之競品分析
paas平臺容器服務 Container Service 視頻簡介容器服務提供高性能可伸縮的容器應用管理服務,支持用Docker容器進行應用生命周期管理,提供多種應用發布方式和持續交付能力並支持微服務架構。容器服務簡化了容器管理集群的搭建工作,整合了阿裏雲虛擬化、存儲、網絡和安全能力,打造Docker雲端最佳
智能運維平臺之競品分析
智能運維平臺https://www.uyun.cn/tenant/#/homehttps://docs.uyun.cn/幫助中心https://docs.uyun.cn/%E4%BE%A7%E8%A7%86優雲運維平臺介紹本文出自 “運維自動化” 博客,請務必保留此出處http://shower.blog.5
競品分析
image 競爭者 bubuko 獲得 在線教育 競爭對手 學院 mage 上線 #系統的對競爭對手的優勢以及劣勢進行評價 #第一條就是BRD 第二與第三條就是MRD 第五條就是PRD 什麽時候做競品分析:上線前以及產品叠代更新的時候 #競品選擇是第一步:以哪一
產品經理學習筆記——競品分析
產品 保持 google搜索 引擎 需要 TP 界面 目的 需求 什麽是競品分析1、一種確定功能需求、績效標準和其他記基準的非常有用的方法2、系統的競爭對手的優勢和劣勢進行分析評價3、目的: 1)幫助自身產品實現市場定位 2)為自身產品設計提供功能、可用性、關鍵技術等方面的
擁抱大前端 盤點那些值得你瞭解的最佳開發實踐
前端領域生態繁榮,致力於提高生產效率的技術、工具不斷推陳出新,可謂群雄割據且各有千秋。企業及前端開發者在實際開發中可選擇的空間大大增加,但也面臨著選擇困難症。抑或雖已確定了技術棧,但實際開發中卻時不時遭遇各種“坑”的牽絆。深入瞭解各大技術的優勢與劣勢,同時結合自身業務需求,你的技術選擇之路將
Keep&悅動圈競品分析報告(1)
產品概述 1.1背景分析 隨著社會的不斷髮展,人們的生活水平日漸提高,溫飽問題之外,人們首先考慮到的就是個人健康問題,運動健身是人們解決這一問題的主要途徑,並且伴隨著政府的全民健身運動的號召以及網路媒體的傳播影響,運動健身逐漸成為人們追求的一種新的生活方式和生活態度。伴隨著
酒類競品分析——以茅臺、五糧液、瀘州老窖為例
導語 茅臺、五糧液、瀘州老窖,這三個高階品牌家喻戶曉,但是隨著白酒的快消化轉型,使得中低價位產品或暢銷品牌銷量逐步提高。在高階酒市場萎縮的環境下,這三家廠商目前所處什麼地位? 我們利用五力分析從盈利能力、成長能力、運營能力、生產能力、償債能力五個方面為大家分析。
產品經理-1-競品分析步驟
步驟: 明確背景目的 找到競爭對手 產品定位分析 產品設計分析 核心策略分析 競品資料分析 分析報告撰寫 1、明確背景目的 常見目的: 瞭解市場發展行情、瞭解和競品的差距、確認新的產品切入點、提升和改進產品、更好的佔領市場 其他目的: 決定功能特
競品分析怎麼做
目錄 自己的感悟 理論篇:競品定義的四要素與競品分析的四要素 1.競品的定義的四要素 1.1 競品分級。 1.2 基礎架構。 1.3 策略分析。 1.4 發展潛力。 2.競品分析4大核心 2.1 使用者習慣的消費體驗。 2.2 核心價值。 2.3 功能拆分
手遊產品經理初探(十)競品分析
皇家賭場之百家樂OL互動體驗 最近由於沒有多少時間關心競品,所以今天抽時間寫一篇關於開心百家樂的互動體驗.以下是對於開心百家樂的一些體驗心得,在可以列出來:1.loading介面圖片突出撲克元素,背景以綠色百家樂桌面加籌碼,整個圖片圍繞百家樂主題展開.不足之處是感覺沒有
K12教育產品競品分析(VIPKID、DaDaABC) PPT
最近兩年,K12教育備受資本青睞,多家平臺陸續傳出融資訊息,融資金額也不斷打破記錄。K12教育類應用使用者規模達2.19億,使用者日均使用24.21分鐘,並且仍呈平穩上升態勢。 雖然形勢一片大好,但行業內的競爭卻越發激烈,下面分享一篇K12教育競品分析PPT。 PPT貢獻自產品大牛網
競品分析全覽
前篇:前期準備 1. 競品選擇 1.1 競品分級 競品分級是以我們自身的產品為中心, . 重要競品, 遠高於我們的產品; . 核心競品, 高於並且非常有競爭力的產品; . 一般競品, 在我們之下或者還不如我的產品。 競品分級的目的,
產品經理做競品分析的方法論(分享個人筆記)
剛做了一個競品分析的方法總結,希望對別人有幫助,競品分析算是一項基本功對於一個合格職業產品汪! 1、 我們為什麼要做競品分析? 一是為了對比學習,二是驗證。在對比中取長補短,在驗證中確定市場。 2、 誰是競品? 從競爭的點出發,網際網路產品不
資料標註平臺—競品分析
前言:排版真的很醜,我已經盡力了…… 以後相關產品的文章,可能不會在部落格園釋出,我會寫在知乎(最近決定要在知乎裝逼),有興趣的朋友可以關注一下:https://www.zhihu.com/people/zhang-cheng-liang-64。祝各位19年快樂! 一、專案背景 在進行使用者訪
餐飲外賣競品分析
根據報告報告顯示,2017年第4季度中國網際網路餐飲外賣市場整體交易規模達677.3億元人民幣,環比上漲16.2%。與去年同期相比,增幅高達81.8%。2017年中國網際網路第三方餐飲外賣市場使用者規模為3億人,環比增長率為15.4%,增速放緩。(資料來源:Analy