首页 > 其他分享 >一文了解软件分析代码审计

一文了解软件分析代码审计

时间:2024-10-25 12:18:11浏览次数:3  
标签:审计 Based 一文 模型 接口 设计 构件 软件

就是要打骨折icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect

《Java代码审计》icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect

《Web安全》icon-default.png?t=O83Ahttp://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect

个人认为如果掌握软件工程相关知识,代码审计会更清晰,更具全局观

以下的英文内容均引用自 《软件工程》[罗杰] 的英文原版

1.Software Process:软件过程

  • 强调的是整个软件开发过程;

  • 软件过程是一种规范化和组织化的方法,用于管理和指导软件项目的全生命周期,包括需求分析,设计,编码,测试,部署,维护

1.1 过程模型

研究的是整个软件开发的流程

  • 瀑布

  • 快速原型

  • 增量

  • ....

2.Modeling:建模

以下才是分析软件的重点

建模的目的是为了更好的展示

2.1 需求分析

需求模型

  1. 数据模型 :用实体-联系图,UML类图表示

  2. 功能模型 :数据流图(基础),顺序图,

  3. 行为模型:状态图(responds to external events ) 活动图(responds to internal events)

不同阶段,可以用同种类型的模型,如体系结构设计(分析) 也可以用功能模型,行为模型

实际审计软件时,在“需求分析”阶段我关注的主要是官网的提供的功能展示

2.2 设计

Design Concept

  1. Abstraction

  2. Architecture :体系结构,架构

  3. Patterns
    目的:

    • (1)模式是否适用于当前的工作;

    • (2)模式是否能够复用(因此节约设计时间);

    • (3)模式是否能够用于指导开发一个相似的但功能或结构不同的模式。

  4. Separation of Concerns

  5. Modularity

  6. Information Hiding

  7. Functional Independenc

  8. Stepwise Refinement:逐步细化

  9. Refactor
    不改变 代码(或设计)的外部行为,但是改善内部的结构

Design Model

image

以后分析软件就可以用以下的两个维度去分析

Abstraction dimension

需求分析模型----->设计模型

Process dimension
  1. 体系结构(软件架构)

  2. 接口设计(用户接口(前端页面UI) ;外部接口(整个软件对外的接口,如作为第三方被其他系统调用);内部接口(体系机构内部构件之间的接口,构件内部类之间的接口)

  3. 构件级设计

  4. 部署级设计: 也被称作物理级

【注意】==过程维度可以应用在不同抽象级别,如图中”设计模型“还可以再细分为 Component-Based和Class-Based两个抽象级别==,不同级别都有对应的体系结构,接口设计,构件(模块),部署维度,后文的”分析方法“可以体现

3. Architecture Design :Component-Based

体系机构的设计考虑了架构风格,构件的结构和属性以及系统内部构件的内部关系

It considers the architectural style that the system will take, the structure and properties of the components that constitute the system,and the interrelationships that occur among all architectural components of a system. --163

3.1 Architecture Style

体系结构风格 描述 系统类别,包括

-- p169

(1)一组执行系统所需功能的构件(例如,数据库、计算模块);

(2)一组实现构件间“通信、合作和协调”的连接件

(3)定义构件如何集成为系统的约束

(4)能够使设计者通过分析系统组成元素的已知属性来理解系统整体性质的语义模型

分类

  1. Data-Centered

    image

  2. Data-flow

    image

  3. Main program/subprogram

    image

  4. Object-oriented

    image

  5. Layered
     

    image


    eg:MVC

    image

3.2 视图模型

  • 解决了如何表示软件架构,即如何对软件架构建模的问题

  • 根据建模的侧重点不同分成了多重模型

  • 界限不是很清晰,有时候不同类型的UML图有多种视图模型的影子

模型分类

  1. 结构模型
    以构件(Component),连接件(Connector)和其他概念来刻画体系结构,上图的mvc就有描述Controller,Model,View的等组件

  2. 动态模型 描述系统大颗粒行为性质,如上图mvc的描述了整个系统的行为,

  3. 过程模型
    步骤,顺序,eg:时序图

  4. 功能模型

功能模型认为体系机构由一组功能构件按照层次组成,下层向上层提供服务,如上面的层次结构图(9-5)就是一种功能模型

3.3 分析方法:

  1. ==分析整个软件的外部接口,+软件的内部接口(构件的外部接口)从而确定整体功能设计==

  2. 找到软件内部接口对应的组件 ,观察组件的分布

  3. 逐个分析组件,从而得出组件之间的关系

该方法在构件分析中同样适用,只是颗粒度不同而已

4. Component Design : Class-Based

构件是什么?

  1. 构件是相对概念,一个软件可以是一个构件,一个构件也可以是一个包含多个构件的软件

a sofware component can be something as simple as a program module or an object-oriented class,but it can also be extended to include databases and "middleware" that enable the configuration of a network of clients and servers

  1. "a modular,deplyable,and replaceable part of a system that encapsulates implementation and exposes a set of interfaces"\

  2. Component-level design defines the data structures,algorithms,interface characteritics,and communication mechanismsallocated to each software component

    image

  3. module == component

module是比较老的叫法

4.1 设计原则(Class-Based)

  1. OCP:开闭原则

A module [component] should be open for extension but closed for modification

  1. LSP:替换原则

Subclasses should be substitutable for their base classes

  1. DIP:依赖倒置原则

Denpend on abstractions. Do not depend on concretions(具体实现)

比如spring :Ioc是DIP的实现
4. ISP:接口分离原则

Many client-specific interfaces are better than one general purpose interface

  1. 其他:P196

4.2 具体步骤:构件的视图建模(Class-Based)

  • ==分析方法与Component-Based 的分析方法一致==,只是级别不同。

    1. 分析接口结构,确定整体功能设计

    2. 找到接口对应的实现模块

    3. 分析模块内类的关系

以下为具体分析某个模块中的类的方式,一般不用这么具体,可以先从继承结构图开始分析

  1. 详细描述操作(方法)的处理流 --- 活动图/伪代码

    image

  2. 描述持久性的数据源(database/file) 确认处理它们的类

  3. 描述构件的行为 --状态图

    image

  4. 描述部署图 (包结构,包在设备的分布

以上内容其实呼应着体系结构中多种视图模型,只是抽象级别不同,在构件设计中,也就是按照侧重点不同,对构件进行以类为单位的(Class-Based)的建模

4.3 设计模式

  • GoF(Gang of Four)设计模式主要是类级别的(Class-based)设计模式,通常被视为组件设计模式。包括创建模式、结构模式和行为模式,和视图建模中主要的侧重点(结构,行为)相对应,同时它非常接近编码实现阶段

  • ==J2EE 设计模式主要被视为架构设计模式(component-based)==


标签:审计,Based,一文,模型,接口,设计,构件,软件
From: https://blog.csdn.net/jxiang213/article/details/143231399

相关文章

  • 2024年软件设计师中级(软考中级)详细笔记【7】面向对象技术(上)(分值10+)
    目录前言第7章面向对象技术(上)7.1面向对象基础(3-4分)7.1.1面向对象的基本概念7.1.2面向对象分析(熟记)7.1.3面向对象设计7.1.4面向对象程序设计7.1.5面向对象测试7.2UML(3~4分)7.2.1事务7.2.2关系7.2.2.1多重度7.2.3UML中的的图结语前言在备考软件设......
  • 都有哪些较好用的项目管理软件
    项目管理软件是一种工具,专门用于项目计划、时间安排、资源分配和变更管理。目前市场上有很多优质的项目管理软件,如Trello、Asana、Slack、Taskworld等。它们各有特色,Trello擅长卡片式规划和进度跟踪,Asana的任务安排和团队协作有一定优势,Slack的实时聊天功能强大,而Taskworld则在项......
  • 巴别鸟、钉钉、Tower、明道,这些协作软件都各有什么特点
    协作软件如巴别鸟、钉钉、Tower、明道都有助于团队的协同工作。它们的核心特点包括:1、巴别鸟:以项目管理和团队沟通为核心;2、钉钉:集成办公自动化和远程沟通;3、Tower:强调敏捷开发和项目管理;4、明道:着重于企业管理和协同。其中,巴别鸟注重的是项目管理功能,帮助团队规划、执行和跟踪项......
  • 美团商家电话采集神器 批量导出美团商户联系方式软件
    文章分享作者:1143561141(v同q)使用Python编写美团商家电话采集神器,批量导出美团商户联系方式软件引言:美团商家电话采集神器是一款利用Python编写的脚本工具,旨在批量采集美团商家的联系方式,并将结果导出为Excel文件。本文将介绍如何使用Python编写此工具,并提供相应的代码示例。......
  • 一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Fede
    MySQL中的存储引擎是其数据库管理系统的核心模块,用于处理不同类型的数据存储和检索操作。每种存储引擎都有自己的特点,适用于不同类型的应用场景。MySQL最常用的存储引擎包括InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB等。以下是对MySQL存储引擎的详细介......
  • 数据集成的未来:一文搞懂 EtLT 新技术的崛起
    前瞻性技术通常具有创新性,并受到早期采用者的欢迎,从而提供一定的商业价值。说到数据集成,有人可能会质疑这有什么好讨论的——这不就是简单的ETL吗?从各种数据库中提取数据,进行转换,最后加载到不同的数据仓库中。随着大数据、数据湖、实时数仓、大规模模型等的兴起,数据集成架......
  • 自由软件、开源软件、免费软件之间的区别是什么
    自由软件、开源软件和免费软件三者在许可证和使用权利方面有所区别。1、自由软件:强调用户的自由,可以自由使用、修改和分发;2、开源软件:源代码可获取,允许修改和共享,但可能有一些限制;3、免费软件:不需要付费,但可能限制源代码访问和修改。主要区别在于源代码的访问、修改和分发的自由......
  • 适用于 Windows 11/10 电脑 的 13 个最佳文件恢复软件
    如果您由于系统故障、硬件损坏、人为错误或病毒攻击而丢失了重要文件或文件夹。不用担心,因为我们随时为您提供帮助!借助正确的文件恢复工具,您可以立即检索计算机上不同类型的文件。如果你有为您的文件创建备份,你不用担心,但是如果你没有备份怎么办?然后,您需要获得适用于Windows1......
  • AI 改变世界!一文盘点全球最火爆的 AI 产品
    随着技术的不断进步,人工智能(AI)正逐渐渗透到我们的生活中,改变着各行各业的工作方式。本文将带领大家了解目前全球范围内一些领先的人工智能产品和服务。一、国外人工智能1、AI对话系统(聊天机器人)的崛起ChatGPT:引领智能对话新潮流ChatGPT是由OpenAI开发的一款先进的......
  • 学习高校课程-软件设计模式-单例模式(lec5)
    原文链接Singleton:IntentSingletonisacreationaldesignpatternthatletsyouensurethataclasshasonlyoneinstance,whileprovidingaglobalaccesspointtothisinstance.Singleton是一种创建性设计模式,它允许您确保一个类只有一个实例,同时提供对此实例的......