ApplicationInspector:一款功能强大的软件源代码分析与审计工具

ApplicationInspector是一款功能强大的软件源代码分析与审计工具,它可以帮助研究人员识别和发现目标应用程序中的公众周知的功能以及源代码中有意思的特性,并清楚目标应用的本质特征以及实现的功能。

ApplicationInspector跟传统静态分析工具不同的是,它不会尝试去识别目标应用模式的好与坏,它只会报告它所检测到的应用程序模式,而且它会使用超过400种规则来完成检测,其中包含可能会影响应用程序安全性的一些模式,例如所使用的加密算法等等。ApplicationInspector会直接检查目标应用程序的源代码,而不是选择信任已有文档或安全建议,这对于分析开源项目或其他组件来说,能够提升准确率。

ApplicationInspector支持扫描各种编程语言,其中包括C、C++、C、Java、JavaScript、HTML、Python、Objective-C、GO、Ruby以及PowerShell等等,并且还支持扫描混合语言的文件。除此之外,ApplicationInspector还支持HTML、JSON和text等输出格式,默认输出报告格式为HTML。

值得一提的是,ApplicationInspector提供了一个可过滤的指示器,以此来提供最小化的误报率,并帮助研究人员自定义默认规则以及条件匹配逻辑。

ApplicationInspector的功能如下图所示:

工具下载

广大研究人员可以使用下列命令将项目源 码克隆至本地:

git clone https://github.com/microsoft/ApplicationInspector.git

项目构建

项目的源码构建需要安装.NET Core 3.0,并使用标准的dotnet构建命令直接在项目根目录运行。

框架依赖:

dotnetbuild -c Release

目标平台构建:

dotnet publish -cRelease-r win-x86

dotnetpublish -cRelease-r linux-x64

dotnetpublish -cRelease-r osx-x64

工具使用

如需使用ApplicationInspector,可以直接下载对应的ApplicationInspector版本。如果你是用的是.NET Core版本,你还需要安装.NET Core v3.0或更高版本。

ApplicationInspector是一款基于命令行的工具,因此我们可以直接在Windows、Linux或macOS平台上通过命令行终端来运行该工具:

> dotnet AppInspector.dlloron*Windows* simply AppInspector.exe<command><options>

Microsoft Application Inspector1.0.25

ApplicationInspector1.0.25

(c) Microsoft Corporation. All rights reserved

ERROR(S): 

Noverbselected.

analyze        Inspectsourcedirectory/file/compressedfile(.tgz|zip) against defin

ed characteristics

tagdiff        Compares uniquetagvaluesbetween twosourcepaths 

tagtest        Test presence of smallersetorcustomtagsinsource(compareorveri

fy modes)

exporttags    Export default unique ruletagstoviewwhat features maybedetected

verifyrules    Verify rulessyntaxisvalid

help    Display more informationonaspecificcommand

version    Displayversioninformation

使用样例

命令行帮助信息:

Usage: dotnet AppInspector.dll [arguments] [options]

dotnet AppInspector.dll -description of available commands 

dotnet AppInspector.dll<command>-optionsdescriptionforagivencommand

分析命令:

Usage: dotnet AppInspector.dll analyze [arguments] [options]

Arguments:

-s, --source-path Required. Path to source code to inspect (required)

-o, --output-file-path Path to output file. Ignored with -f html option which

auto creates output.html

-f, --output-file-format Output format [html|json|text]. Default = html

-e, --text-format Match text format specifiers 

-r, --custom-rules-path Custom rules path

-t, --tag-output-only Output only contains identified tags. Default = false

-i, --ignore-default-rules Ignore default rules bundled with application. Default 

= false

-d, --allow-dup-tags Output only non-unique tag matches. Default = false

-c, --confidence-filters Output only matches with confidence [high|medium|low]. 

Default = high,medium

-k, --file-path-exclusions Exclude source files [none|<list>]. Default = sample,ex

ample,test,docs,.vs,.git

-x, --console-verbosity Console verbosity [high|medium|low|none]. Default = me

dium

-l, --log-file-path Log file path. Default is <application path>/log.txt

-v, --log-file-level Log file level [Debug|Info|Warn|Error|Fatal|Off]. Defa

ult = Error

扫描一个项目目录,不需要输出“output.html”文件(默认):

dotnet AppInspector.dllanalyze-s /home/user/myproject

添加自定义扫描规则:

dotnet AppInspector.dllanalyze-s /home/user/myproject -r /my/rules/directory-r /my/o

ther/rules

JSON格式输出:

dotnet AppInspector.dllanalyze-s /home/user/myproject -fjson

Tagdiff命令

如果你需要使用不同的标签(功能)来分析、比对和报告两个不同的项目,比如说两个不同版本的项目,你可以使用tagdiff命令:

Usage: dotnet AppInspector.dll tagdiff [arguments] [options]

Arguments:

--src1 Required. Source 1 to compare (required)

--src2 Required. Source 2 to compare (required

-t, --test-type Type of test to run [equality|inequality]. Default = e

quality

-r, --custom-rules-path Custom rules path

-i, --ignore-default-rules Ignore default rules bundled with application. Default

= false

-o, --output-file-path Path to output file

-x, --console-verbosity Console verbosity [high|medium|low]. Default = medium

-l, --log-file-path Log file path

-v, --log-file-level Log file level [error|trace|debug|info]. Default = err

or

查看不同项目对比结果的命令如下:

dotnet AppInspector.dll tagdiff --src1/home/user/project1 --src2 /home/user/project2

基本使用1:

dotnet AppInspector.dll tagdiff --src1 /home/user/project1 --src2 /home/user/project2 -

t equality

基本使用2:

dotnet AppInspector.dll tagdiff --src1/home/user/project1 --src2 /home/user/project2 -

t inequality

TagTest命令

该命令用于识别目标项目中是否存在指定的一系列规则,比如说,你想知道目标应用中是否使用了某个加密算法,就可以使用该命令了。

命令参数如下:

Usage: dotnet AppInspector.dll tagtest [arguments] [options

Arguments:

-s, --source-path Required. Source to test (required)

-t, --test-type Test to perform [rulespresent|rulesnotpresent]. Defaul

t = rulespresent

-r, --custom-rules-path Custom rules path

-i, --ignore-default-rules Ignore default rules bundled with application. Default

= true

-o, --output-file-path Path to output file

-x, --console-verbosity Console verbosity [high|medium|low]. Default = medium

-l, --log-file-path Log file path

-v, --log-file-level Log file level

使用下列命令即可查看目标项目中是否存在某规则集:

dotnet AppInspector.dll tagtest -s/home/user/project1 -r /home/user/myrules.json

基本使用1:

dotnet AppInspector.dll tagtest -s/home/user/project1 -r /home/user/myrules.json -t ru

lespresent

基本使用2:

dotnet AppInspector.dll tagtest -s/home/user/project1 -r /home/user/myrules.json -t ru

lesnotpresent

ExportTags命令

该命令可以输出指定标签的规则集模式:

Usage: dotnet AppInspector.dll exporttags [arguments] [options]

Arguments:

-r, --custom-rules-path Custom rules path

-i, --ignore-default-rules Ignore default rules bundled with application. Default

= false

-o, --output-file-path Path to output file

-x, --console-verbosity Console verbosity [high|medium|low]. Default = medium

输出默认规则标签至终端:

dotnetAppInspector.dll exporttags

使用输出文件:

dotnet AppInspector.dll exporttags -o/home/user/myproject/exportags.txt

使用自定义规则以及输出文件:

dotnet AppInspector.dll exporttags -r /home/user/myproject/customrules -o /hom/user/my

project/exportags.txt

Verify命令

该命令可以验证规则集是否兼容,并保证导入和分析时不会发生错误:

Usage: dotnet AppInspector.dll verifyrules [arguments]

Arguments:

-r, --custom-rules-path Custom rules path

-i, --ignore-default-rules Ignore default rules bundled with application. Default

= false

-o, --output-file-path Path to output file、

-x, --console-verbosity Console verbosity [high|medium|low]. Default = medium.

验证默认规则:

dotnetAppInspector.dll verifyrules

使用自定义规则:

dotnet AppInspector.dll verifyrules -r/home/user/myproject/customrules -i

每天都会有更新看到的朋友可以点波关注,对下面图片感兴趣的可以点击【Java】

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容