成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

wqj97 / 2619人閱讀

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

前言

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

簡介

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

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

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

運(yùn)行

整個(gè)FlowDroid最頂層的類便是soot.jimple.infoflow.android.SetupApplication,大部分的設(shè)置與運(yùn)行都可以通過操作這個(gè)類的實(shí)例進(jìn)行。SetupApplication既可以在調(diào)用runInfoflow()時(shí)傳入配置參數(shù),也可以在初始化SetupApplication時(shí)或初始化后傳入配置參數(shù)。SetupApplication的初始化函數(shù)以及runInfoflow函數(shù)有多種不同參數(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點(diǎn)與sink點(diǎn)的聲明文件,后文會作說明
conf.getAnalysisFileConfig().setSourceSinkFile(sourceSinkFilePath);
// apk中的dex文件有對方法數(shù)量的限制導(dǎo)致實(shí)際app中往往是多dex,不作設(shè)置將僅分析classes.dex
conf.setMergeDexFiles(true);
// 設(shè)置AccessPath長度限制,默認(rèn)為5,設(shè)置負(fù)數(shù)表示不作限制,AccessPath會在后文解釋
conf.getAccessPathConfiguration().setAccessPathLength(-1);
// 設(shè)置Abstraction的path長度限制,設(shè)置負(fù)數(shù)表示不作限制,Abstraction會在后文解釋
conf.getSolverConfiguration().setMaxAbstractionPathLength(-1);
SetupApplication setup = new SetupApplication(conf);
// 設(shè)置Callback的聲明文件(不顯式地設(shè)置好像FlowDroid會找不到)
setup.setCallbackFile("res/AndroidCallbacks.txt");
setup.runInfoflow();
關(guān)于Source、Sink

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

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

關(guān)于代碼中的一些其他說明
Callback

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

AccessPath與Abstraction

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

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

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

相關(guān)文章

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

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

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

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

    ?。琛?/span> 評論0 收藏0
  • 端到端測試神器 cypress 淺入淺出

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

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

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

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

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

    李昌杰 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<