亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

淺入淺出FlowDroid(一): 簡介&基本使用

wqj97 / 2796人閱讀

摘要:后文將圍繞做一些介紹。盡管如此,的使用對新手而言仍然充滿了困難。本系列文章基本為個人見解,難免有錯誤與誤解,如有客觀錯誤歡迎提出。

前言

說到Android的污點分析框架,網(wǎng)上的搜索結(jié)果大多指向靜態(tài)的FlowDroid與動態(tài)的TaintDroid。盡管由于加固、混淆等技術使得針對Android的靜態(tài)分析越來越困難,但靜態(tài)分析的無先驗分析能力無法被動態(tài)分析取代,使得靜態(tài)分析仍有發(fā)揮空間。后文將圍繞FlowDroid做一些介紹。
值得注意的是,雖然FlowDroid還在被Secure Software Engineering Group維護更新,但其核心算法仍然是2014的版本。在各大會議上已經(jīng)提出了數(shù)十種新的靜態(tài)污點分析算法,相比FlowDroid在一些數(shù)據(jù)集或是DroidBench上有著更快的運行速度以及更優(yōu)的精準度。但FlowDroid仍然是公共資源中可獲取的靜態(tài)污點分析工具的唯一選擇,因為很多paper提供的源代碼幾乎沒有注釋與文檔,導致使用極其困難;另外科研人員往往僅在有限的測試集上進行了運行,所以去使用這樣的程序不可避免的會遇到Bug。相比之下,F(xiàn)lowDroid作為被持續(xù)維護的一款框架,其穩(wěn)定性上具備了一定的保證,同時其底層的Soot框架強大的功能與較為完善的文檔,使得FlowDroid上手難度相對較低。
盡管如此,F(xiàn)lowDroid的使用對新手而言仍然充滿了困難。網(wǎng)絡上FlowDroid的教程大多是一些cmd命令的說明,而我需要將其作為程序的一部分,甚至還需要對源代碼進行一些修改,導致我不得不花費大量的時間去閱讀源代碼以知悉其中的一些細節(jié)以及一些未被文檔直接提及的自定義接口。因此,我希望將閱讀過程中看到的東西做記錄與分享,以便有需要的人可以省去一些功夫。
本系列文章基本為個人見解,難免有錯誤與誤解,如有客觀錯誤歡迎提出。

簡介

FlowDroid是一款使用Java實現(xiàn)的針對Android的靜態(tài)污點分析框架,發(fā)表于PLDI"2014(論文鏈接),截止撰文時間在Google Scholar上顯示已有1200+的引用,目前為Android靜態(tài)污點分析的主流框架,代碼開源并提供于GitHub(倉庫鏈接)。
FlowDroid在數(shù)據(jù)流分析部分并無太大的創(chuàng)新,主要基于發(fā)表在POPL"1995上的IFDS算法(論文鏈接)實現(xiàn),其主要貢獻在于針對Android程序的LifeCycle、Callback等特點做了各種各樣的處理,感興趣的可以去閱讀論文進行查閱。

基本使用 環(huán)境配置

首先自然是Java的配置,如果沒有配置并且不會配置,請查找網(wǎng)上其他教程,本文不再贅述。
FlowDroid的配置方法有兩種,可以直接下載相關jar包,也可以使用maven配置依賴。jar包可以去FlowDroid的GitHub上release頁面進行下載,僅需soot-infoflow-android-classes.jar和soot-infoflow-classes.jar兩個文件即可,另外去Soot的倉庫下載包含了heros與jasmin的sootclasses-trunk-jar-with-dependencies.jar,將上述三個包加入項目依賴便完成了FlowDroid的配置。關于如何將jar包加入依賴,如有困惑請根據(jù)Java編程環(huán)境自行查詢。

運行

整個FlowDroid最頂層的類便是soot.jimple.infoflow.android.SetupApplication,大部分的設置與運行都可以通過操作這個類的實例進行。SetupApplication既可以在調(diào)用runInfoflow()時傳入配置參數(shù),也可以在初始化SetupApplication時或初始化后傳入配置參數(shù)。SetupApplication的初始化函數(shù)以及runInfoflow函數(shù)有多種不同參數(shù)類型的實現(xiàn),可以查閱源碼后根據(jù)情況選擇,這里僅提供我自己使用的一種方式:

InfoflowAndroidConfiguration conf = new InfoflowAndroidConfiguration();
// androidDirPath是你的android sdk中platforms目錄的路徑
conf.getAnalysisFileConfig().setAndroidPlatformDir(androidDirPath);
// apkFilePath是你要分析的apk的文件路徑
conf.getAnalysisFileConfig().setTargetAPKFile(apkFilePath);
// sourceSinkFilePath是source點與sink點的聲明文件,后文會作說明
conf.getAnalysisFileConfig().setSourceSinkFile(sourceSinkFilePath);
// apk中的dex文件有對方法數(shù)量的限制導致實際app中往往是多dex,不作設置將僅分析classes.dex
conf.setMergeDexFiles(true);
// 設置AccessPath長度限制,默認為5,設置負數(shù)表示不作限制,AccessPath會在后文解釋
conf.getAccessPathConfiguration().setAccessPathLength(-1);
// 設置Abstraction的path長度限制,設置負數(shù)表示不作限制,Abstraction會在后文解釋
conf.getSolverConfiguration().setMaxAbstractionPathLength(-1);
SetupApplication setup = new SetupApplication(conf);
// 設置Callback的聲明文件(不顯式地設置好像FlowDroid會找不到)
setup.setCallbackFile("res/AndroidCallbacks.txt");
setup.runInfoflow();
關于Source、Sink

污點分析中的source點表示污點分析的起始點,而sink點表示污點分析的結(jié)束點。換言之,F(xiàn)lowDroid在“掃描”這個apk后,會從source點開始分析數(shù)據(jù)流,當數(shù)據(jù)流“流到”sink點時將其標注。FlowDroid中的source與sink均為類方法,在soot-infoflow-android下有提供一份SourcesAndSinks.txt的文件,是FlowDroid當時使用的一些可能涉及到訪問隱私數(shù)據(jù)的api,從里面很容易看出聲明文件的格式:

每一行作為獨立的聲明,%開頭的表示注釋,可以根據(jù)應用需求自行添加刪減Source與Sink的聲明。

關于代碼中的一些其他說明
Callback

因為Android中系統(tǒng)級的Callback并不會出現(xiàn)顯式地進行回調(diào)方法的調(diào)用,所以如果需要分析Callback方法需要在聲明文件中將其聲明,同樣在soot-infoflow-android下有提供一份AndroidCallbacks.txt文件,里面是一些常見的原生回調(diào)接口或類,如需添加參照格式即可。

AccessPath與Abstraction

AccessPath是數(shù)據(jù)流分析中一個專用術語,而Abstraction是FlowDroid用來表示污點分析在一個代碼語句的結(jié)果的類。關于它們的具體說明會在后面的文章中展開,這里僅需一個宏觀的了解,那兩個設置的數(shù)值越小,分析可能越快但效果可能越差,反之同理。

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/75836.html

相關文章

  • SegmentFault 技術周刊 Vol.16 - 淺入淺出 JavaScript 函數(shù)式編程

    摘要:函數(shù)式編程,一看這個詞,簡直就是學院派的典范。所以這期周刊,我們就重點引入的函數(shù)式編程,淺入淺出,一窺函數(shù)式編程的思想,可能讓你對編程語言的理解更加融會貫通一些。但從根本上來說,函數(shù)式編程就是關于如使用通用的可復用函數(shù)進行組合編程。 showImg(https://segmentfault.com/img/bVGQuc); 函數(shù)式編程(Functional Programming),一...

    csRyan 評論0 收藏0
  • vuex淺入淺出

    摘要:來自不同視圖的行為需要變更同一狀態(tài)。圖解后端的行為,響應在上的用戶輸入導致的狀態(tài)變化。中的非常類似于事件每個都有一個字符串的事件類型和一個回調(diào)函數(shù)。 什么是Vuex? Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲管理應用的所有組件的狀態(tài),并以相應的規(guī)則保證狀態(tài)以一種可預測的方式發(fā)生變化。 Vuex采用和Redux類似的單向數(shù)據(jù)流的方式來管理數(shù)據(jù)。用戶...

    琛h。 評論0 收藏0
  • 端到端測試神器 cypress 淺入淺出

    摘要:我之前寫過關于的文章,,最近在工作中用到比較多了,頓時覺得確實是比較優(yōu)秀的一個。 我之前寫過關于cypress的文章,https://segmentfault.com/a/11...,最近在工作中用到cypress比較多了,頓時覺得cypress確實是比較優(yōu)秀的一個。 1. 軟件安裝. 2. 安裝cypress 安裝cypress客戶端:http://download.cypress...

    CarlBenjamin 評論0 收藏0
  • [譯]淺入淺出Monads

    摘要:接受另一個函數(shù)作為參數(shù),然后用接受的這個新函數(shù)處理,將結(jié)果再次傳給,最后將實例化的新對象返回??罩禉z查就是個不錯的例子這個實現(xiàn)里,只在為合法值非空時,傳入。但不論怎么變化,她們也都和一樣遵守上面提到的規(guī)則。 大多數(shù)關于monad的教程都和老太太的裹腳布一樣,又臭、又長,說不清、道不明。當然我也不偉大,沒法保證我寫的一定更明了,更生動,甚至更屌?不過我至少可以確定,我這篇更簡潔。浪費不了...

    philadelphia 評論0 收藏0
  • Web Session 淺入淺出

    摘要:通過瀏覽器的,可以看到此次會話的請求內(nèi)容和響應內(nèi)容。是協(xié)議的一部分。真實的產(chǎn)品,一般是創(chuàng)建一個保證唯一的,不易猜測出來的字符串。因此需要數(shù)據(jù)持久化的多提供者的方案。 使用過幾種Web App開發(fā)語言和框架,都會接觸到Session的概念。即使是一個簡單站點訪問計數(shù)的功能,也常常使用Session來實現(xiàn)的。其他常用的領域還有購物車,登錄用戶等。但是,對Session一直是一知半解,知其然...

    李昌杰 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<