静态分析

静态分析基础技术

孤街浪徒 提交于 2020-02-29 09:25:23
1、使用反病毒软件来确认程序样本的恶意性 在分析一个可疑的恶意代码样本时,第一步就最好是拿多个反病毒软件扫描下这个文件,看是否有哪个引擎已经能够识别它。反病毒软件是不完美的,它们主要依靠一个已知恶意代码可识别片断的特征数据库,以及基于行为与模式匹配的分析(启发式检测),来识别可疑文件。 一些罕见的恶意代码通常也不会被反病毒软件所识别,因为它们并不在病毒库里。最后,启发式检测,尽管经常也能成功地识别出一些未知恶意代码,但仍然可以被一些新型独特的恶意代码所绕过。 VirusTotal( http://www.virustotal.com ),可调用多个反病毒引擎来进行扫描。 2、哈希值:恶意代码的指纹 哈希是一种用来唯一标识恶意代码的常用方法。 将哈希值作为标签使用 与其他分析师分享哈希值,以帮助他们来识别恶意代码 在线搜索这段哈希值,看看这个文件是否已经被识别 3、查找字符串 使用的工具strings 4、加壳与混淆恶意代码 查壳工具:PEID PE 文件以一个文件头开始,其中包括代码信息、应用程序类型、所需的库函数与空间要求。PE头中的信息对于恶意代码分析师而言,是非常有价值的。 5、链接库与函数 代码库可以被静态链接,也可以运行时链接,或者动态链接。了解代码库如何被链接的,对于我们理解恶意代码来说,是非常关键的,因为我们在PE文件头中可以找到的信息取决于链接了哪些代码库。 6

一款国产静态程序检查工具与Converity的对比测试

馋奶兔 提交于 2020-02-28 00:42:25
源伞科技Pinpoint,作为BAT都在使用的一款静态代码分析工具,到底有什么领先于其他厂商的能力? 1. 扩展和部署功能对比 源伞科技Pinpoint现有的检查器可以通过简单的json配置文件扩展业务逻辑。比如敏感数据泄露到日志检查器,企业或许有很多自己的日志打印函数,我们可以通过人工配置指定,即可提高检测质量。 如果不想人工配置,Pinpoint有未公开发布的库函数学习工具,可以通过线下分析企业代码库自动学习和生成上述配置文件。 Pinpoint对分布式多机扫描部署支持比 Coverity 好,并发扫描和结果合并x性能也比 Coverity 更强,能更好支持BAT级别的数千代码库扫描( 已在BT部署验证 )。 2. 分析能力对比 本节补充一些人工构造的例子介绍Pinpoint在分析能力上比Coverity强的部分。本节所有代码示例,Coverity均有误报或漏报。 Pinpoint更懂数据流 精确深度的指针分析,深入分析内存中的程序行为 高深度高精度函数调用链分析,查找跨越多层函数的深度问题 示例代码如下: (链接: https://www.sourcebrella.com/online-showcase/?id=5b483da03a21cd078346028f),此示例代码基于空指针(Null Pointer Dereference)问题检测。 准备代码:

静态时序分析的基本方法08

这一生的挚爱 提交于 2020-02-12 11:16:22
时序优化 解决时序收敛的问题也是静态时序分析中的主要工作。静态时序分析中可以通过自动和手动两种方式完成物理上和时序上的优化工作,其优化时序 的类型主要分为建立时间、保持时间和时序设计规则3钟。 1.基本方法 优化建立时间和时序设计规则的基本方法由如下几种。 (1)改变单元 位置 不合理的物理位置会使信号线过长而导致线负载和线延时变大,从而影响时序收敛,如下图所示。 可以通过优化单元的物理位置来达到提高时序性能的目的,如下图所示。 (2)改变单元大小 通常标准单元库提供了多种驱动能力,由于在相同激励和负载下,其延时与驱动能力近似成线性关系,驱动随驱动能力的增大而递减,因此把由于负载过大导致延时恶化的单元调整为驱动能力更大的同类型单元,可以改善时序性能。同样,驱动能力小的同类型单元其对前级驱动单元所体现的负载电容也较小,如果将驱动力大的负载单元换成驱动力小的负载单元,可以减少前级驱动单元的输出负载 ,从而改善前级驱动单元的时序性能。 (3)插入缓冲单元 随着工艺尺寸的不断缩小,其线延时增加与线长近似成正比指数性关系,而增加缓冲单元个数与延时近似成正比线性关系。那么在单元位置比较合理,同时单元驱动力已经达到最大时的情况下,如果单元驱动信号线负载仍然过大而导致延时过大的情况,可以通过在长距离信号线中间增加合适的缓冲单元来提高延时性能,如下图所示。 (4)删除缓冲单元

静态时序分析的基本方法06

邮差的信 提交于 2020-02-08 18:07:06
其他芯片变化相关分析模式 随着制造工艺越来越先进,在时序分析规模不断增大的同时,对时序分析精度的要求也越来越高,因此常规的芯片变化相关分析模式已经无法满足当前更高级的时序分析要求。 本节将介绍两种更高级的芯片变化相关分析模式:高级芯片变化相关分析模式和参数化芯片变化相关分析模式。 高级芯片变化相关 (AOCV) 分析模式 在真实状态下,由于晶圆的片上局部工艺偏差,PVT等因素在单一芯片所造成的影响是随机的,比如在同一条时序路径上,可能有的单元的延时会加快,有的单元的延时会变慢。基于常规的芯片变化相关分析模式的时序分析方法由于使用统一的时序减免值,所以该分析模式存在缺点。基于OCV分析模式的建立时间计算示意图如下所示。 建立时间的计算公式如下: Tlc+Td+Ts<Tcc+Tp 其中,Tlc为发射时钟最快路径延时值,Td为最快数据路径延时值,Ts为捕获时序单元的建立时间要求值,Tcc为最慢捕获时钟路径延时值,Tp为时钟周期。 时序减免值设置如下: set_timing_derate -early 0.9 set_timing_derate -late 1.1 那么Tlc、Td、Ts的延时会变大,Tcc的延时会加快。其建立时间由于在最快路径和最慢路径中分别使用统一的时序减免值,这样最快路径延时会越来越快,最慢路径延时越来越慢,是时序分析结果过于悲观,这样会导致时序收敛难度加大。

静态时序分析的基本方法05

ぐ巨炮叔叔 提交于 2020-02-08 07:00:13
时序减免 时序减免的作用是根据减免系数,静态时序分析工具会在时序路径的每级逻辑门、连线和端口上都加上或减去一个原来延时值乘以减免系数值的延时作为最终的延时结果。设置时序减免值的目的是使时序分析结果更加符合实际情况。静态时序分析工具通过使用命令set_timing_derate来定义时序减免值。 以一条典型的时序路径为例,来介绍建立时间分析中时序减免的作用,如下图所示。 建立时间 的基本计算公式如下式所示。 发射时钟路径延时+最慢数据路延时≤时钟周期+捕获时钟路径延时-终止点时序单元建立时间要求值 当考虑时序减免时,在OCV模式下,上图中建立时间分析结果如下: 发射时钟最慢路径延时=1.2+0.8=2 最慢数据路径延时=5.2 捕获时钟最快路径延时=1.2+0.86=2.06 终止点时序单元建立时间要求值=0.35 为满足时序要求的 最小时钟周期 如下 发射时钟最慢路径延时+最慢数据路径延时-捕获时钟最快路径延时+终止点时序单元建立时间要求值=2+5.2-2.06+0.35=5.49 当设置时序减免值后,其设置如下 set_timing_derate -early 0.9 set_timing_derate -late 1.2 以上时序减免设置定义最快路径延时值在原基础值上再减少10%,最慢路径延时值在原基础上再增加20%。 基于以上设置的减免值,在OCV模式下,图5

静态时序分析的基本方法02

杀马特。学长 韩版系。学妹 提交于 2020-02-04 14:35:08
时序路径延时计算方法 当与设计相关的所有时序弧都存在并有效时,时序路径延时就可以基于获取的时序弧信息并运用合适的算法来进行计算。时序路径延时的计算根据如下几种逻辑组合形式而有不同的计算方法。 1.组合逻辑之间路径延时计算方法 组合逻辑电路在逻辑功能上的特点:任意时刻的输出仅仅取决于当前输入,与电路原来的状态无关。最基本的组合逻辑之间的延时计算方法是通过把逻辑路径的逻辑门延时和信号线延时逐一相加来计算。 下图所示为计算一条以3个反相器单元组成的组合逻辑路径延时的基本方法。 现从输入到输出的组合逻辑路径延时计算考虑输入上拉和下拉的两种不同的状态下的转换下的逻辑路径延时。由于反相器单元是具有逻辑功能的单元,因此输入的不同其对应的时序弧也不同。 输入信号为上拉状态的计算公式如下: Trise=Tn0fall+Tarise+Tn1rise+Tbfall+Tn2fall+Tcrise+Tn3rise 输入信号为下拉状态的计算方式如下: Tfall=Tn0rise+Tafall+Tn1fall+Tbrise+Tn2rise+Tcfall+Tn3fall 其中,Trise/fall为输入端口为上拉或下拉时的组合逻辑总延时,Tn0rise/fall、Tn1rise/fall、Tn2rise/fall和Tn3rise/fall为对应输入状态的线延时值,Tarise/fall、Tbrise

JDK动态代理

爷,独闯天下 提交于 2020-02-02 10:03:29
一、基本概念 1.什么是代理? 在阐述JDK动态代理之前,我们很有必要先来弄明白代理的概念。代理这个词本身并不是计算机专用术语,它是生活中一个常用的概念。这里引用维基百科上的一句话对代理进行定义: A proxy is an agent or substitute authorized to act for another person or a document which authorizes the agent so to act. 意思是说:代理指的是一个代理人(或替代品),它被授权代表另外一个人(或文档)。 从这个简明扼要的定义中,可以看出代理的一些特性:1.代理存在的意义就是代表另一个事物。2.代理至少需要完成(或实现)它所代表的事物的功能。 2.什么是JAVA静态代理? JAVA静态代理是指由程序员创建或工具生成的代理类,这个类在编译期就已经是确定了的,存在的。 典型的静态代理模式一般包含三类角色: 1.抽象角色:它的作用是定义一组行为规范。抽象角色一般呈现为接口(或抽象类),这些接口(或抽象类)中定义的方法就是待实现的。 2.真实角色:实现了抽象角色所定义的行为。真实角色就是个普通的类,它需要实现抽象角色定义的那些接口。 3.代理角色:代表真实角色的角色。根据上面代理的定义,我们可以知道代理角色需要至少完成(或实现)真实角色的功能。为了完成这一使命

微软开源软件特征源码分析工具 Application Inspector

女生的网名这么多〃 提交于 2020-01-19 20:30:51
微软近日开源了其内部使用的软件特征源码分析工具 Application Inspector。 现代软件开发实践通常需要基于数百个现有组件中构建应用,无论它们是由组织中的另一个团队、外部供应商还是开源社区中的某个人编写的。这样虽然会带来许多好处,比如加快开发进度、软件质量与互操作性等,但同时也会带来隐藏的复杂性和风险。 应对这种情况,微软介绍其内部使用的工具是 Application Inspector,这是一个软件特征源码分析器,可以通过使用静态分析和可自定义的基于 json 的规则引擎来识别软件源码特征,了解程序的功能。 此工具与传统的静态分析工具的不同之处在于,它不会尝试识别“好”或“坏”的模式,而是会根据 500 多种规则模式报告发现的内容,并进行特征检测,包括影响安全性的特征,例如加密技术的使用等。 在以下示例中,Application Inspector 将识别出以下功能: FileOperation.Write Network.Connection.Http Process.DynamicExecution 这些功能可以告诉我们很多程序的相关信息。 Application Inspector 包含一个可过滤的置信度指示器,可帮助最大程度减少误报匹配以及可自定义的默认规则和条件匹配逻辑,其带有数百种功能检测模式,涵盖了许多流行的编程语言

一款国产静态代码分析工具与Converity的对比

妖精的绣舞 提交于 2020-01-17 17:37:27
源伞科技Pinpoint,作为BAT都在使用的一款静态代码分析工具,到底有什么领先于其他厂商的能力? 1. 扩展和部署功能对比 源伞科技Pinpoint现有的检查器可以通过简单的json配置文件扩展业务逻辑。比如敏感数据泄露到日志检查器,企业或许有很多自己的日志打印函数,我们可以通过人工配置指定,即可提高检测质量。 如果不想人工配置,Pinpoint有未公开发布的库函数学习工具,可以通过线下分析企业代码库自动学习和生成上述配置文件。 Pinpoint对分布式多机扫描部署支持比 Coverity 好,并发扫描和结果合并x性能也比 Coverity 更强,能更好支持BAT级别的数千代码库扫描( 已在BT部署验证 )。 2. 分析能力对比 本节补充一些人工构造的例子介绍Pinpoint在分析能力上比Coverity强的部分。本节所有代码示例,Coverity均有误报或漏报。 Pinpoint更懂数据流 精确深度的指针分析,深入分析内存中的程序行为 高深度高精度函数调用链分析,查找跨越多层函数的深度问题 示例代码如下: (链接:https://www.sourcebrella.com/online-showcase/?id=5b483da03a21cd078346028f),此示例代码基于空指针(Null Pointer Dereference)问题检测。 准备代码:

静态代码扫描的原理

懵懂的女人 提交于 2020-01-16 04:08:35
静态代码扫描存在的价值 研发过程,发现BUG越晚,修复的成本越大 缺陷引入的大部分是在编码阶段,但发现的更多是在单元测试、集成测试、功能测试阶段 统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的 以上三点证明了,静态代码扫描在整个安全开发的流程中起着十分关键的作用,且实施这件事情的时间点需要尽量前移,因为扫描的节点左移能够大幅度的降低开发以及修复的成本,能够帮助开发人减轻开发和修复的负担,许多公司在推行静态代码扫描工具的时候会遇到 大幅度的阻力 ,这方面阻力主要来自于开发人员,由于工具能力的有限性,会产生大量的误报,这就导致了开发人员很可能在做BUG确认的工作时花费了大量的无用时间。因此选择一款合适的静态代码分析工具变得尤为重要,合适的工具能够真正达到降低开发成本的效果。 静态代码分析理论基础和主要技术 静态代码分析原理分为两种:分析源代码编译后的中间文件(如Java的字节码);分析源文件。主要分析技术如下: 缺陷模式匹配 事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行匹配,从而完成软件安全分析。优点:简单方便;缺点:需要内置足够多的缺陷模式,容易产生误报。 类型推断/类型推断 类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。