電子工程網(wǎng)
標題:
聯(lián)璧港:如何自動(dòng)識別APK中使用了哪些SDK
[打印本頁(yè)]
作者:
聯(lián)璧港
時(shí)間:
2017-10-12 13:01
標題:
聯(lián)璧港:如何自動(dòng)識別APK中使用了哪些SDK
一、準備工作
由于后端技術(shù)我熟悉的是JAVA,所以這個(gè)程序我是使用JAVA寫(xiě)的。寫(xiě)工具之前需要先準備以下工具:
SpringMVC
:Spring MVC框架是有一個(gè)MVC框架,通過(guò)實(shí)現Model-View-Controller模式來(lái)很好地將數據、業(yè)務(wù)與展現進(jìn)行分離。
Hibernate
:是一個(gè)基于元數據的輕量級的ORM框架。
Mysql
:用來(lái)存儲APP信息以及第三方SDK信息
APKTool
:反編譯APK的利器
HttpClient
:是用來(lái)提供高效的、最新的、功能豐富的支持 HTTP 協(xié)議的客戶(hù)端編程工具包,并且它支持 HTTP 協(xié)議最新的版本和建議。
HTMLparser
:HTML解析工具
SAX
:SAX(simple API for XML)是一種XML解析的替代方法。相比于DOM,SAX是一種速度更快,更有效的方法。
二、設計思路
以下只介紹這個(gè)工具的設計思路,沒(méi)有貼具體代碼,思路清晰以后寫(xiě)代碼很簡(jiǎn)單。
1.
數據庫設計
我們采集數據就需要設計數據庫表,這個(gè)很簡(jiǎn)單,我設計了6個(gè)表:
tools_app_category
:保存APP的分類(lèi)信息
tools_app_info
:保存APP基本信息
tools_app_packages
:保存APP包名信息及SDK信息
tools_app_packages_relat
:APP和第三方SDK關(guān)聯(lián)表
tools_app_perm
:APP權限信息表
tools_app_perm_relat
:APP與權限的關(guān)聯(lián)表
2.
獲取APP安裝包
各大應用市場(chǎng)都有TOP xx應用列表,這些APP一般是用戶(hù)使用比較多APP,這些APP使用的第三方SDK一般是比較成熟的SDK,值得我們是參考。
我選擇從小米應用市場(chǎng)下載熱門(mén)APP作為數據分析樣本,選擇應用排行靠前的1000余款APK,我只選擇分析應用類(lèi)APP,把游戲類(lèi)的過(guò)濾掉了。
應用排行榜界面的url格式是這種:http://app.mi.com/topList?page=xx,使用HttpClient獲取這些頁(yè)面網(wǎng)頁(yè)源碼,再使用HTMLparser解析網(wǎng)頁(yè)源碼獲取每一個(gè)APP的詳情url地址,APP詳情地址的格式是這種:http://app.mi.com/details?id=app包名,然后在A(yíng)PP詳情頁(yè)面解析出APK的下載地址并下載該APK。除了APK的下載地址以外還可以通過(guò)這個(gè)界面獲取APP的其他基本信息,如有需要可以保存到數據庫,我的是存在tools_app_info表中。
3.
反編譯
APK
下載完APK以后要做的工作就是反編譯APK了,這里我們就要用到搶到的APKTool。這一步其實(shí)很簡(jiǎn)單,大家知道JAVA里面可以直接運行腳本命令的,使用一下命令即可反編譯APK。
Runtime.getRuntime().exec("java -jar apktool.jar d -f"+apkPath+" -o "+outPath)
這里可能有人會(huì )問(wèn),反編譯出來(lái)的是smali文件,有什么用處呢?反編譯以后有兩部分內容對我們有用smali為前綴的目錄以及AndroidManifest.xml。通過(guò)AndroidManifest.xml可以獲取apk的基本信息,如有需要可以使用XML解析工具解析,我這里是使用SAX計息AndroidManifest.xml并且獲取每個(gè)APP的進(jìn)程數、廣播接收器的數量以及權限等信息。以smali為前綴的目錄是我們主要使用的數據。大家知道每一個(gè)SDK的包名基本上是唯一的,很少有重復,而java文件的包名和目錄名是有對應關(guān)系的,通過(guò)獲取smali文件所在的路徑即可知道這個(gè)APK的所有包名。就這樣把APK的包名全部收集起來(lái)存放到數據庫中備用。這里大家要注意的是在收集包名的時(shí)候可以做一下初步篩選,把一些沒(méi)有用的或者是APK本身的包名直接過(guò)濾,可提高采集效率并且避免采集一些垃圾數據。把這些信息存在tools_app_packages表中。
4.
關(guān)聯(lián)
SDK
這一步真的是苦力活,是一不干著(zhù)想吐的活,是這個(gè)SDK采集過(guò)程中唯一需要人工完成的。上一步我們已經(jīng)搜集了所有APP使用的包名,這一步我們需要檢查這些包名,如果是非第三方SDK則刪掉,如果是SDK則備注SDK名稱(chēng)以及備注,方便后續查找。
5.
前端界面
后臺已經(jīng)搭建好了,大家可以根據需要稍微完善,比如我們已經(jīng)記錄了每個(gè)app的下載地址,可以定時(shí)更新,F在我們這里要做的就是開(kāi)發(fā)一個(gè)前端界面,用于可視化操作查詢(xún),這一部分沒(méi)什么講的,就是寫(xiě)接口調接口而已,直接上效果圖:
搜索界面
聯(lián)璧港提供免費API,SDK平臺。
官網(wǎng):http://lbp.lincomb.com/
歡迎光臨 電子工程網(wǎng) (http://selenalain.com/)
Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页