精华内容
下载资源
问答
  • 1:Zookeeper (动物园管理员,提供少量数据的存储和管理,提供对数据节点的监听器)是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步...

    1:Zookeeper (动物园管理员,提供少量数据的存储和管理,提供对数据节点的监听器)是 Google 的 Chubby一个开源的实现,是 Hadoop 的分布式协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等;
    官方网址:http://zookeeper.apache.org/

     2:为什么使用Zookeeper?

      (1)大部分分布式应用需要一个主控、协调器或控制器来管理物理分布的子进程(如资源、任务分配等);
      (2)目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制;
      (3)协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器;
      (4)ZooKeeper:提供通用的分布式锁服务,用以协调分布式应用;
    3:Zookeeper能帮我们做什么?

      (1)Hadoop2.0,使用Zookeeper的事件处理确保整个集群只有一个活跃的NameNode,存储配置信息等;
      (2)HBase,使用Zookeeper的事件处理确保整个集群只有一个HMaster,察觉HRegionServer联机和宕机,存储访问控制列表等;
    4:Zookeeper的特性:

      (1)Zookeeper是简单的;
      (2)Zookeeper是富有表现力的;
      (3)Zookeeper具有高可用性;
      (4)Zookeeper采用松耦合交互方式;
      (5)Zookeeper是一个资源库;

    5:Zookeeper的安装和配置(单机模式):

      (1)下载ZooKeeper:http://labs.renren.com/apache-mirror/zookeeper/zookeeper-3.4.3/zookeeper-3.4.3.tar.gz;
      (2)解压:tar xzf zookeeper-3.4.3.tar.gz;
      (3)在conf目录下创建一个配置文件zoo.cfg:

    tickTime=2000
    dataDir=/Users/zdandljb/zookeeper/data
    dataLogDir=/Users/zdandljb/zookeeper/dataLog        
    clientPort=2181

      (4)启动ZooKeeper的Server:sh bin/zkServer.sh start, 如果想要关闭,输入:zkServer.sh stop
    6:Zookeeper的安装和配置(集群模式):

      (1)创建myid文件,server1机器的内容为:1,server2机器的内容为:2,server3机器的内容为:3
      (2)在conf目录下创建一个配置文件zoo.cfg:

    tickTime=2000
    dataDir=/Users/zdandljb/zookeeper/data
    dataLogDir=/Users/zdandljb/zookeeper/dataLog         
    clientPort=2181                         
    initLimit=5                          
    syncLimit=2                                  
    server.1=server1:2888:3888                                
    server.2=server2:2888:3888                                
    server.3=server3:2888:3888

     7:Zookeeper的安装和配置(伪集群模式):

      (1)建了3个文件夹,server1 server2 server3,然后每个文件夹里面解压一个zookeeper的下载包;
      (2)进入data目录,创建一个myid的文件,里面写入一个数字,server1,就写一个1,server2对应myid文件就写入2,server3对应myid文件就写个3;
      (3)在conf目录下创建一个配置文件zoo.cfg:

    tickTime=2000
    dataDir=/Users/zdandljb/zookeeper/data
    dataLogDir=xxx/zookeeper/server1/          
    clientPort=2181                                  
    initLimit=5                           
    syncLimit=2                                  
    server.1=server1:2888:3888                                 
    server.2=server2:2888:3888                                   
    server.3=server3:2888:3888

     8:Zookeeper的数据模型:

      (1)层次化的目录结构,命名符合常规文件系统规范
      (2)每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识
      (3)节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点
      (4)Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本
      (5)客户端应用可以在节点上设置监视器
      (6)节点不支持部分读写,而是一次性完整读写

     9:Zookeeper的节点:
      (1)Znode有两种类型,短暂的(ephemeral)和持久的(persistent)
      (2)Znode的类型在创建时确定并且之后不能再修改
      (3)短暂znode的客户端会话结束时,zookeeper会将该短暂znode删除,短暂znode不可以有子节点
      (4)持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除
      (5)Znode有四种形式的目录节点,PERSISTENT、PERSISTENT_SEQUENTIAL、EPHEMERAL、EPHEMERAL_SEQUENTIAL

    10:Zookeeper的角色:
      (1)领导者(leader),负责进行投票的发起和决议,更新系统状态
      (2)学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票
      (3)Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度
      (4)客户端(client),请求发起方
    11:Zookeeper的顺序号:
      (1)创建znode时设置顺序标识,znode名称后会附加一个值
      (2)顺序号是一个单调递增的计数器,由父节点维护
      (3)在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
    12:Zookeeper的读写机制:
      (1)Zookeeper是一个由多个server组成的集群
      (2)一个leader,多个follower
      (3)每个server保存一份数据副本
      (4)全局数据一致
      (5)分布式读写
      (6)更新请求转发,由leader实施
    13:Zookeeper的保证:
      (1)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
      (2)数据更新原子性,一次数据更新要么成功,要么失败
      (3)全局唯一数据视图,client无论连接到哪个server,数据视图都是一致的
      (4)实时性,在一定事件范围内,client能读到最新数据
    14:Zookeeper的API接口:
      (1)String create(String path, byte[] data, List<ACL> acl, CreateMode createMode)
      (2)Stat exists(String path, boolean watch)
      (3)void delete(String path, int version)
      (4)List<String> getChildren(String path, boolean watch)
      (5)List<String> getChildren(String path, boolean watch)
      (6)Stat setData(String path, byte[] data, int version)
      (7)byte[] getData(String path, boolean watch, Stat stat)
      (8)void addAuthInfo(String scheme, byte[] auth)
      (9)Stat setACL(String path, List<ACL> acl, int version)
      (10)List<ACL> getACL(String path, Stat stat)

    15:Zookeeper应用场景1-统一命名服务:
      (1)分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。
      (2)Name Service 是 Zookeeper 内置的功能,只要调用 Zookeeper 的 API 就能实现。

    16:Zookeeper应用场景2-配置管理:
      (1)配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 PC Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 PC Server,这样非常麻烦而且容易出错。
      (2)将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。

    17:应用场景3-集群管理:
      (1)Zookeeper 能够很容易的实现集群管理的功能,如有多台 Server 组成一个服务集群,那么必须要一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,集群中其它集群必须知道,从而做出调整重新分配服务策略。同样当增加集群的服务能力时,就会增加一台或多台 Server,同样也必须让“总管”知道。

      (2)Zookeeper 不仅能够维护当前的集群中机器的服务状态,而且能够选出一个“总管”,让这个总管来管理集群,这就是 Zookeeper 的另一个功能 Leader Election。
      (3)规定编号最小的为master,所以当我们对SERVERS节点做监控的时候,得到服务器列表,只要所有集群机器逻辑认为最小编号节点为master,那么master就被选出,而这个master宕机的时候,相应的znode会消失,然后新的服务器列表就被推送到客户端,然后每个节点逻辑认为最小编号节点为master,这样就做到动态master选举。

    18:Zookeeper应用场景4-共享锁:
      (1)共享锁在同一个进程中很容易实现,但是在跨进程或者在不同 Server 之间就不好实现了。Zookeeper 却很容易实现这个功能,实现方式也是需要获得锁的 Server 创建一个 EPHEMERAL_SEQUENTIAL 目录节点,然后调用 getChildren方法获取当前的目录节点列表中最小的目录节点是不是就是自己创建的目录节点,如果正是自己创建的,那么它就获得了这个锁,如果不是那么它就调用 exists(String path, boolean watch) 方法并监控 Zookeeper 上目录节点列表的变化,一直到自己创建的节点是列表中最小编号的目录节点,从而获得锁,释放锁很简单,只要删除前面它自己所创建的目录节点就行了。

    19:Zookeeper应用场景5-队列管理:

      (1)Zookeeper 可以处理两种类型的队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达,这种是同步队列;队列按照 FIFO 方式进行入队和出队操作,例如实现生产者和消费者模型
      (2)创建一个父目录 /synchronizing,每个成员都监控目录 /synchronizing/start 是否存在,然后每个成员都加入这个队列(创建 /synchronizing/member_i 的临时目录节点),然后每个成员获取 / synchronizing 目录的所有目录节点,判断 i 的值是否已经是成员的个数,如果小于成员个数等待 /synchronizing/start 的出现,如果已经相等就创建 /synchronizing/start。

    20:Zookeeper总结:

      (1)Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、Server 之间状态同步等。
      (2)Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型

    展开全文
  • 大数据动物园-驯服野兽

    千次阅读 2013-03-24 20:36:18
    大数据动物园-驯服野兽   大数据可能是信息应用领域的最大趋势,它改变了企业做业务、做决策的方式。利用信息和智能分析技术从变化中获取预测和利润。这使得IT从传统技术之外寻找新的工具去处理3V(volume, ...

    大数据动物园-驯服野兽

     

    大数据可能是信息应用领域的最大趋势,它改变了企业做业务、做决策的方式。利用信息和智能分析技术从变化中获取预测和利润。这使得IT从传统技术之外寻找新的工具去处理3V(volume, velocity, variety)数据。

    不过,聚焦于大数据而往往忘记一点就是数据无论是大是小都是数据。在企业级进行管理和集成来提取它的全部价值并保证它连续一致的使用。驯服大数据的关键就是获取这个价值。三种常用的方式如下:

    1.       在大数据中获取最大价值的基础是针对包括大数据和传统事务在内的所有信息的技术多样性和深度集成的平台。

    2.       企业级方法,即平台、产品和流程是保证大数据长期质量和使用必不可少的,以此与BI和其他系统的现存数据保持一致。

    3.       大数据项目的快速部署需要尽早利用新兴的业务机会并且增量的将大数据能力引入到当前围绕数据仓库的数据管理框架。

    驯服大数据野兽是数据管理向前的一大步。

     

    如果大数据是一头大象,但绝不仅仅是Hadoop而是不断增加的各种类型的业务数据。出去技术新颖,大数据跟其他数据一样。它必须在企业级适当管理和使用以带来显著的业务价值和长远影响。

     

    盲人摸象-观察大数据情景

    六个盲人通过感触大象的不同部位得出大象是什么,这个故事正是在描述当前围绕大数据的市场形势。每位使用者和提供者分别观察和描述他们接触到的那一部分大数据,当然并不指他们使用的工具和他们期望的市场。所有结果是不一致的,因此我们需要加以理清。

    根据IDC,存储和处理的信息量以每年50%增长。出去Volume、Velocity、Variety,IBM引入 Veracity,即需要信任为战略和操作决策提供的数据。一些分析人士增加了更多的V-,如Variability、Value、Virality、Validity和Viscosity。这些定义要么不可信要么不一致。事实上,模糊(Vague)可能是最为恰当的V-,其他的对特定度量均不可行。因此,如何平实的回答这个简单的问题:大数据适合我吗?

    最简单的方式,即由市场早期所采纳的,看到大数据的商业用途就考虑自己如何去使用。而这种方式是无法达成的因为更多创新应用被发现。尽管如此,如果你的业务遵从下述一个或若干说明,大数据将对你是很重要的。

    1.       市场利用社会媒体内容和关系信息以及从客户互动比如呼叫中心log到更加深入理解客户动机获得的内在信息。在零售、批发和电信业都存在与大量客户的直接或间接交互,这使得分析从样本到全数据集,从人口片段到整个市场,从历史数据的长期趋势到对新兴事件近乎实时的反应。最终目标是预测客户行为推荐行为的产出。

    2.       由执行时间短、数据量小的众多事务积累起来的大数据进行欺诈检测和检查财务数据其他的不规范。在磁盘上对流数据排序之前或没有进行排序的大数据分析技术已然成为常规。

    3.       实时预测可能成为一项功能,比如水电供应和电信,利用普遍存在的传感器技术和大数据处理技术将消费的统计由macro-转为micro-。消费的高峰值和低估值可以被预测并可以影响消费者的行为。

    4.       跟踪制造、生产和流通中的实体项目,从食品到日常应用,从包裹邮寄到集装箱运输。通过分配、使用甚至布置都会带来业务流程优化并提高客户体验。人们也倾向于追踪监督的业务原因。

    5.       通过创新使用自动收集的可能重构整个行业的数据可以彻底改造业务流程。比如,汽车行业基于实际行为而不是统计上的平均风险可以获得加价。

     

    也存在一些被所谓专家集中于自己对大数据认识的部分得出的错误认识。

    大数据不仅仅来自如Twitter和Facebook这样的社会媒介。这类数据是重要的,但大多来自操作系统传统记录和BI度量的实际客户和业务事务。类似的,仅考虑自动收集的来自互联网的增长数据而忘记使用和分析应用于现存或重构业务流程的数据。利用多个工具集成多数据源,包括传统的和新的是首要的必要条件。对所有数据,不论大数据还是小数据的良好集成对从信息中提取业务价值是必要的。

    这里存在一个想法,就是大数据可以或者应该替代关系数据库或EDW,这是极限简化。事实上,大数据技术是对来自DBS批处理的现存技术的扩展和集成。比如,Hadoop基本上是并行批处理大文件的系统。关系数据库和支持工具集中于系统信息管理、数据一致性及其他,相反的,大数据技术强调处理速度、schema灵活性和大数据量这些性能特征。

    今天先进的业务流程需要有一系列特征。一些任务需要灵活性、宽松的限制和创新的方法;而另一些则需要确定性、有限范围并遵守约束。业务流程围绕在数据处理的传统系统能力之外的复杂性的阈值,但不为3V特征的大数据简化试图所支持。我们需要支持两者的企业级平台和工具。

    为定义平台,必须认识到我们快速从单一类型数据主宰的世界转为三种类型数据构建的世界。

     

    大数据,小视图

    在基础层面,我们需要在观念上对信息领域构建一个新的情景并且拥有三个相区别但深度关联的domain。

    1.       人力资源信息Human-sourced information:人是所有信息的最终源头,这是我们个人经验的主观记录。以前记录于书本、艺术而后来是照片、音视频,现在则是数字化并电子化存储于任何地方。这些信息是非结构化的,甚至不能以实体表达,特别是针对业务。比如,结构化和标准的模型要求对事实定义一致的版本。我们将流程间接数据转化为人力资源数据有多种方式,最基本的方式是系统中的数据记录。

    2.       流程间接数据Process-mediated data:每一项业务和组织基于流程运转并监控业务事件,比如注册客户、制造产品和接收订单。数据包括事务、引用表和关系以及元数据,均为高度结构化的。传统上,流程间接数据占IT管理和处理的绝大部分数据。它的高度结构化和规范形式非常适合实现信息管理、维护数据质量等。

    3.       机器产生的数据Machine-generated data:我们变得越来越独立于机器去度量、记录事件和条件。机器产生的数据是良好结构化的,从简单记录到复杂日志都可以高度表达为实体。成为许多业务存储、处理信息的日益重要的组件。这部分数据量日益增加尽管它的结构非常适于计算机处理,它的大小和速度高于传统方式比如EDW。

    这三种domain的相对大小和可接受的重要性在过去不断转变而且将继续转变。直到2000,流程间接数据Process-mediated data占主导地位,其他两种数据量小且并不重要。过去十年,大数据被发掘,由人力资源数据Human-sourced information和机器产生的数据Machine-generated data组成,而流程间接数据不再引人注目。互联网的日益成长将使得机器产生的数据变大极大并日益重要。

    不过,如下图所示,力资源数据Human-sourced information和机器产生的数据Machine-generated data最终来自于流程间接数据Process-mediated data,尽管只有少量、良好定义的数据集流过传统的业务流程层。这些数据比传统流程间接数据更加灵活且及时。事实上,产生流程间接数据的业务流程被设计为减少灵活性和及时性而确保结果数据的质量和一致性。这常见于EDW的流程中,而存在于数据清洗和检验流程中。

     

     

    human-sourced information和machine-generated数据比process-mediated数据要大得多并且变化很快。将他们复制且转换为传统的process-mediated domain日益不切实际。因此,特殊的技术,business analytics,被经常要求用于处理和探测human-sourced information和machine-generated数据。但是,同等重要的是将process-mediated数据和相关元数据流入分析环境创建有意义的、上下文相关、与分析流程紧密相关的分析环境。实质上,大数据和业务分析完成闭环信息处理。

    三层信息模型的实际含义是明显的并范围广泛:

    大数据处理,无论利用什么技术,依靠传统的process-mediated数据和相关元数据为全面有意义的使用创建上下文和一致性。

    大数据处理的结果必须反馈给传统业务流程来改变和提升业务。

    一个全面、条理清晰的环境,包括集成平台和企业范围的组织对成功实现是必要的。

    大数据变得更加普遍,对业务和IT的挑战从先前依靠process-mediated数据的实现转为包括更为有关现实世界的成熟、可变类型的信息。理解并工作于三种信息域的关系是在业务中安全、有效使用大数据的基础。定义和管理这种关系并使得这三种类型的信息在业务中平等安全的使用需要一个集成信息平台。

     

    针对所有信息类型的集成平台

    数据仓库工程师开发大数据流并创建一致业务信息的池。EDWs和相关企业数据管理环境比如MDM主数据管理系统是良好管理和配置process-mediated数据的资源库。相对而言,在科学领域和具有强大工程背景的互联网公司的大数据运动的发起已导致基于开源技术和订制编程的方法,更少关注数据质量,更多注意适应性、扩展和速度。今天业务需要一系列属性,一个不能取代另一个。

    集成平台如下图,必须有一些数据库和分析技术构成。每一个优化一特定类型的流程和访问称为pillar,由他们支持的业务角色命名。

    1.       中间的core business data pillar是在EDW和MDM中一致的、高质量的数据。传统关系数据库,DB2是基本技术。经常存储在EDW的特定应用报表和决策支持数据现在被排除了。

    2.       Core reporting and analytic data,覆盖后面的数据类型。从技术方面看,此pillar也是关系数据库。数据仓库平台比如InfoSphere Warehouse、Smart Analytics系统和新的PureData System作用于此。业务需要很高的查询性能将要求构建在MPP、列式数据库或其他特定技术上的分析数据库系统。

    3.       Deep  analytic information要求更灵活性、大规模处理。比如在Hadoop环境下的统计分析和文本挖掘。

    4.       Fast analytic data要求快速分析处理,它必须在数据运行中完成。这部分数据经常来自多个数据源需要为实时分析和制定决策进行接近零延迟的聚合和一致性分析。

    5.       综合速度和灵活性,我们需要specialty analytic data ,用于针对NoSQL、XML、图像和其他数据库和数据存储的特殊处理。在上图中它出现两次因为它应用于machine-generated 数据和human-sourced information。

    如图所示这些pillar分布于三种信息域中并将传统的记录操作系统列入平台的中心。平台的中心pillar与传统的数据仓库架构紧密相连,不同于数据集市的数据用于报表。数据会而且经常应该直接来自于操作型系统。

    元数据,从概念上作为所有类型信息的背景,是定义信息上下文和能够适当管理的新架构的中心。在process-mediated和machine-generated域,元数据被明确的单独存储,在human-sourced information域隐含于信息自身。这要求在此平台上要用新方法来对内外数据源和它们内在关系进行建模、发掘和可视化。

    从功能角度看,我们可以看到数据集成如平台内(黑箭头)的数据移动、复制、清洗和约束以及数据可视化(橙色连接线)。当然,元数据在各种功能中也扮演关键角色。数据集成,也称为ETL适用于数据仓库构建并集成信息平台中扮演相同角色。

    从另一方面看,数据可视化是数据仓库力求纯粹的咒语。不过不像长期建立的EDW架构,它通过单一物理存储所有的数据流,集成信息平台即为一系列相关存储,通过核心业务数据和元数据从逻辑上实现统一。数据可视化为用户和应用提供通过语义层对不同技术、不同地点的数据进行访问。提供业务导向的信息视图,隐藏技术复杂性并完成多数据源的连接。

    业务分析和管理工具包括你期望的所有功能,包括探测、可视化和发现以及应用开发、系统管理等。Business analytics涉及大数据使用和传统BI功能。

    在最大的范围内,集成信息平台包含由企业产生和使用的全部数据。信息最终来自于通过人与机器之间、内部与外部之间以及和其他组织产生的业务交互,如上图所示。事件Event一般由机器和传感器记录的。消息Communication来自人之间的交互。事务Transaction是业务最终交互的子集,事务对业务非常重要。他们都是核心业务数据的主要来源。Events和Communications不要求过多的数据保证所以可以直接载入系统并分析他们。

     

    集成信息平台的构建

    尽管平台的全部范围是广大的,但实际上已存在部分或若干部分。构建综合EDW,开始于已有系统来构建集成信息平台从而在大数据中交付价值。我们可以利用平台的若干关键利益:

    在合适的地方重用已存在的数据和环境

    敏捷引进需要的新技术

    在环境之间保持信息含义和使用的一致性

    提高现存技术投入产出和价值的时间

    如果从web中获取的human-sourced information得到商业价值,根据Hadoop构建sandbox环境将产生良好效果。从技术上看,Hadoop与现存BI系统紧密结合使得信息分为两步流转,关于客户和产品的关键业务数据进入Hadoop环境用于分析,分析任务产生的汇总数据进入BI系统产生报表和决策支持流程。

    如何保证新技术很好的集成到现有的团队,一个好办法就是组件2-3人的团队,一名来自业务,一名理解分析,还有一名来自IT团队的IT专家,他可以访问EDW里的数据并将之集成到新的大数据技术里。

    当你想增加额外的业务需求和增加新功能,平台的优势很快就表现出来,重用信息架构和数据源。相同的数据集成和元数据将在平台的不同部分使用。质量保障将提高数据质量产出,业务用户将扩大对不同类型数据的访问,通过一些通用工具可以获得更加一致性的使用和更高层次的上下文含义。

    实现集成信息平台,根据先前经验,以递增方式在每一步交付业务收益。

     

    展开全文
  • afl过程_动物园AFL

    2020-09-09 07:55:41
    Deployment, management, monitoring, reporting 部署,管理,监控,报告 afl-other-arch — is a set of patches and scripts for easily adding support for various non-x86 architectures for AFL. afl-other-...

    afl过程

    image

    In this article, we're going to talk about not the classical AFL itself but about utilities designed for it and its modifications, which, in our view, can significantly improve the quality of fuzzing. If you want to know how to boost AFL and how to find more vulnerabilities faster – keep on reading!

    在本文中,我们将不讨论经典的AFL本身,而是讨论为其设计的实用程序及其修改,我们认为这可以显着提高模糊测试的质量。 如果您想知道如何提高AFL以及如何更快地发现更多漏洞,请继续阅读!

    什么是AFL,这有什么好处? (What is AFL and What is it Good for?)

    AFL is a coverage-guided, or feedback-based, fuzzer. More about these concepts can be found in a cool paper, “Fuzzing: Art, Science, and Engineering”. Let's wrap up general information about AFL:

    AFL是一种覆盖率导向或基于反馈的模糊器。 有关这些概念的更多信息,请参见“ Fuzzing:艺术,科学和工程”一文 。 让我们总结一下有关AFL的一般信息:

    • It modifies the executable file to find out how it influences coverage.

      它修改了可执行文件,以了解它如何影响覆盖范围。
    • Mutates input data to maximize coverage.

      突变输入数据以最大化覆盖范围。
    • Repeats the preceding step to find where the program crashes.

      重复上一步,找到程序崩溃的位置。

      • It’s highly effective, which is proven by practice.

        它非常有效,实践证明。

        • It’s very easy to use.

          它很容易使用。

    Here's a graphic representation:

    这是一个图形表示:

    image

    If you don't know what AFL is, here is a list of helpful resources for you to start:

    如果您不知道什么是AFL,以下是一些有用的资源供您入门:

    1. The official page of the project.

      该项目的官方页面

    2. afl-training — a short intro to AFL.

      afl培训-AFL的简短介绍。

    3. afl-demo — a simple demo of fuzzing C++ programs with AFL.

      afl-demo —使用AFL模糊化C ++程序的简单演示。

    4. afl-cve — a collection of the vulnerabilities found with AFL (hasn't been updated since 2017).

      afl-cve -AFL发现的漏洞的集合(自2017年以来未更新)。

    5. Here you can read about the stuff AFL adds to a program during its build.

      在这里,您可以了解AFL在其构建过程中添加到程序中的内容。

    6. A few useful tips about fuzzing network applications.

      有关模糊网络应用程序的一些有用技巧。

    At the moment this article was being written, the latest version of AFL was 2.52b. The fuzzer is in active development, and with time some side developments are being incorporated into the main AFL branch and grow irrelevant. Today, we can name several useful accessory tools, which are listed in the following chapter.

    在撰写本文时,AFL的最新版本是2.52b 。 模糊测试器正在积极开发中,随着时间的推移,一些侧向开发已被并入AFL的主要分支中,并且变得无关紧要。 今天,我们可以命名几个有用的附件工具,这些工具将在下一章中列出。

    Rode0day比赛 (Rode0day competition)

    Rode0day competition – an eventt where fuzzers try to find the biggest number of bugs with less time than their opponents in pre-made corpora both with and without access to the source code. In its nature, Rode0day is a battle between different modifications and forks of AFL.举行的Rode0day竞赛-这是一个事件,在这种情况下,无论是否有源代码访问,模糊测试者都试图在比预先制作的语料库中的对手少的时间内找到最多的错误。 从本质上讲,Rode0day是AFL的不同修改与分支之间的一场战斗。

    Some AFL users noted that its author, Michal Zalewski, had apparently abandoned the project since the last modifications date to November 5, 2017. This may be connected to him leaving Google and working on some new projects. So, users started to make new patches themselves for the last current version 2.52b.

    一些AFL用户指出 ,自从上次修改日期至2017年11月5日以来,其作者Michal Zalewski显然已放弃了该项目。这可能与他离开Goog​​le并从事一些新项目有关。 因此,用户开始为最新的当前版本2.52b制作新的补丁程序

    image

    There are also different variations and derivates of AFL, which allows fuzzing Python, Go, Rust, OCaml, GCJ Java, kernel syscalls, or even entire VMs.

    AFL也有不同的变体和派生版本,允许对Python,Go,Rust,OCaml,GCJ Java,内核syscall甚至整个VM进行模糊测试。

    适用于其他编程语言的AFL (AFL for other programming languages)

    python-afl — for Python.

    python-afl —用于Python。

    afl.rs — for fuzzing programs written on Rust.

    afl.rs —用于模糊编写在Rust上的程序。

    afl-fuzz-js — afl-fuzz for javascript.

    afl-fuzz-js — JavaScript的afl-fuzz。

    java-afl — AFL fuzzing for Java.

    java-afl — Java的AFL模糊测试。

    kelinci — another fuzzer for Java (an article on the topic).

    kelinci — Java的另一个模糊器(有关该主题的文章 )。

    javan-warty-pig — AFL-like fuzzer for JVM.

    javan-warty-pig — JVM的类似于AFL的模糊器

    afl-swift — for fuzzing programs written on swift.

    afl-swift —用于模糊以swift编写的程序。

    ocamlopt-afl — for OCaml.

    ocamlopt-afl —用于OCaml。

    sharpfuzz — fuzzer based on afl for .net.

    sharpfuzz —基于.net的afl的模糊器。

    配件工具 (Accessory tools)

    For this chapter, we've collected various scripts and tools for AFL and divided them into several categories:

    在本章中,我们收集了用于AFL的各种脚本和工具,并将它们分为几类:

    Crash processing崩溃处理
    • afl-utils — a set of utilities for automatic processing/analysis of crashes and reducing the number of test cases.

      afl-utils-一组实用程序,用于自动处理/分析崩溃并减少测试用例的数量。

    • afl-crash-analyzer — another crash analyzer for AFL.

      afl-crash-analyzer -AFL的另一个崩溃分析器。

    • fuzzer-utils — a set of scripts for the analysis of results.

      fuzzer-utils-一组用于分析结果的脚本。

    • atriage — a simple triage tool.

      atriage —一个简单的分类工具。

    • afl-kit — afl-cmin on Python.

      afl-kit -Python上的afl-cmin。

    • AFLize — a tool that automatically generates builds of debian packages suitable for AFL.

      AFLize-一种自动生成适用于AFL的debian软件包构建的工具。

    • afl-fid — a set of tools for working with input data.

      afl-fid-一组用于处理输入数据的工具。

    Work with code coverage处理代码覆盖率
    • afl-cov — provides human-friendly data about coverage.

      afl-cov-提供有关覆盖率的人性化数据。

    • count-afl-calls — ratio assessment. Script counts the number of instrumentation blocks in the binary.

      计数呼叫 -比率评估。 脚本计算二进制文件中检测块的数量。

    • afl-sancov — is like afl-cov but uses a clang sanitizer.

      afl-sancov —与afl-cov相似,但使用了叮当消毒剂。

    • covnavi — a script for covering code and analysis by Cisco Talos Group.

      covnavi —一个脚本,用于覆盖Cisco Talos Group的代码和分析。

    • LAF LLVM Passes — something like a collection of patches for AFL that modify the code to make it easier for the fuzzer to find branches.

      LAF LLVM通行证 -类似于AFL补丁程序的集合,这些代码会修改代码以使模糊测试者更容易找到分支。

    A few scripts for the minimization of test cases一些用于最小化测试用例的脚本
    • afl-pytmin — a wrapper for afl-tmin that tries to speed up the process of the minimization of test case by using many CPU cores.

      afl-pytmin — afl-tmin的包装,它试图通过使用许多CPU内核来加速最小化测试用例的过程。

    • afl-ddmin-mod — a variation of afl-tmin based on the ddmin algorithm.

      afl-ddmin- mod-基于ddmin算法的afl-tmin的变体。

    • halfempty — is a fast utility for minimizing test cases by Tavis Ormandy based on parallelization.

      halfempty —是Tavis Ormandy基于并行化用于最小化测试用例的快速实用程序。

    Distributed execution分布式执行
    • disfuzz-afl — distributed fuzzing for AFL.

      disfuzz-afl -AFL的分布式模糊测试。

    • AFLDFF — AFL distributed fuzzing framework.

      AFLDFF — AFL分布式模糊测试框架。

    • afl-launch — a tool for the execution of many AFL instances.

      afl-launch-执行许多AFL实例的工具。

    • afl-mothership — management and execution of many synchronized AFL fuzzers on AWS cloud.

      afl-mothership-在AWS云上管理和执行许多同步的AFL模糊器。

    • afl-in-the-cloud — another script for running AFL in AWS.

      afl-in-the-cloud-用于在AWS中运行AFL的另一个脚本。

    • VU_BSc_project — fuzzing testing of the open source libraries with libFuzzer and AFL.

      VU_BSc_project —使用libFuzzer和AFL对开源库进行模糊测试。

    Recently, there has been published a very good article titled “Scaling AFL to a 256 thread machine”.

    最近,发表了一篇很好的文章,标题为“将AFL扩展到256线程计算机”

    Deployment, management, monitoring, reporting部署,管理,监控,报告
    • afl-other-arch — is a set of patches and scripts for easily adding support for various non-x86 architectures for AFL.

      afl-other-arch —是一组补丁程序和脚本,用于轻松添加对AFL的各种非x86架构的支持。

    • afl-trivia — a few small scripts to simplify the management of AFL.

      afl-trivia-一些简化AFL管理的小脚本。

    • afl-monitor — a script for monitoring AFL.

      afl-monitor-用于监视AFL的脚本。

    • afl-manager — a web server on Python for managing multi-afl.

      afl-manager -Python上的Web服务器,用于管理多afl。

    • afl-tools — an image of a docker with afl-latest, afl-dyninst, and Triforce-afl.

      afl-tools-具有afl-latest,afl-dyninst和Triforce-afl的码头工人的图像。

    • afl-remote — a web server for the remote management of AFL instances.

      afl-remote-用于远程管理AFL实例的Web服务器。

    AFL修改 (AFL Modifications)

    AFL had a very strong impact on the community of vulnerability researchers and fuzzing itself. It's not surprising at all that after some time people started making modifications inspired by the original AFL. Let's have a look at them. In different situations, each of these modifications has its own pros and cons compared to the original AFL.

    AFL对脆弱性研究人员的社区及其模糊性产生了非常强烈的影响。 一段时间之后,人们开始根据原始AFL进行修改,这一点也就不足为奇了。 让我们看看它们。 在不同情况下,与原始AFL相比,每种修改都有其优缺点。

    Almost all mods can be found at hub.docker.com

    几乎所有mod都可以在hub.docker.com上找到

    What for?

    做什么的?

    • Increase the speed and/or code coverage

      提高速度和/或代码覆盖率

      • Algorithms

        演算法
      • Environment

        环境

        • OS

          操作系统
        • Hardware

          硬件
    • Working without source code

      无需源代码即可工作

      • Code emulation

        代码仿真
      • Code instrumentation

        代码检测

        • Static

          静态的
        • Dynamic

          动态
    Default modes of AFL operationAFL操作的默认模式

    Before going on with examining different modifications and forks of AFL, we have to talk about two important modes, which also had been modifications in the past but were eventually incorporated. They are Syzygy and Qemu.

    在继续研究AFL的不同修改和分支之前,我们必须谈论两种重要的模式,它们在过去也曾是修改,但最终被合并。 他们是Syzygy和Qemu。

    Syzygy mode — is the mode of working in instrument.exe Syzygy模式-是Instrument.exe中的工作模式
    instrument.exe --mode=afl --input-image=test.exe --output-image=test.instr.exe
    Syzygy allows to statically rewrite PE32 binaries with AFL but requires symbols and an additional dev to make WinAFL kernel aware.

    Qemu mode — the way it works under QEMU can be seen in “Internals of AFL fuzzer — QEMU Instrumentation”. The support of working with binaries with QEMU was added to upstream AFL in Version 1.31b. AFL QEMU mode works with the added functionality of binary instrumentation into qemu tcg (a tiny code generator) binary translation engine. For that, AFL has a build script qemu, which extracts the sources of a certain version of qemu (2.10.0), puts them onto several small patches and builds for a defined architecture. Then, a file called afl-qemu-trace is created, which is in fact a file of user mode emulation of (emulation of only executable ELF files) qemu-. Thus, it is possible to use fuzzing with feedback on elf binaries for many different architectures supported by qemu. Plus, you get all the cool AFL tools, from the monitor with information about the current session to advanced stuff like afl-analyze. But you also get the limitations of qemu. Also, if a file is built with toolchain using hardware SoC features, which launches the binary and is not supported by qemu, fuzzing will be interrupted as soon as there is a specific instruction or a specific MMIO is used.

    Qemu模式-它在QEMU下的工作方式可以在“ AFL模糊器的内部-QEMU Instrumentation”中看到。 在版本1.31b中向上游AFL添加了使用QEMU处理二进制文件的支持。 AFL QEMU模式与qemu tcg(微型代码生成器)二进制翻译引擎中添加的二进制检测功能一起使用。 为此,AFL具有一个构建脚本qemu,该脚本可提取某个版本的qemu(2.10.0)的源代码,并将其放到几个小补丁中并为定义的体系结构构建。 然后,创建了一个名为afl-qemu-trace的文件,它实际上是qemu-的用户模式仿真文件(仅可执行ELF文件的仿真文件)。 因此,对于qemu支持的许多不同体系结构,可以将模糊与对elf二进制文件的反馈一起使用。 此外,您还可以获得所有很棒的AFL工具,从带有有关当前会话的信息的监视器到afl-analyze等高级内容。 但是您也得到qemu的限制。 另外,如果使用硬件SoC功能通过工具链构建文件,该文件会启动二进制文件,而qemu不支持该文件,则一旦有特定指令或使用特定MMIO,模糊处理就会被中断。

    Here's another interesting fork of the qemu mode, where the speed was increased 3-4 times with TCG code instrumentation and cashing.

    这是qemu模式的另一个有趣的分支 ,其中通过TCG代码检测和兑现将速度提高了3-4倍。

    Forks前叉

    The appearance of forks of AFL is first of all related to the changes and improvements of the algorithms of the classic AFL.

    AFL的前叉的出现首先与经典AFL的算法的更改和改进有关。

    • pe-afl — A modification for fuzzing PE files that have no source code in the Windows OS. For its operation, the fuzzer analyzes a target program with IDA Pro and generates the information for the following static instrumentation. An instrumented version is then fuzzed with AFL.

      pe-afl —一种用于模糊处理Windows OS中没有源代码的PE文件的修改。 为了进行操作,模糊器使用IDA Pro分析目标程序,并为以下静态仪器生成信息。 然后使用AFL对已安装的版本进行模糊处理。

    • afl-cygwin — is an attempt to port the classic AFL to Windows with Cygwin. Unfortunately, it has many bugs, it's very slow, and the development of has been abandoned.

      afl-cygwin-试图通过Cygwin将经典的AFL移植到Windows。 不幸的是,它有很多错误,非常慢,并且已被放弃。

    • AFLFast (extends AFL with Power Schedules) — one of the first AFL forks. It has added heuristics, which allow it to go through more paths in a short time period.

      AFLFast (用功率计划表扩展了AFL)—第一个AFL分支之一。 它增加了启发式功能,使它可以在短时间内通过更多路径。

    • FairFuzz — an extension for AFL, that targets rare branches.

      FairFuzz -AFL的扩展,针对稀有分支。

    • AFLGo — is an extension for AFL meant for getting to certain parts of code instead of full program coverage. It can be used for testing patches or newly added fragments of code.

      AFLGo —是AFL的扩展,旨在获取代码的某些部分而不是完整的程序覆盖范围。 它可以用于测试补丁或新添加的代码片段。

    • PerfFuzz — an extension for AFL, that looks for test cases which could significantly slow down the program.

      PerfFuzz — AFL的扩展,用于寻找可能会严重降低程序速度的测试用例。

    • Pythia — is an extension for AFL that is meant to forecast how hard it is to find new paths.

      Pythia-是AFL的扩展,旨在预测寻找新路径的难度。

    • Angora — is one of the latest fuzzers, written on rust. It uses new strategies for mutation and increasing the coverage.

      安哥拉 -是最新的模糊测试工具之一,用Rust书写。 它使用新策略进行突变并增加覆盖范围。

    • Neuzz — fuzzing with neural netwoks.

      Neuzz-用神经网络模糊。

    • UnTracer-AFL — integration of AFl with UnTracer for effective tracing.

      UnTracer-AFL —将AFl与UnTracer集成以进行有效跟踪。

    • Qsym — Practical Concolic Execution Engine Tailored for Hybrid Fuzzing. Essentially, it is a symbolic execution engine (basic components are realized as a plugin for intel pin) that together with AFL performs hybrid fuzzing. This is a stage in the evolution of feedback-based fuzzing and calls for a separate discussion. Its main advantage is that can do concolic execution relatively fast. This is due to the native execution of commands without intermediate representation of code, snapshots, and some heuristics. It uses the old Intel pin (due to support problems between libz3 and other DBTs) and currently can work with elf x86 and x86_64 architectures.

      Qsym —专为混合模糊测试而设计的实用Concolic执行引擎。 本质上,它是一个符号执行引擎(基本组件实现为intel引脚的插件),与AFL一起执行混合模糊测试。 这是基于反馈的模糊测试发展的一个阶段,需要进行单独的讨论。 它的主要优点是可以相对较快地执行condicate执行。 这是由于命令的本机执行而没有代码,快照和某些启发式的中间表示。 它使用旧的Intel引脚(由于支持libz3和其他DBT之间的问题),目前可以与elf x86和x86_64体系结构一起使用。

    • Superion — Greybox fuzzer, an obvious advantage of which is that along with an instrumented program it also gets specification of input data using the ANTLR grammar and after that performs mutations with the help of this grammar.

      Superion — Greybox模糊器,一个明显的优点是,它与仪器化程序一起,也可以使用ANTLR语法获取输入数据的规范,然后在此语法的帮助下执行变异。

    • AFLSmart — Another Graybox fuzzer. As input, it gets specification of input data in the format used by the Peach fuzzer.

      AFLSmart-另一个Graybox模糊测试器。 作为输入,它以桃子模糊器使用的格式获取输入数据的规范。

    There are many research papers dedicated to the implementation of the new approaches and fuzzing techniques where AFL is modified. Only white papers are available, so we didn't even bother mentioning those. You can google them if you want. For example, some of the latest are CollAFL: Path Sensitive Fuzzing, EnFuzz, «Efficient approach to fuzzing interpreters», ML for AFL.

    有许多研究论文致力于在AFL修改后实施新方法和模糊技术。 只有白皮书可用,因此我们什至不用提那些。 您可以根据需要搜索它们。 例如,最新的一些是CollAFL:Path Sensitive FuzzingEnFuzz《用于模糊解释器的有效方法》 ,AFL ML

    Modifications based on Qemu基于Qemu的修改
    • TriforceAFL — AFL/QEMU fuzzing with full emulation of a system. A fork by nccgroup. Allows fuzzing the entire OS in qemu mode. It is realized with a special instruction (aflCall (0f 24)), which was added in QEMU x64 CPU. Unfortunately, it's no longer supported; the last version of AFL is 2.06b.

      TriforceAFL — AFL / QEMU模糊化并带有完整的系统仿真。 nccgroup的一个fork。 允许在qemu模式下模糊整个操作系统。 它是通过特殊指令(aflCall(0f 24))实现的,该指令已添加到QEMU x64 CPU中。 不幸的是,它不再受支持。 AFL的最新版本是2.06b。

    • TriforceLinuxSyscallFuzzer — the fuzzing of Linux system calls.

      TriforceLinuxSyscallFuzzer -Linux系统调用的模糊处理。

    • afl-qai — a small demo project with QEMU Augmented Instrumentation (qai).

      afl-qai — QEMU增强仪器(qai)的一个小型演示项目。

    A modification based on KLEE基于KLEE的修改 kleefl — for generating test cases by means of symbolic execution (very slow on big programs).kleefl —用于通过符号执行生成测试用例(在大型程序上非常慢)。 A modification based on Unicorn基于独角兽的修改 afl-unicorn — allows for fuzzing of fragments of code by emulating it on afl-unicorn-通过在Unicorn Engine. We successfully used this variation of AFL in our practice, on the areas of the code of a certain RTOS, which was executed on SOC, so we couldn't use QEMU mode. The use of this modification is justified in the case when we don't have sources (we can't build a stand-alone binary for the analysis of the parser) and the program doesn't take input data directly (for example, data is encrypted or is signal sample like in a CGC binary), then we can reverse and find the supposed places-functions, where the data is procced in a format convenient for the fuzzer. This is the most general/universal modification of AFL, i.e. it allows fuzzing anything. It's independent of architecture, sources, input data format, and binary format (the most striking example of bare-metal — just fragments of code from the controller's memory). The researcher first examines this binary and writes a fuzzer, which emulates the state at the input of the parser procedure. Obviously, unlike AFL, this requires a certain examination of binary. For bare-metal firmware, like Wi-FI or baseband, there are certain drawbacks that you need to keep in mind:Unicorn Engine上进行仿真来模糊代码片段。 我们在实践中成功地在某个RTOS的代码区域(已在SOC上执行)中成功使用了AFL的这种变体,因此无法使用QEMU模式。 如果没有源(无法为解析器的分析构建独立的二进制文件)并且程序没有直接获取输入数据(例如,数据),则使用此修改是合理的是加密的,还是像CGC二进制文件中那样的信号样本),那么我们可以反转并找到假定的places-functions,在该函数中,数据以便于Fuzzer使用的格式进行处理。 这是AFL的最通用/通用的修改形式,即它允许对任何内容进行模糊测试。 它独立于体系结构,源,输入数据格式和二进制格式(最显着的裸机示例–只是控制器内存中的代码片段)。 研究人员首先检查此二进制文件并编写一个模糊器,以模拟解析器过程输入时的状态。 显然,与AFL不同,这需要对二进制文件进行一定的检查。 对于Wi-FI或基带之类的裸机固件,需要牢记某些缺点:
    1. We have to localize the check of the control sum.

      我们必须本地化控制和的检查。
    2. Keep in mind that the state of the fuzzer is a state of memory that was saved in the memory dump, which can prevent the fuzzer from getting to certain paths.

      请记住,模糊器的状态是保存在内存转储中的内存状态,这可能会阻止模糊器到达某些路径。
    3. There's no sanitation of calls to dynamic memory, but it can be realized manually, and it will depend on RTOS (has to be researched).

      没有动态调用动态内存的方法,但是可以手动实现,这取决于RTOS(有待研究)。
    4. Intertask RTOS interaction is not emulated, which can also prevent finding certain paths.

      不模拟任务间RTOS交互,这也可能阻止找到某些路径。

    An example of working with this modification “afl-unicorn: Fuzzing Arbitrary Binary Code” and “afl-unicorn: Part 2 — Fuzzing the ‘Unfuzzable’”.

    使用此修改的示例“ afl-unicorn:模糊任意二进制代码”“ afl-unicorn:第2部分-模糊'Unfuzzable'”

    Before we go on to the modifications based on the frameworks of dynamic binary instrumentation (DBI), let's not forget that the highest speed of these frameworks is shown by DynamoRIO, Dynlnst and, finally, PIN.

    在继续进行基于动态二进制工具(DBI)框架的修改之前,请不要忘记DynamoRIO,Dynlnst和PIN最终显示了这些框架的最高速度。

    PIN-based modifications基于PIN的修改
    • aflpin — AFL with Intel PIN instrumentation.

      aflpin —带有Intel PIN工具的AFL。

    • afl_pin_mode — another AFL instrumentation realized through Intel PIN.

      afl_pin_mode —通过Intel PIN实现的另一种AFL仪器。

    • afl-pin — AFL with PINtool.

      afl-pin —带PINtool的AFL。

    • NaFl — A clone (of the basic core) of AFL fuzzer.

      NaFl — AFL 模糊器的 (基本核心)克隆。

    • PinAFL — the author of this tool tried to port AFL to Windows for the fuzzing of already compiled binaries. Seems like it was done overnight just for fun; the project has never gone any further. The repository doesn't have sources, only compiled binaries and launch instruction. We don't know which version of AFL it's based on, and it only supports 32-bit applications.

      PinAFL-该工具的作者试图将AFL移植到Windows,以模糊已编译的二进制文件。 似乎是为了娱乐而过夜。 该项目从未进行过。 该存储库没有源,只有编译的二进制文件和启动指令。 我们不知道它基于哪个版本的AFL,它仅支持32位应用程序。

    As you can see, there are many different modifications, but they are not very very useful in real life.

    如您所见,有许多不同的修改,但是它们在现实生活中不是很有用。

    Dyninst-based modifications基于Dyninst的修改 afl-dyninst — American Fuzzy Lop + Dyninst == AFL balckbox fuzzing. The feature of this version is that first a researched program (without the source code) is instrumented statically (static binary instrumentation, static binary rewriting) with Duninst, and then is fuzzed with the classic AFL that thinks that the program is build with afl-gcc/afl-g++/afl-as ;) As a result, it allows is to work with a very good productivity without the source code — It used to be at 0.25x speed compared to a native compile. It has a significant advantage compared to QEMU: it allows the instrumentation of dynamic linked libraries, while QEMU can only instrument the basic executable file statically linked with libraries. Unfortunately, now it's only relevant for Linux. For Windows support, changes to Dyninst itself are needed, which is afl-dyninst -American Fuzzy Lop + Dyninst == AFL黑箱模糊测试。 此版本的特点是,首先使用Duninst对研究的程序(无源代码)进行静态检测(静态二进制检测,静态二进制重写),然后对经典的AFL感到困惑,认为该程序是使用afl-构建的结果是,它允许在没有源代码的情况下以非常好的生产率工作—与本地编译相比,它的速度为0.25倍。 与QEMU相比,它具有显着的优势:它允许检测动态链接库,而QEMU仅可以检测与库静态链接的基本可执行文件。 不幸的是,现在它仅与Linux有关。 为了获得Windows支持,需要对Dyninst本身进行更改,此操作being done.已完成

    There's yet another fork with improved speed and certain features (the support of AARCH64 and PPC architectures).

    还有另一个速度提高,某些功能(AARCH64和PPC架构的支持)。

    Modifications based on DynamoRIO基于DynamoRIO的修改
    • drAFL — AFl + DynamoRIO – fuzzing without sources on Linux.

      drAFL — AFl + DynamoRIO –在Linux上没有源时进行模糊测试。

    • afl-dr — another realization based on DynamoRIO which very well described on Habr.

      afl- dr-基于DynamoRIO的另一种实现,在Habr上有很好的描述。

    • afl-dynamorio — a modification by vanhauser-thc. Here's what he says about it: «run AFL with DynamoRIO when normal afl-dyninst is crashing the binary and qemu mode -Q is not an option». It supports ARM and AARCH64. Regarding the productivity: DynamoRIO is about 10 times slower than Qemu, 25 times slower than dyninst, but about 10 times faster than Pintool.

      afl-dynamorio -vanhauser-thc的修改。 他是这样说的:“当普通afl-dyninst使二进制文件崩溃且qemu模式-Q不可行时,用DynamoRIO运行AFL”。 它支持ARM和AARCH64。 关于生产率:DynamoRIO比Qemu慢10倍,比dyninst慢25倍,但比Pintool快10倍。

    • WinAFL — the most famous AFL fork Windows. (DynamoRIO, also syzygy mode). It was only a matter of time for this mod to appear because many wanted to try AFL on Windows and apply it to apps without sources. Currently, this tool is being actively improved, and regardless of a relatively outdated code base of AFL (2.43b when this article is written), it helped to find several vulnerabilities (CVE-2016-7212, CVE-2017-0073, CVE-2017-0190, CVE-2017-11816). The specialists from Google Zero Project team and MSRC Vulnerabilities and Mitigations Team are working in this project, so we can hope for the further development. Instead of compilation time instrumentation, the developers used dynamic instrumentation(based on DynamoRIO), which significantly slowed down the execution of the analyzed software, but the resulting overhead (doubled) is comparable to that of the classic AFL in binary mode. They also solved the problem of fast process launch, having called it persistent fuzzing mode; they choose the function to fuzz (by the offset inside the file or by the name of function present in the export table) and instrument it so that it could be called in the cycle, thus launching several input data samples without restarting the process. An article came out recently, describing how the authors found around 50 vulnerabilities in about 50 days using WinAFL. And shorty before it was published, Intel PT mode had been added to WinAFL; detalis can be found here.

      WinAFL-最著名的AFL前叉Windows。 (DynamoRIO,也是syzygy模式)。 这个mod的出现只是时间问题,因为许多人想在Windows上尝试AFL并将其应用于没有源代码的应用程序。 目前,此工具正在积极改进中,无论AFL的代码库相对过时(撰写本文时为2.43b),它都有助于发现一些漏洞(CVE-2016-7212,CVE-2017-0073,CVE- 2017年1月90日,CVE-2017-11816)。 Google零项目团队和MSRC漏洞与缓解团队的专家正在从事此项目,因此我们可以希望进一步发展。 开发人员使用了动态工具(基于DynamoRIO)来代替编译时工具,这大大减慢了分析软件的执行速度,但是所产生的开销(增加了一倍)与二进制模式下的经典AFL相当。 他们还称其为持续模糊模式,从而解决了进程快速启动的问题。 他们选择要模糊化的函数(通过文件内的偏移量或通过导出表中存在的函数名称)并进行检测,以便可以在循环中调用它,从而在不重新启动过程的情况下启动了多个输入数据样本。 最近发表一篇文章 ,描述了作者如何使用WinAFL在大约50天内发现了大约50个漏洞。 而且在发布之前不久,Intel PT模式已添加到WinAFL中。 详细资料可以在这里找到。

    An advanced reader could notice that there are modifications with all the popular instrumentation frameworks except for Frida. The only mention of the use of Frida with AFL was found in «Chizpurfle: A Gray-Box Android Fuzzer for Vendor Service Customizations». A version of AFL with Frida is really useful because Frida supports several RISC architectures.

    高级读者可能会注意到,除了Frida之外,所有流行的检测框架都进行了修改。 在“ Chizpurfle:用于供应商服务定制的灰色盒子Android Fuzzer”中找到了将Frida与AFL一起使用的唯一提及。 带有Frida的AFL版本非常有用,因为Frida支持多种RISC体系结构。

    Many researches are also looking forward to the release of DBI Scopio framework by the creator of Capstone, Unicorn, and Keystone. Based on this framework, the authors have already created a fuzzer (Darko) and, according to them, successfully use it to fuzz embedded devices. More on this can be found in «Digging Deep: Finding 0days in Embedded Systems with Code Coverage Guided Fuzzing».

    许多研究还期待Capstone,Unicorn和Keystone的创建者发布DBI Scopio框架。 基于此框架,作者已经创建了一个模糊器(Darko),并据此成功地将其用于模糊嵌入式设备。 有关更多信息,请参见《深入挖掘:使用代码覆盖率引导的模糊测试在嵌入式系统中查找0days》

    Modifications, based on processor hardware features根据处理器硬件功能进行修改

    When it comes to AFL modifications with the support of processor hardware features, first of all, it allows fuzzing kernel code, and secondly — it allows for much faster fuzzing of apps without the source code.

    在支持处理器硬件功能的情况下进行AFL修改时,首先,它可以对内核代码进行模糊处理,其次,它可以在没有源代码的情况下对应用进行快速模糊处理。

    And of course, speaking about processor hardware features, we are most of all interested in Intel PT (Processor Tracing). It is available from the 6th generation of processors onwards (approximately, since 2015). So, in order to be able to use the fuzzers listed below, you need a processor supporting Intel PT.

    当然,谈到处理器的硬件功能,我们最感兴趣的是英特尔PT (处理器跟踪)。 从第六代处理器开始可用(大约从2015年开始)。 因此,为了能够使用下面列出的模糊器,您需要支持Intel PT的处理器。

    结论 (Conclusion)

    As you can see, the area of AFL modifications is actively evolving. Still, there is room for experiments and creative solutions; you can create a useful and interesting new modification.

    如您所见,AFL修改领域正在积极发展。 尽管如此,仍有实验和创新解决方案的空间。 您可以创建一个有用且有趣的新修改。

    Thanks for reading us and good luck with fuzzing!

    感谢您阅读我们,祝您好运!

    合著者: (Co-author:)

    Nikita Knyzhov

    尼基塔·克尼佐夫(Nikita Knyzhov)

    presler普雷斯勒 P.S. Thanks to the research center team, without whom this article would be impossible.PS感谢研究中心团队,没有他们,本文将是不可能的。

    翻译自: https://habr.com/en/company/dsec/blog/449134/

    afl过程

    展开全文
  • 现代化动物园管理系统日趋复杂,传统的以手工方式为主的管理操作模式,局限性日趋突显:宣传手段单一,管理效率低,系统采用了jsp的mvc框架,SSM(springMvc+spring+Mybatis)框架进行开发,本系统使用mysql,独立运行,不...

    现代化动物园管理系统日趋复杂,传统的以手工方式为主的管理操作模式,局限性日趋突显:宣传手段单一,管理效率低,系统采用了jsp的mvc框架,SSM(springMvc+spring+Mybatis)框架进行开发,本系统使用mysql,独立运行,不依附于其他系统,可移植,可扩展。代码的编写规范,注解较多,同时也是计算机毕业设计中一项重要的参考资料等。本作品包调试安装,并提供所有运行工具及软件下载!

    本系统使用的角色主要有系统管理员、注册用户,本系统分为系统前台和系统后台,首先在系统前台,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统前台,查看论坛交流、动物展览、原生动物展览、无动物展览、动物展览等栏目信息,进行和管理员交流,发布帖子、回复帖子,在前台用户可以通过标题和类别进行前台信息的搜索,注册用户可以登录个人中心进行个人资料管理、个人帖子信息查询等功能。
    后台主要由管理员使用,以管理员的身份在登录页面输入账号和密码,经过数据库身份验证,验证成功后登录系统主页,可以使用系统用户管理(系统用户录入、删除、修改、登录密码修改、注册用户管理)、动物展览管理(动物展览录入、删除、修改)、动物展览动物管理(动物录入、删除、修改)、无动物展览管理(无动物录入、删除、修改)、动物展览管理(动态录入、删除、修改)、论坛管理(论坛版块录入、删除、修改)、帖子信息管理、新闻动态管理(新闻动态录入、删除、修改)、系统管理(友情链接录入、删除、修改、系统公告设置)等功能操作。同时管理员可以通过关键字搜索可以搜索相应的信息,打印各种详细信息

    请添加图片描述
    请添加图片描述
    请添加图片描述
    请添加图片描述
    目录
    第一章 绪论 5
    1.1 研究目的 5
    1.2 研究现状 5
    1.3 论文结构 5
    第二章系统分析 7
    2.1 需求分析 7
    2.2流程分析 8
    2.2.1数据流程图 8
    2.2.2程序流程图 11
    第三章 开发技术介绍 16
    3.1 UML语言 16
    3.2 jsp技术介绍 16
    3.3 sqlserver数据库介绍 16
    3.4 html 17
    3.5 javascript 17
    3.6 B/S结构 17
    第四章 系统设计 19
    4.1系统网络架构设计 19
    4.2功能设计 19
    4.3 数据库模型 20
    4.4 数据库表设计 22
    第五章 系统实现 25
    5.1 java与sqlserver数据库连接 25
    5.2系统功能实现 25
    5.2.1前台页面的实现 25
    5.2.2登录模块的实现 26
    5.2.3动物信息管理模块 27
    5.2.4饲养员信息管理模块 29
    5.2.5园区活动管理模块 30
    第六章 系统测试 32
    6.1测试目的 32
    6.2测试用例 32
    6.2.1登录测试 32
    6.2.2注册测试 32
    6.2.3系统简介测试 33
    6.2.4帖子管理测试 33
    结论 35
    参考文献 36
    致谢 37

    展开全文
  • 接口规范说起来大,其实也就那么几个部分,接口规范、接口管理工具、接口文档编写、开发文档编写。 接口规范定义 一、协议规范 为了确保不同系统/模块间的数据交互,需要事先约定好通讯协议,如:TCP、HTTP、...
  • 方法请自行根据下面的运行截图封装,要求代码规范。 4.1 【5分】系统菜单如下: 4.2 【10分】用户选择菜单1,截图如下: 4.3 【15分】用户选择菜单2,截图如下: 注意:不允许对原数组animals直接进行...
  • 西宁野生动物园“智慧景区”体验“智慧景区”参观流程一、参观动物园大门1、体验游客入园三种方式:二维码门票入园、网上购票手机彩信入园、网上购票×××入园;2、参观并试用出入口三棍闸机、摆闸等设备的人数统计...
  • 你可能没有注意到, 在软件开发的王国里存在着一个有趣的动物园, 其中动物之多, 范围之广, 不花个几年功夫是逛不过来的。 Linux 自1991年诞生以来, 小企鹅迅速攻城拔寨, 虽然没有击败微软占领桌面...
  • 近年来动物园管理漏洞事件频频出现,关于动物园“猛兽”出逃事件,近十年来国内已经发生多起,在上海、常州、厦门、广州等多地的动物园,都曾发生过类似事件,情节更严重的甚至还出现人员伤亡。 目前为止,...
  • 有时候,公司管理规范、运作混乱自有好处,在特定的阶段里,只有残缺才是美。 作为个体的集合,组织就如一个大树林,不同的鸟儿聚在其中,构成了一个复杂的生态环境。面对于此,有效管理决不是一个单纯过程,它...
  • [转]管理的最高境界不是完美

    千次阅读 2012-08-23 14:51:35
    有时候,公司管理规范、运作混乱自有好处,在特定的阶段里,只有残缺才是美。   作为个体的集合,组织就如一个大树林,不同的鸟儿聚在其中,构成了一个复杂的生态环境。面对于此,有效管理决不是一个单纯过程...
  • 有时候,公司管理规范、运作混乱自有好处,在特定的阶段里,只有残缺才是美。 作为个体的集合,组织就如一个大树林,不同的鸟儿聚在其中,构成了一个复杂的生态环境。面对于此,有效管理决不是一个单纯过程,它...
  • (转贴)有时候,公司管理规范、运作混乱自有好处,在特定的阶段里,只有残缺才是美。 作为个体的集合,组织就如一个大树林,不同的鸟儿聚在其中,构成了一个复杂的生态环境。面对于此,有效管理决不是一个单纯过程,它...
  • python代码规范

    万次阅读 多人点赞 2018-08-16 02:59:29
    为什么要有代码规范? 1.做哪一行都有高低级别之...5.国家为啥要有法律,就是为了管理 python代码规范 1.缩进 4个空格,在linux系统下体现比较明显,IDE会将Tab转成4个空格,放心使用 2.行的最大长度 每行代码...
  • 规范企业运作中的会议时间、决策内容、决策方式,营造工作与会议、决策与会议及报告与会议的和谐体系,有效提高企业决策效率; 【培训方式】 本课程体验式学习的方式,学员带着培训任务来学习,老师现场讲解加辅导...
  • RESTful 接口规范 TOKEN 安全通讯 自动生成 entity 接口实体类 dio 封装 localstorage 本地存储 密码加密 1. 接口管理 1.1 前后端分离、契约模式 1.2 常见接口管理工具 yapi https://github.com/YMFE/yapi ...
  • 职业经理人的团队管理

    千次阅读 2016-10-11 14:55:32
    一,什么是团队管理?  举个简单的例子:如果有一车沙从大厦顶上倒下来,对地面的冲击是不太大的,如果把一整车已凝固成整块的混凝土从大厦上倒下来,其结果就大不一样。团队管理就是把一车散沙变成已凝固成整块的...
  • jsp+servlet+bootstrap开发java web在线考试管理系统 项目描述 考试对于考试管理者来说无疑是一件非常繁重的工作,在线考试管理系统的出现,使考试变成一件简单易行的事情。 本系统实现学生在线考试、查询成绩、...
  • 团队管理小结一

    2020-08-12 12:18:04
    示例 GET /zoos:列出所有动物园 POST /zoos:新建一个动物园 GET /zoos/ID:获取某个指定动物园的信息 PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息) PATCH /zoos/ID:更新某个指定动物园的...
  • API接口管理平台解决方案

    千次阅读 2020-12-05 16:54:06
    PUT/PATCH一般向“单个资源”型uri发起 PUT /animals/1 DELETE:删除 DELETE /zoos/1/animals //删除id为1的动物园内的所有动物 HEAD / OPTION 用的不多,就不多解释了。 安全性和幂等性 安全性:不会改变资源状态...
  • API 接口开发规范

    2018-09-10 19:40:07
    整体规范建议采用RESTful 方式来实施。 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全。 域名 应该尽量将API部署在专用域名之下。https://api.example.com 如果确定API很简单,不会有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 776
精华内容 310
关键字:

动物园管理规范