静态分析系列1-南大软件分析2.1认识java的soot静态分析框架(待补充)

pumpkin.zhu      2022-05-21     129

关键词:

文章目录

前言

Soot 的类型三地址码:Jimple

李樾老师的《软件分析》课程02(Intermediate Representation)中介绍了 3AC(3-Address Code,三地址码),并且使用 Soot 的 IR 举例介绍真实场景下的三地址码:Jimple(typed 3-address code)。

由于 Java 是有类型的,静态分析很多时候要用到语言的类型信息,所以 Java 的三地址码是带类型的,即 typed。

Soot 相关链接

另外李樾老师还提到,在科研工作或企业工作中研究 Java 静态分析时,Soot 是难以避开的一个框架。而且软件分析的课程作业,也是基于 Soot 进行设计。

相关链接:Soot 项目地址Soot 教程地址

Soot 是什么?

Soot 最初的作用

参考文章:Soot为什么经常被用作Instrumentation的Framework?

其实Soot最开始设计的时候,主要目的就是为了对Java字节码程序进行优化,这里的优化就是指执行效率或者运行速度方面的优化。最初设计时,Soot支持三种“中间表示方法”(Intermediate Representation):Baf,Jimple和Grimp。

所以,Soot最初的作用,就是为了提高Java程序的执行效率(由于Java程序和C/C++相比起来,在先天上就执行效率较低)。1999 年编写的最初的文章,最后通过12个大型的benchmarks实验说明,经过Soot处理后,在interpreter中的执行效率提高了8%,在Just-In-Time(JIT)型的编译器中的执行效率提高了21%。

官方旧指南:2008年1.1版本

[Soot学习笔记][3]通过Soot API生成Hello World程序 系列文章记录了一些对 Soot教程 的学习,其中提到了 《A Survivor’s Guide to Java Program Analysis with Soot》,是 Soot 教程指定的发布于 2018 年的旧指南。

旧指南阅读地址,不得不说,47页的英文文档第一次打开让我有些望而生畏,参考文章中提到该指南,这才给了我第二次打开该英文文档的勇气。

化整为零,啃下文档5-7页的第一章导论并不过分吧?慢慢适应英文文档,读完导论在该节写下自己的个人理解即可。

教程入门部分

Introduction:主要介绍处理哪些文件

教程文档地址

处理单个文件: Soot 通常处理一堆类。这些类可以采用以下三种格式之一:

  • Java 源代码,即 .java 文件,
  • Java 字节码,即 .class 文件,以及
  • Jimple 源,即.jimple 文件。

其中 Jimple 是 Soot 的主要中间表示,一个三地址代码,基本上是一种简化的 Java 版本,只需要大约 15 种不同的语句。您可以指示 Soot 将 .java 或 .class 文件转换为 .jimple 文件或反之。

Soot 的类路径: Soot 有自己的类路径,并且只会从该路径上的 JAR 文件或目录加载文件。默认情况下,这个路径是空的。

处理整个目录: 可以使用-process-dir选项使用 Soot 处理整个目录或 JAR 文件。

处理某些类型的文件:

应用程序类与库类: Soot 实际处理的类称为应用程序类。这与库类相反,Soot 不处理库类,仅用于类型解析。应用程序类通常是那些在命令行上明确声明的类,或者那些驻留在通过-process-dir。

Running Soot

Disassembling classfiles(反编译类文件)

Soot 做了哪些工作?

静态分析系列1-南大软件分析1.0导论学习笔记(代码片段)

...一下还记得哪些重要内容,此部分回顾不打算纠正。静态分析概念:在软件运行之前的代码分析,也许可以理解为编译阶段。RiceTheory:对于编程语言来说ÿ 查看详情

dubbo源码分析-从xml到我们认识的java对象

...源码,有点断断续续的,于是准备写一个dubbo源码系列的分析文章,一来方便自己总结,二来也能够让自己的学习有输出分享。  整个系列会从dubbo的xml到bean到生产者启动-注册到消费者订阅-调用的这一主线,然后会穿插一些... 查看详情

软件需求与分析-认识

...验人1:没有技术背景很难真正成为一个优秀的软件需求分析师,最多也就是一个业务需求分析师。经验人2:软件需求在整个软件生命周期中的定位来看,其上接业务,下接设计和技术。从这个概念上来讲软件需求人员必须具备... 查看详情

第1节-认识jemeter

...试其他功能了。2-用Jemeter可以做什么ApacheJMeter可用于测试静态和动态资源、Web动态应用程序的性能。它可用于模拟服务器,服务器组,网络或对象上的繁重负载,以测试其强度或分析不同负载类型下的整体性能。对不同的应用程... 查看详情

[系统安全]四十五.恶意软件分析静态分析capa经典工具的基本用法万字详解

...础用法和Diaphora开源工具。这篇文章将详细讲解恶意代码静态分析经典工具Capa的基础用法,它是FireEye团队开源的工具,旨在自动化提取样本的高级静态特征,快速挖掘样本的恶意行为,同时支持IDA插件操作,方便安全人员快速... 查看详情

2019-2020-220175303柴轩达《网络对抗技术》exp4恶意代码分析(代码片段)

...监控2.1.1Windows计划任务schtasks2.1.2sysmon2.2恶意软件分析2.2.1静态分析2.2.2动态分析3实验中遇到的问题4问题回答5实验体会1基础知识1.1恶意代码的概念与分类定义:又称恶意软件,指在未明确提示用户或未经用户许可的情况下,在用... 查看详情

jmeter_初步认识随笔

...构的软件(例如web应用程序)。它可以用来测试包括基于静态和动态资源程序的性能,例如静态文件,JavaServlets,Java对象,数据库,FTP服务器等等。JMeter可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或者... 查看详情

asp.netcore系列64结合eshoponweb全面认识领域模型架构(代码片段)

...asp.netcore系列64结合eShopOnWeb全面认识领域模型架构一.项目分析  在上篇中介绍了什么是"干净架构",DDD符合了这种干净架构的特点,重点描述了DDD架构遵循的依赖倒置原则,使软件达到了低藕合。eShopOnWeb项目是学习DDD领域模型... 查看详情

南大算法设计与分析课程oj答案(代码片段)

 问题A:动态中位数问题时间限制:1Sec  内存限制:8MB提交:866  解决:102提交 状态 算法问答 题目描述 输入一组整数a1,a2,…,an,每输入一个整数,输出到此时为止的中位数。 中位数定义:如果数串的大小... 查看详情

java数据结构及算法实战系列006:算法复杂度等级及其分析(代码片段)

...法实战》系列的第6节,主要介绍算法复杂度等级及其分析的方法。在前一节,我们介绍了程序的性能,也介绍了评估性能的方式。那么,我们是否就能测算出算法需要运行的时间呢?在上一节,我们了解... 查看详情

软件测试基础理论体系学习5-静态测试的理解(代码片段)

5-静态测试的理解1介绍2静态测试技术2.1代码检查2.1.1代码走查2.1.2编码风格与规范2.1.3审查2.1.3.1代码审查和代码走查2.1.3.2代码审查清单2.2静态结构分析2.3代码质量度量1介绍静态测试包括包括代码检查、静态结构分析、代码质量... 查看详情

南大算法设计与分析课程复习笔记l3-recursion

一、递归方程按照分治的思想,可以将一个递归的复杂度写成递归方程一、解递归方程--猜然后证明该方法又称为代入法,步骤如下:1、猜解的形式2、数学归纳法证明正确例子:我们假设有如下递归式:我们猜其解为T(n)=O(nlgn)... 查看详情

[学习es系列]-1.认识elasticsearch及环境准备与服务搭建(代码片段)

一、认识ElasticSearchElasticsearch是一个实时的分布式搜索分析引擎,它能让你以一个之前从未有过的速度和规模,去探索你的数据。它被用作全文检索、结构化搜索、分析以及这三个功能的组合。摘自《Elasticsearch:权威指南》Elastics... 查看详情

我对软件工程的认识

...工程就是一个软件项目的完成过程。从与客户联系、需求分析、讨论、开发、测试、运行等一系列的步骤,他是一个系统性的项目。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。软件工程... 查看详情

数据分析leveli考证学习指南—数据分析概述

系列文章目录Python数据科学家养成计划(数据分析LEVELI考证)文章目录系列文章目录前言一、认识数据分析1.热点问题解读前言随着人工智能的不断发展,数据科学相关技术也越来越重要,很多人都开启了学习数... 查看详情

试验1:词法分析

实验一、词法分析实验商业软件工程3班  李华秋  201506110205一、 实验目的    编制一个词法分析程序。通过设计一个编译词法分析程序,实现对词法分析转换的理解,加深对转换过程的认识,通... 查看详情

静态分析基础技术

1、使用反病毒软件来确认程序样本的恶意性  在分析一个可疑的恶意代码样本时,第一步就最好是拿多个反病毒软件扫描下这个文件,看是否有哪个引擎已经能够识别它。反病毒软件是不完美的,它们主要依靠一个已知... 查看详情

南大算法设计与分析课程复习笔记

一、几种比较复杂度的符号数据结构有描述,相关严格数学定义也不想说了,就这么过了吧。二、最大子数组的几种解决方法从最复杂的暴力解法过渡到最简单的动态规划解析和代码见这里:http://www.cnblogs.com/likaiming/p/8570205.html... 查看详情