靜態代碼分析工具列表分析——代碼分析工具列表(30款工具)

IT技術之家 IT技術之家 2017-09-21

本文是一個靜態代碼分析工具的清單,共有30個工具。包括4個.NET工具、2個Ada工具、7個C++工具、4個Java工具、2個JavaScript工具、1個Opa工具、2個Packaging工具、3個Perl工具、1個Python工具、1個嵌入式工具、2個二進制工具、1個靜態分析工具

Fortify SCA

Fortify SCA 是一個靜態的、白盒的軟件源代碼安全測試工具。它通過內置的五大主要分析引擎:數據流、語義、結構、控制流、配置流等對應用軟件的源代碼進行靜態的分析,分析的過程中與它特有的軟件安全漏洞規則集進行全面地匹配、查找,從而將源代碼中存在的安全漏洞掃描出來,並給予整理報告。掃描的結果中不但包括詳細的安全漏洞的信息,還會有相關的安全知識的說明,以及修復意見的提供

官網:https://fortify.com/

  • Coverity源代碼缺陷檢測工具

  • Coverity能夠準確識別出研發工作流中的嚴重質量缺陷,並且提供可行的修正建議來降低軟件錯誤和安全漏洞的修復成本、時間和風險。Coverity可使用高級源碼分析技術在非常複雜的C、C++、Java、Objective-C、Javascript及C#碼庫中發現最嚴重的質量缺陷和安全漏洞, Coverity是第一個能夠快速、準確分析當今的大規模(幾百萬、甚至幾千萬行的代碼)、高複雜度代碼的工具,Coverity解決了影響源代碼分析有效性的很多關鍵問題:構建集成、編譯兼容性、高誤報率、有效的錯誤根源分析等。

    官網:https://coverity.com

    ProteCode二級制代碼掃描工具

    ProteCode可對應用程序和固件進行掃描,並列出所含代碼和庫文件相關的軟件許可及對應的已知漏洞。ProteCode不僅能揭示開源的和私有的第三方代碼和庫文件,還能夠枚舉出對應的CVE(Common Vulnerabilities and Exposures)標識符以及相關的軟件許可證。將編譯好的二進制文件上傳(不需要源代碼),僅需花費幾分鐘時間就可以揭示出你所需要的軟件內部運行的信息。解決方案有助於研發團隊安全無誤地使用和管控第三方代碼。在開發和測試流程或法律合規部門管理由於使用第三方代碼所產生的風險,其中包括開源、內部開發、外包和商業代碼。

    Hex-Rays二進制分析工具

    ­­ 荷蘭Hex-Rays公司的二進制分析工具能夠將二進制代碼轉換成分析員們容易可以讀取和修改的文本,幫助分析員分析和驗證的程序,更快捷的判斷軟件的有用性和可用性,定位安全問題。

    .NET

  • .NET Compiler Platform(代號 Roslyn)

  • 官網:http://www.splint.org/

  • GitHub:https://github.com/ravenexp/splint

  • 官網:http://git.kernel.org/cgit/devel/sparse/sparse.git/

  • Git:https://git-scm.com/

  • GitHub:https://github.com/sparsecli/sparse

  • 官網:http://www.unix.com/man-page/FreeBSD/1/lint

  • 官網:http://frama-c.com/

  • GitHub:https://github.com/Frama-C/Frama-C-snapshot

  • 教程:http://frama-c.com/acsl_tutorial_index.html

  • 一個基於抽象解釋器的分析器,旨在驗證不存在運行時錯誤;

  • 一個基於最弱前提運算的程序防護框架;

  • 一個程序切片器;

  • 一個驗證臨時特性的工具;

  • 幾個代碼開發和相關性分析的工具。

  • 最新版本:1.0.6

  • 發佈日期:2016年9月27日

  • 官網:http://coccinelle.lip6.fr/

  • GitHub:https://github.com/coccinelle/coccinelle

  • 官網:https://pypi.python.org/pypi/cpplint

  • GitHub:https://github.com/google/styleguide/tree/gh-pages/cpplint

  • 官網:http://forge.ispras.ru/projects/blast/

  • 文件:http://forge.ispras.ru/projects/blast/files

  • 版本庫:http://forge.ispras.ru/projects/blast/repository

  • 官網:http://www.lix.polytechnique.fr/Labo/Sylvie.Putot/fluctuat.html

  • 最新版本:1.18r9

  • 發佈日期:2016年11月10日

  • 官網:http://www.adalog.fr/en/adacontrol.html

  • Sourceforge:https://sourceforge.net/projects/adacontrol/

  • 官網:http://stylecop.codeplex.com/

  • GitHub:https://github.com/StyleCop

  • 最新版本:10.0

  • 發佈日期:2010年6月18日

  • 官網:https://www.microsoft.com/en-us/download/details.aspx?id=6544

  • GitHub:https://github.com/DrShaffopolis/FxCop

  • 文檔:https://msdn.microsoft.com/en-us/library/dd264939(v=VS.100).aspx

  • 官網:https://marketplace.visualstudio.com/items?itemName=sergeb.CodeItRight

  • GitHub:https://github.com/dotnet/roslyn

  • Visual Studio博客介紹:

  • https://blogs.msdn.microsoft.com/visualstudio/2011/10/19/introducing-the-microsoft-roslyn-ctp/

  • Roslyn提供有著豐富的代碼分析API的開源C#和Visual Basic編譯器。它可以使用這些Visual Studio裡的API生成代碼分析工具。

    官網:https://roslyn.codeplex.com/

  • CodeIt.Right

  • CodeIt.Right提供一個快速的自動的方法確保你的源代碼遵循預先定義的設計和風格準則。它通過以下方式使靜態代碼分析進入更高水平:即時代碼審查、及早發現問題、編碼原則、自動代碼審查、集成StyleCop檢查、報告。

  • FxCop

  • 一個實現.NET靜態代碼分析的圖形用戶接口和命令行工具。

    FxCop提供幾百種規則實現各種類型的分析。包括:設計、全球化、互操作性、可維護性、靈活性、命名、性能、可移植性、可靠性、安全性,利用率。FxCop的功能完全集成到Visual Studio2010的高級版和最終版中。

  • StyleCop

  • StyleCop分析C#源代碼,強制執行一系列風格和一致性規則。可以在Visual Studio內部運行,也可以集成到MSBuild項目中。StyleCop還可以被集成到很多第三方開發工具中。

    核心原則:

    StyleCop通過為C#代碼強制執行一組通用風格規則來體現價值。StyleCop將繼續利用一個連續的帶有允許的最小規則配置的規則集。開發者可以實現他們自己的規則,只要他們願意。

    StyleCop擁有和Visual Studio、MSBuild,TFS等無縫集成的能力。開發者可以自由執行自定義代碼,將StyleCop集成到其他開發和工具環境,如SDK文檔中所述。

  • Ada

  • AdaControl

  • AdaControl是一個免費的(授權)工具,可以檢測Ada程序中使用的各種結構。它的首要目標是控制風格和程序規則的正確使用,但是它也可以作為一個強大的工具搜索編程風格或設計模式的各種形式。搜索的元素範圍有非常簡單的,比如某種實體、聲明或語句的出現,也有非常複雜的,比如驗證遵守了某種編程模式。

  • Fluctuat

  • Fluctuat是一抽象解釋器,以數字編程(C或Ada)靜態分析器為基礎,由CEA-LIST的ME ASI(ModElling and Analysis of Systems in Interaction)實驗室在2001年開發。給出一組輸入和參數,可能帶有不確定因素,它會考慮這個程序所有可能的行為,無論是真實的還是有限精度下,並描述這些不同的特性。

  • C,C++

  • BLAST

  • BLAST(Berkeley Lazy Abstraction Software verification Tool伯克利惰性抽象軟件驗證工具)是一個C語言靜態軟件驗證工具,它可以解決可達性問題,例如是否可以通過一個有效的執行命令從入口點(主程序)到達給定的程序位置。

    安全屬性的驗證可能降低到可達性,BLAST常常用於核查Linux驅動程序驗證項目。

    可以在以下網站下載Linux系統的BLAST源代碼或二進制版本。

  • Cpplint

  • 這個項目繼續開發cpplint,它是一個C++風格檢查器,遵循Google的C++風格指南。提供的cpplint 為PYPI(Python Package Index)包,並添加了幾個功能和修復程序。它是google/styleguide的一個分支,希望未來可以合併在一起。

  • Coccinelle

  • Coccinelle是一個程序匹配和轉換引擎。它提供語意修補程序以便在C代碼中指定期望的匹配和轉換。Coccinelle初始的目的是完成Linux的間接開發。這種開發包括客戶端代碼中所需要的改變,目的是響應庫應用程序接口變化。還可能包括一些修改,例如重命名一個函數、添加一個函數參數,它的值以某種方式被上下文決定、重組數據結構。除了間接開發,Coccinelle還可以成功的尋找和修復系統代碼中的錯誤。

  • Frama-C

  • Frama-C是一個平臺,致力於分析用C語言寫的源代碼。

    Frama-C集成幾個分析技術到一個協作平臺中。其包含一組提供核心功能的內核(例如一個C程序的抽象化語法樹)和一組被稱為插件的分析器。這些插件可以建立在平臺中其他插件的計算結果之上。

    歸功於這個方法,Frama-C能提供一些複雜的工具,包括:

    這些插件共享常見的語言,可以通過ASCL(ANSI/ISO C Specification Language)特性交換信息,還可以通過它們的APIs集合信息。

  • Lint

  • Lint實用程序嘗試檢測命名為C程序文件的功能,可能是錯誤,也可能是不可移植,或者是浪費。同時它也執行比C編譯器更嚴格的類型檢查。Lint實用程序運行C預處理器作為它的第一階段,帶有這個預處理器的標誌“lint”,其被定義為允許某些有問題的代碼被lint更改或跳過。因此,對於所有被lint檢查的代碼來說這個標誌應該被認為是一個預留字。

  • Sparse

  • Sparse是一個源文件智能語法分析器:它不是編譯器(雖然它可以作為一個前端編譯器使用),也不是預處理器(雖然它包含部分預處理語句)。

    這意味著它是一個小而簡單的庫。內容太少是它容易使用的部分原因。它只有一個任務,就是為任意用戶創造語法分析樹從而進行進一步的分析。它不是分詞器,也不是那些通用的上下文無關的語法分析器。事實上,上下文(語意)就是我想說的不僅解決分組標記,而且還有_type_在組中的含義。

    語法分析完成以下5個階段:完整文件標記化、預處理(可以導致另一個文件進入標記階段)、語法分析、延長性評估、內聯函數擴展和簡化樹。

  • Splint

  • Splint是一個輔助註釋輕量級靜態檢查工具,檢查C程序的安全漏洞和代碼錯誤。作為一個更好的lint,使用Splint毫不費力。如果投入額外的工作添加註釋到程序中,Splint可以執行比任何標準lint能完成的更強的檢查。