精华内容
参与话题
问答
  • 静态分析

    2016-06-20 12:15:41
    程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码...
    程序静态分析(Program
     Static Analysis)是指在不运行代码的方式下,通过词法分析语法分析控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。目前静态分析技术向模拟执行的技术发展以能够发现更多传统意义上动态测试才能发现的缺陷,例如符号执行、抽象解释、值依赖分析等等并采用数学约束求解工具进行路径约减或者可达性分析以减少误报增加效率。目前的静态分析工具,无论从科研角度还是实用性角度还有很大的提高余地,国际最好分析工具误报率在5-10%之间,能够报出的缺陷种类也仅有几百种。我国较好静态分析工具较少,一些高校正在致力于在此方面的研究和开发(成果较突出的如北京大学等)目前来看与国外还有差距。
    
    展开全文
  • 白盒测试方法静态分析 我不断收到来自静态分析供应商的电子邮件,告诉我为什么我需要购买他们的技术。 最近,我收到了一封电子邮件,说明我的团队如何使用静态分析工具来完成令人印象深刻的事情,例如“在数分钟内...

    白盒测试方法静态分析

    我不断收到来自静态分析供应商的电子邮件,告诉我为什么我需要购买他们的技术。 最近,我收到了一封电子邮件,说明我的团队如何使用静态分析工具来完成令人印象深刻的事情,例如“在数分钟内测试数百万条复杂的代码行”。

    等一下,pardner。 对您的代码运行静态分析工具以强制实施良好的编码习惯,并检查常见的编码错误和违反安全编码规则的行为,这是一个好主意。 但这不是测试,也不是测试的替代品。

    适用于Java开发人员的 CoverityKlocwork InsightKlocwork Solo等静态分析工具, FindbugsHP Fortify ,IBM的Software Analyzer ,Microsoft的FXCopVeracode的按需静态分析检查距编译器和IDE为您检查的内容有所提高(尽管类似IDE IntelliJ IDEA包括一组很好的内置静态分析代码检查器。 这些工具应该是您的开发和持续集成环境的一部分。

    它们可以快速有效地发现大型代码库中常见的编码错误和不一致之处。 容易遗漏且难以测试的错误,通常易于修复。 这使代码复审更加高效和有效,因为它使复审者可以专注于更高级别的问题,而不是低级的正确性。 他们可以确定代码中需要重构和简化的区域,以及可能需要更多测试或更深入审查的代码区域,尤其是如果该工具在已经“起作用”的代码中发现问题时。

    但是静态分析与测试不一样,或不如测试

    静态分析工具无法测试代码以验证其是否可以执行预期的工作。 客户要求的功能全部存在,并且业务逻辑正确(单元测试,功能测试和验收测试)。 他们无法检查模块的接口及其行为是否正确(组件级测试),或者系统的较大部分与其他系统一起正常工作(系统测试和集成测试)。 还是系统将承受负载(性能和压力测试以及浸泡测试),或者它是否容易受到安全攻击(笔测试),或者人们可以真正理解如何使用它(可用性测试)。 静态分析工具,即使是最好的分析工具,也仅限于发现“与代码相关的缺陷的狭窄范围”

    我感谢静态分析工具供应商希望找到销售其解决方案的新方法。 也许这就是为什么Coverity现在将其静态分析工具集称为“行业首个开发测试平台”的原因 他们的信息似乎是开发人员不会测试他们的代码,也不会修复“由于组织孤岛和优先级冲突”而导致测试人员发现的错误。 因此,静态分析必须填补这一可见的空白。

    通过改善与Eclipse和Visual Studio等开发工具的集成并提高静态分析检查的运行速度,Coverity使开发人员可以更轻松地尽早发现并修复更多的编码错误-很好。 但是更好的包装和工作流程以及更快的性能并不会改变该工具的实际功能。

    开发测试或开发人员测试

    运行静态分析工具不是“开发测试”。 开发测试或开发人员测试是开发人员用来测试自己的代码以查看其是否起作用的方法:在调试器中执行代码,并确保其按预期运行,然后对其进行性能分析,以确保性能不受影响糟透了,编写自动化的单元测试和组件测试,以确保代码能够完成其应有的功能。

    将静态分析工具与其他自动化测试工具混淆是一个坏主意。 它歪曲了静态分析工具的功能。 它可能使人们相信静态分析可以代替测试。 静态分析专家,FindBugs之父Bill Pugh 明确表示,虽然静态分析工具确实可以工作,但“发现比发现静态分析更有价值”对于发现错误。 而像White Hat Security的Jeremiah Grossman这样的安全专家则认为静态分析足以检查系统中的安全性错误或其他类型的错误。

    静态分析工具变得越来越好,更容易使用,它们变得越来越快,更准确,并且比几年前减少了更少的误报。 如果每个人都可以找到适合自己且负担得起的工具,则每个人都应该使用它们。 例如,如果您在Java商店中,没有任何理由不至少使用Findbugs –它是免费的并且可以使用。 我的团队在开发和持续集成的不同阶段使用了多种不同的静态分析工具,因为不同的工具会发现不同类型的问题,并且某些工具需要更长的运行时间。 这些工具会发现真正的错误和编码问题。 但是这个市场有太多的炒作。 在软件测试领域,静态分析工具并不是“统治者”

    参考: 静态分析不是 JCG合作伙伴 Jim Bird在Building Real Software博客上的开发测试


    翻译自: https://www.javacodegeeks.com/2012/01/static-analysis-isnt-development.html

    白盒测试方法静态分析

    展开全文
  • 静态分析与动态分析

    2019-10-03 14:24:18
    静态分析关注系统的要素和组织(联系);强调的是部分如何组成整体;着重于要素的局部联系。 动态分析关于于系统的功能:前调的是要素与联系如何组成链条,完成事务的处理。 动态分析依靠静态分析支持; 静态...

    静态分析关注系统的要素和组织(联系);强调的是部分如何组成整体;着重于要素的局部联系。

    动态分析关于于系统的功能:前调的是要素与联系如何组成链条,完成事务的处理。

     

    动态分析依靠静态分析支持;

    静态分析依靠动态分析验证。

     

    静态分析思想:自顶向下、删繁就简、分而治之,逐步求解;

    动态分析思想:将分开的要素组合起来完成功能。

    转载于:https://www.cnblogs.com/feng9exe/p/7658979.html

    展开全文
  • 3.1Soot构建语法树 Soot通过objectweb来进行字节码构建成语法树 首先scene会去查找一些基础的JVM的类 基础的对象Object, Boolean, Void, Integer, Long, Float等 字符串操作:String, StringBuffer的类 ...

    3.1 Soot构建语法树

     

    Soot通过objectweb来进行字节码构建成语法树

    首先scene会去查找一些基础的JVM的类

    1. 基础的对象Object, Boolean, Void, Integer, Long, Float等
    2. 字符串操作:String, StringBuffer的类
    3. Exception, Throwable,以及一些常见的Error类
    4. 线程相关的, Thread, Runnable
    5. 序列化,Serializable
    6. GC相关, Finalizer
    7. Lambda表达式,LambdaMetafactory

    接着会去查找定义的初始化的类,通过SootResolver 构建SootClass, 生成AsmClassSource使用objectweb加载Class file,生成语法树,同时加载方法生成语法树AsmMethodSource。

     

    3.2 Soot构建分析

     

     

     

    Soot把每一个阶段的分析都分为Pack,把每个阶段的小的子步骤成为Transform,每一个阶段都可以关闭或者打开,但分析的阶段不可以调整顺序.

     

    3.2.1 核心过程的Packs

    在Soot的核心过程分为PP->CG->TP->OP->AP,Soot支持多IR分析,但在核心过程中只支持Jimple, Shimple, 在Pack中可以插入自定义的Transform,这样就可以在每一个分析阶段加入自己的分析步骤,从而实现自定义分析的能力

     

    3.2.1.1 JB Pack

     

    任何分析首先要构建Soot的body对象,在前面步骤中的构建语法书的时候并没有构建Body,所以在Pack分析过程中首先要构建Body,

    在Soot里只对Jimple的body进行了构建,Pack只对Jimple body进行分析

     

    JB的Pack里包含了如下的子Transform,Transform的顺序不可调整

     

    3.2.1.2  PP

    Pre-processing Pack 是第一个分析的Pack,该Pack允许你自定义一些自己的transform在构建call graph之前。

    在这里Jimple,和Shimple的WJPP, WSPP有所不同,WJPP里包含了

    Constant reflective method invocation base transformer (wjpp.cimbt)

     

    3.2.1.3 CG

    CG Call Graph,调用图,调用图是静态层序分析的关键,方法调用图包含着整个函数调用的关系图。

    3.2.1.3.1 Edge

     

    函数调用边,边的两头是一边是调用方,另一边是调用的目标方法,同时也包含着前面一条边和下面一条边,通过链表结构构建了整个graph

    3.2.1.3.2 Call Graph的结构

    Call graph对象里包含了所有的Edges的集合,同时也包含了了几个关键Map

    1. src Map
    2. targetMap
    3. unitMap

    这些Map的Key以SootMethod,unit 而value是Edge,为了更快的找到SootMethod或者Unit对应的Edge

     

    3.2.1.3.3 构建Call Graph

    Call Graph是方法的调用图,要画出方法的调用图是需要起始点的,也就是我们常说的EntryPoint

    如何确定起始点呢?

    a. 比较明显的是Main Class里的Main方法, 同时还要关注Main Class里的静态的初始化,包括父类的初始化

    b. 我们通常会使用多线程的方法,如果只是跟踪Main函数是跟踪不到的,因为Main函数里只是会调用thread的start的方法,函数调用跟踪就断裂了,同时还包含了一些JVM自己的线程调用的Java的方法

    addMethod(ret, "<java.lang.System: void initializeSystemClass()>");

        addMethod(ret, "<java.lang.ThreadGroup: void <init>()>");

        // addMethod( ret, "<java.lang.ThreadGroup: void

        // remove(java.lang.Thread)>");

        addMethod(ret, "<java.lang.Thread: void exit()>");

        addMethod(ret, "<java.lang.ThreadGroup: void uncaughtException(java.lang.Thread,java.lang.Throwable)>");

        // addMethod( ret, "<java.lang.System: void

        // loadLibrary(java.lang.String)>");

        addMethod(ret, "<java.lang.ClassLoader: void <init>()>");

        addMethod(ret, "<java.lang.ClassLoader: java.lang.Class loadClassInternal(java.lang.String)>");

        addMethod(ret, "<java.lang.ClassLoader: void checkPackageAccess(java.lang.Class,java.security.ProtectionDomain)>");

        addMethod(ret, "<java.lang.ClassLoader: void addClass(java.lang.Class)>");

        addMethod(ret, "<java.lang.ClassLoader: long findNative(java.lang.ClassLoader,java.lang.String)>");

        addMethod(ret, "<java.security.PrivilegedActionException: void <init>(java.lang.Exception)>");

        // addMethod( ret, "<java.lang.ref.Finalizer: void

        // register(java.lang.Object)>");

        addMethod(ret, "<java.lang.ref.Finalizer: void runFinalizer()>");

        addMethod(ret, "<java.lang.Thread: void <init>(java.lang.ThreadGroup,java.lang.Runnable)>");

        addMethod(ret, "<java.lang.Thread: void <init>(java.lang.ThreadGroup,java.lang.String)>");

     

     

     

    3.2.1.4 TP

    Transformation Pack 也分成2种,WJTP, WSTP

    其中WJTP还包含以下Transform

     

     

    3.2.1.5 OP

    Optimization Pack, WJOP, WSOP

     

    3.2.1.6 AP

    Annotation Pack, 只有Jimple提供了Pack, WJAP

     

     

    3.2.2 Body Packs

    Body Packs 基于Body 的Packs分析,对不同的IR有不同的Packs

    和前面的核心Packs不同的是,这里只是基于Body进行分析,每个Packs依然可以自己定义Transform,

      public Transform(String phaseName, Transformer t) {

        this.DEBUG = Options.v().dump_body().contains(phaseName);

        this.phaseName = phaseName;

        this.t = t;

      }

    区别是使用不同的Transformer,在Body packs里使用的是BodyTransformer

    protected abstract void internalTransform(Body b, String phaseName, Map<String, String> options);

     

    internalTransform里面包含了Body 对象

     

    与核心的Pack分析不同的是,当分析到Body的Packs的时候,Soot会启动多线程进行Pack的分析

    接下来我们以Jimple为例子举例Body Packs

    3.2.2.1 JTP

    Jimple Transformation pack

     

    3.2.2.2 JOP

    Jimple Optimization Pack

     

    3.2.2.3 JAP

    Jimple Annotation Pack

     

     

    展开全文
  • 我建议利用诸如Findbugs,PMD,Klocwork或Fortify之类的静态分析工具在将代码传递给审阅者之前检查常见的错误和错误的代码,以使审阅者的工作更加轻松并提高审阅效率。 一些读者问是否可以使用静态分析工具代替...
  • 程序静态分析(Program static analysis)是指在不执行代码情况下, 通过词法分析、语法分析、语义分析、控制流、数据流分析等技术对源代码进行扫描。
  • 代码静态分析

    千次阅读 2019-07-28 14:37:51
    静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的...
  • 静态分析技术

    2019-06-11 09:19:05
    程序静态分析是一种在不执行程序的情况下对程序行为进行分析的理论、技术,简称为静态分析。 程序动态分析则是另一种程序分析策略,它需要实际执行程序。 静态分析这一术语一般用来形容邹东华工具的分析,而人工...
  • HACKing三部曲 ...《c++反汇编与逆向分析技术揭秘》》 《加密与解密4》? 《恶意代码分析实战》 《0day安全:软件漏洞分析技术》 《漏洞战争》 fuzz test 模糊测试 PE文件格式 PE文件(Portable Exec...
  • 文章目录使用 JEB 进行静态分析安装 JEBJEB 的静态分析功能JEB 的脚本化与插件 使用 JEB 进行静态分析 JEB:一款强大的跨平台 Android 静态分析工具 相比 jd-gui、jadx、bytecode-viewer 这类 jar 查看工具,JEB ...
  • TscanCode C/C++静态分析

    2019-04-28 16:00:55
    TscanCode是腾讯静态分析团队开发的一款开源免费的C/C++静态分析工具,由于其比较简单实用,准确率较高,并且扫描C/C++代码不需要进行编译,对C/C++项目开发挺有帮助的,下面简单介绍一下该工具的安装与使用。...
  • 国内外主流静态分析类工具汇总

    千次阅读 2019-07-27 11:17:48
    笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。 我使用0标注...
  • Android APK静态分析

    2019-11-28 22:41:50
    安装包分析,又称逆向分析,即拿到应用程序的apk文件时,使用一些第三方工具进行反编译、抓包、注入等手段,对应用程序逻辑、数据结构、攻击方式进行分析,常用的分析方法分为静态分析与动态分析 静态分析 在不...
  • clang静态分析

    2019-10-23 20:19:49
    补充:centos7.8安装llvm7 https://www.liangzl.com/get-article-detail-20723.html clang 中文: ... 1.静态分析 程序分析分为动态分析和静态分析两种,其中静态分析是指不实际运行程序而通过词...
  • 静态分析简介

    千次阅读 2018-08-16 16:51:53
    一:程序静态分析简介(Program Static Analysis): 程序静态分析简介(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码...
  • Soot 静态分析框架(一)整体框架

    千次阅读 2019-09-26 15:06:56
    1. Soot 静态分析框架 Soot核心对象分别是:Scene、SootClass、SootMethod、SootField、Body。 1.1 Scene Scene:Scene表示完整的分析环境,可以通过Scene.v()调用设置Options的API,也可以获取一些...
  • 时序分析之静态分析基础

    千次阅读 多人点赞 2018-08-06 23:11:49
    静态时序分析(SAT) 相关参数分析 建立和保持时间 (数据输出延时)(触发器从时钟有效,数据从输入到达输出的时间)和缓冲延时 发射沿(launch edge)与锁存沿(latch edge) 数据到达时间(Data Arrival ...
  • 静态分析分析

    千次阅读 2016-05-05 20:31:40
    软件静态分析概念 静态分析通常是指不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程 被测对象是各种不软件相关的有必要测试的产物,如文档、源代码等 通过扫描程序正文对程序的数据流和控制流等...
  • 1.基础分析 2.详细介绍 2.1 指纹探测 恶意代码指纹探测技术有很多种,常见的有hash值探测、流量统计指纹、纹理指纹探测、图像指纹探测、动态行为指纹...... (1)hash值检测方法比较方便,但效率低。恶意程序...
  • 软件缺陷静态分析CodeSonar

    千次阅读 2019-07-29 17:38:23
    CodeSonar是软件静态缺陷检查和安全性分析工具,帮助团队快速分析和验证代码,包括源代码和二进制代码,识别导致系统...● 最深层次的静态分析 1.采用先进的算法 CodeSonar执行统一的数据流和符号分析,检查整个程...
  • 轴承的Abaqus静态分析

    千次阅读 2019-05-15 21:33:32
    静态分析 1 Part 导入成功后会自动显示有几个part,我这里是3个 2 Property (1)创建材料属性,我这里选用合金钢(密度为7.82g/cm3,弹性模量E=206GPa,泊松比=0.3)。 (2)创建section截面,选用...
  • 静态分析工具汇总

    2018-08-09 20:17:00
    静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):“静态测试包括代码检查、静态结构分析、代码质量度量等。它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行。代码检查代码检查...
  • 想利用clang作为前端编译器做一个代码的静态分析工具,问题在于如何编写checker,有知道如何自己定制checker的大佬
  • 最近由于C/C++项目代码审计,有时候开发不给相关的依赖库,是件很蛋疼的事情。...所以我就在想能不能找到一款开源的并且不需要编译源代码的开源静态分析工具,通过一天的查资料对比,挑选了三款比较中意的C/C++...
  • MobSF源码分析——静态分析部分

    千次阅读 2018-07-25 15:00:03
    MobSF源代码结构主要包含静态分析、动态分析、API Fuzzer三个部分,本文不关注Django框架本身及Web处理相关的内容。如图: 网页页面分析 重新返回首页,F12进入开发者模式,可以看到,首页中间的Update&amp;...
  • 系统静态分析建模(类图)

    千次阅读 2019-12-03 21:06:21
    title: 系统静态分析建模(一) date: 2019-12-03 19:32:43 categories: 系统分析与设计 系统分析的概念 一种问题解决技术,将一个系统分解成各个组成部分,目的是研究各个部分如何工作、如何交互、以实现其系统...

空空如也

1 2 3 4 5 ... 20
收藏数 23,736
精华内容 9,494
关键字:

静态分析