如何成为一个牛逼的脚本小子日记之0x001-JAVA 代码审计 Top half (2023829-...

2023-11-17

如何成为一个牛逼的脚本小子日记之

·0x001-JAVA 代码审计 Top half (2023/8/29-2023/9/1)

此记录是在拥有一定的java基础下进行的,java基础类,反射,继承,filter,servlet,calssLoader,Dynamic agent等基础知识点将不再进行阐述,TopHalf主要集中描述除了java反序列化之外的基础漏洞,BottomHalf会集中描述java反序列化,CC/CB,weblogic,fastjson反序列化等各种反序列化审计和kWAF/绕过的姿势

·从0到什么都会点的JAVA审计

· Inject

·SQL-Inject 老生常谈的sql注入

导致注入的原因:

1.经典的sql语句拼接不当

String sql_command="select * from db_name where id = " + req.getParamenter("id") // inject on id

1.1.Statement 的拼接

String sql_command ="select * from db_name where id = " + req.getParamenter("id");
try{
Statement st = con.createStatement(); // inject on id
ResultSet rs = st.executeQuery(sql_command);
while (rs.next()){
out....... // rs.getObject("id");
}
}

1.2.带有 prepareStatement 预编译 的 拼接不当

String sql_command ="select * from db_name where id = " + req.getParamenter("id");
try{
	PreparedStatement pstt = con.prepareStatement(sql_command);
	ResultSet rs = pstt.executeQuery(); //Inject on id 
	while(rs.next()){
		out ....... // rs.getObkect("id");
		}
}catch (SqlException throables) {
throables.printStackTrace();
}

2.框架使用不当

如MyBatis,Hibernate

2.1 MyBaits ${parameter} 使用不当导致的注入

<select id ="getUsername" resultType = "com.sqltest.bean.user">
select * from user where name = ${name} //inject on name
</select>

2.2 HQL 参数语法使用不当

List user = session.createQuery("from user where name= '" + req.getParament("insert") + "'",User.class).getResultList(); //inject on insert 

那么如何审计java中的SQL-Inject?

跟踪关键字sql sql_command sql_query 寻找sql拼接的入口点

跟踪sql链条寻找sql拼接的入口点

寻找 con.prepareStatement , req.getParamenter , st.executeQuery , pstt.executeQuery 等 回溯构造链


·command-Inject

命令注入的常见情况基本为直接拼接exec导致命令注入

String Cmd = req.getParament("cmd");
Process process = Runtime.getRuntime().exec(Cmd);

命令注入需要注意的雷坑

1.1 Runtime.exec 中 StringTokenizer 对 空白字符 的截取导致命令注入失效

ping 127.0.0.1&whoami
```
String[1] = "ping"
String[2] = "127.0.0.1&whoami"

```

可见 Runtime.exec 中 StringTokenizer 对 空白字符 的截取 导致 String[2] 成为 ping 后续的参数而非继续执行的命令导致命令注入失效

当然 可以使用多个空格拼接参数进行绕过

ping 127.0.0.1 & whoami
```
String[1] = "ping"
String[2] = "127.0.0.1"
String[3] = "&"
String[4] = "whoami"
```

·code-Inject

·EL-Inject

表达式注入

EL 表达式可以从JSP的四大作用域 page/request/session/application 中获取数据

可以在JSP页面中执行一些基本的关系运算,逻辑运算和算数运算

可以获取web开发常用对象

可以调用java方法 允许开发者自定义EL函数 在自定义的JSP中调用java方法

JSP四大作用域如下:

page:only save data on one page [Javax.servlet.jsp.PageContext]

request:only save data on one request [ Javax.servlent.httpServletRequest]

session:save data on one dialogue , only support to one user [Javx.servlet.http.HttpSesssion]

application:save data in hole server and all user shared [Javax.servlet.ServletContext]

EL 在JSP中 以{} 表示EL表达式 例如 ${name} 来获取name 变量 当没有指定作用范围的时候 默认在page的作用域查找

<@page contentType="text/html;charset=UTF-8" language="Java" %>
<html>
<center>
<h3>name is : ${param.name} </h3>
</center>
<html>

Springboot中的EL表达式注入

Spring表达式语言(简称SpEl)是一个支持查询和操作运行时对象导航图功能的强大的表达式语言. 它的语法类似于传统EL,但提供额外的功能,最出色的就是函数调用和简单字符串的模板函数。

SpEL使用 #{…} 作为定界符,所有在大括号中的字符都将被认为是 SpEL表达式,我们可以在其中使用运算符,变量以及引用bean,属性和方法如:

1.引用其他对象:#{car} 引用其他对象的属性:#{car.brand} 调用其它方法 , 还可以链式操作:#{car.toString()}

其中属性名称引用还可以用符号 如:{someProperty}

除此以外在SpEL中,使用T()运算符会调用类作用域的方法和常量,例如,在SpEL中使用Java的Math类,我们可以像下面的示例这样使用T()运算符:#{T(java.lang.Math)} 1 #{T(java.lang.Math)}

T()运算符的结果会返回一个java.lang.Math类对象。

该漏洞的漏洞形态类似于命令注入,因此之前该漏洞归为命令注入类

@RequestMapping("/test")
    @ResponseBody
    public String test(String input){
        SpelExpressionParser parser = new SpelExpressionParser();
        Expression expression = parser.parseExpression(input);
        return expression.getValue().toString();
    }

将输入的参数直接当作表达式解析的参数,在解析过程中将造成命令执行。

http://127.0.0.1:8080/test?input=new%20java.lang.ProcessBuilder(%22/Applications/Calculator.app/Contents/MacOS/Calculator%22).start()

当然也可以采用T() 调用一个类的静态方法,它将返回一个 Class Object,然后再调用相应的方法或属性,也是可以是想相同的功能。


·SSTI

freemark模板注入

成因依旧是未经过滤的模板渲染,一个道理

freemarker.template.utility.Execute 需要着重寻找,或者根据调用链反推入口位置

2.3.17版本以后,官方版本提供了三种TemplateClassResolver对类进行解析:

1、UNRESTRICTED_RESOLVER:可通过ClassUtil.forName(className)获取任何类。

2、SAFER_RESOLVER:不能加载freemarker.template.utility.JythonRuntimefreemarker.template.utility.Executefreemarker.template.utility.ObjectConstructor这三个类。 3、ALLOWS_NOTHING_RESOLVER:不能解析任何类。 可通过freemarker.core.Configurable#setNewBuiltinClassResolver方法设置TemplateClassResolver,从而限制通过new()函数对freemarker.template.utility.JythonRuntimefreemarker.template.utility.Executefreemarker.template.utility.ObjectConstructor这三个类的解析。

但是依旧不排除可以bypass的可能(后续可能会看看代码吧


·失效的身份认证
·这部分主要集中在JWT的认证上,关于JWT的部份不难,所以精简描述

基本审计方法为倒推cookieORsession的create方法然后结合已经拿到的jwt反解(解密网站一百度一大堆)后越权


·XXE

XXE(XML外部实体注入,XML External Entity) ,漏洞在对不安全的外部实体数据进行处理时,可能存在恶意行为导致读取任意文件、探测内网端口、攻击内网网站、发起DoS拒绝服务攻击、执行系统命令等问题。简单来说,如果系统能够接收并解析用户的XML,但未禁用DTD和Entity时,可能出现XXE漏洞,常见场景如pdf在线解析、word在线解析、定制协议或者其他可以解析xml的API接口。

较容易产生的漏洞点如下

javax.xml.parsers.DocumentBuilder
javax.xml.parsers.DocumentBuildFactory
org.xml.sax.EntityResolver
org.dom4j.*
javax.xml.parsers.SAXParser
javax.xml.parsers.SAXParserFactory
TransformerFactory
SAXReader
DocumentHelper
SAXBuilder
SAXParserFactory
XMLReaderFactory
XMLInputFactory
SchemaFactory
DocumentBuilderFactoryImpl
SAXTransformerFactory
DocumentBuilderFactoryImpl
XMLReader
Xerces: DOMParser, DOMParserImpl, SAXParser, XMLParser
·XML

XML(eXtensible Markup Language)叫做可扩展的标记语言,所有的标签都可以自定义。通常xml被用于信息的记录和传递,所以xml经常用于配置文件。

<?xml version="1.0" encoding="UTF-8"?>
</source1>
<source id="1"> 
<name>asd</name>
</source1>
·TDT

DTD(Document Type Definition,文档类型定义),DTD用于约束xml的文档格式,保证xml是一个有效的xml。DTD可以分为内部DTD和外部DTD。

·内部TDT,随便举个例子
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE scores [
        <!ELEMENT scores (student*) >
        <!ELEMENT student (name, course, score)>
        <!ATTLIST student id CDATA #REQUIRED>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT course (#PCDATA)>
        <!ELEMENT score (#PCDATA)>
        ]>
<scores>
    <student id="1">
        <name>张三</name>
        <course>java</course>
        <score>90</score>
    </student>
    <student id="2">
        <name>李四</name>
        <course>xml</course>
        <score>99</score>
    </student>
</scores>
·外部TDT
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE scores SYSTEM "scores.dtd" >
<scores>
//中间部分省略
</scores>

有/无回显的利用方法就不说了,SSRF那套+dnslog/server那套可以直接搬过来用,网上一搜一大堆,没什么好讲的


·敏感信息泄露

输出数据的时候没对用户权限进行验证(也算是变相的权限控制不当)

一个很简单的例子(抄的,因为真的太典了)

public static void show(boolean bAjax, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* 38 */     PMInterface pm = null;
/*    */     
/* 40 */     StringBuffer sb = new StringBuffer();
/*    */     
/* 42 */     for (int i = 0; i < alPM.size(); i++) {
/* 43 */       pm = alPM.get(i);
/* 44 */       sb.append(pm.PM());
/*    */       
/* 46 */       sb.append("\r\n");
/*    */     } 
/*    */ 
/*    */     
/* 50 */     String str = sb.toString();
/* 51 */     response.getOutputStream().write(str.getBytes(SysConts.New_InCharSet));
/*    */   }
/*    */ }

·失效的访问控制

·横向/纵向越权 这部份计划放到后续的实战审计中进行描述,越权还是结合代码看清晰一些,成因基本上也都是没有对用户身份进行校验,审计的点也是关注http传参构造链和pom.xml对传入数据的处理即可

·CSRF

·对referer控制不严格导致CSRF

下面是一眼典中典的环节 getReferer > check referer “www.example.com”

public class RefererInterceptor extends HandlerInterceptorAdapter {
	private Bollen check = true;
	@override
  public bollen preHandle(HttpServlentRequest req),
  HttpServlentRequest resp, Object handler) throws Exception{
    if(!check){
      return true;
    }
  String referer=request.getHeader("Referer");
    if((referer!=null)&&(referer.trim().startsWith("www.example.com"))){
      chain.doFilter(request, response);
    }else {
      request.getRequestDispatcher("index.jsp").forward(request,response);
    }
}
·Token可重用导致CSRF

还是一眼典的环节 make Token (generateToken()) > 未删除 如果导致Token泄漏那么可直接对Token进行重用

String sToken = generateToken();
String pToken = req.getPrameter("csrf-token");
if(sToken!=null && pToken !=null && sToken.equals(pToken)){
  chain.doFilter(request,response)
}else{
  request.getRequestDispatcher("index.jsp").forward(request,response);
}	

·SSRF

需要关注的敏感函数

HttpClient.execute()
HttpClitne.executeMethod()
HttpURLConnection.connect()
HttpUrlConnection.getInputStream()
URL.openStream()
HttpServerRequest()
BasicHttpEntityEnclosingRequest()
DefaultBHttpClientConnection()
BasicHttpRequest()

审计的思路点基本是寻找下面函数的接口点看看是否可以借住接口点回调内网资源 这边的例子会在后续审计实战打组合拳中描述 其实从审计+实战的角度来讲 盲打内网存活信息和读取内网文件是比较常用的手段

关于SSRF怎么打内网存活和读文件这里就不多说了,渗透的东西一搜一堆


·文件操作

·文件包含
<%@include file="test.jsp"%> //静态包含
<jsp:include page="<%=file%>"></jsp:include>
<jsp:include page ="<%=file%>"/>  //动态包含

来看看第一种形式,这种形式相对静态包含来讲, 要复杂一点,因为在静态包含中其只属于一个include指令元素, 并且只有一个file的属性, 只是写上路径就行了, 路径可以是相对路径也可以是绝对路径, 但不能是<%=...%>代表的表达式,但在这里,file 属性可以是<%=...%>代表的表达式。

第二种形式其实和第一种形式并无本质上的区别,core 库 的<c:import><jsp:include>一样,也是一种请求时操作,它的目的就是将其它一些 Web 资源的内容插入到当前的 JSP 页面中,这些 Web 资源就是通过url 属性来指定的,这也是<c:import>的唯一一个必选属性。值得一提的是,这里允许使用相对 URL,并且根据当前页面的 URL 来解析这个相对 URL。

举个例子,如果我们当前页面的 URL 地址是http://127.0.0.1/admin/index.jsp,那么如果我们引用的 URL 属性值为/user/edit.jsp,那么其实最终解析的 URL 就是http://127.0.0.1/admin/user/edit.jsp

所以,如果 url 属性的值以斜杠开始,那么它就被解释成本地 JSP 容器内的绝对 URL。如果没有为context属性指定值,那么就认为这样的绝对 URL 引用当前 servlet 上下文内的资源。如果通过context属性显式地指定了上下文,那么就根据指定的 servlet 上下文 解析绝对(本地)URL。

当然,<c:import>操作并不仅仅限于访问本地内容,也可以为具体协议和主机名的完整 URI 。并且实际上,协议甚至不仅局限于 HTTP。<c:import>的 url 属性值可以使用 java.net.URL类所支持的任何协议(也就是http,https,ftp,file,jar,mailto,netdoc)。

由于这些特性,导致动态包含可能会出现文件包含漏洞, 但这种包含和 PHP 中的包含存在很大的差别,对于 Java 的本地文件包含来说,造成的危害只有文件读取或下载,一般情况下不会造成命令执行或代码执行。因为一般情况下 Java 中对于文件的包含并不是将非 jsp 文件当成 Java 代码去执行,如果这个 JSP 文件是一个一句话木马文件,我们可以直接去访问利用,并不需要多此一举去包含它来使用了,除非在某些特殊场景下,如某些目录下权限不够可以尝试利用包含来绕过(理论上)。

通常情况下 Java 并不会把非 jsp 文件当成 Java 去解析执行,但是可以利用服务容器本身的一些特性(如将指定目录下的文件全部作为 jsp 文件解析),来实现任意后缀的文件包含,如 Apache Tomcat Ajp(CVE-2020-1938)漏洞,利用 Tomcat 的 AJP(定向包协议)协议实现了任意后缀名文件当成 jsp 文件去解析,从而导致 RCE 漏洞。

除此之外,另外提一点,静态包含和动态包含在执行时间上有很大的区别。静态包含是翻译阶段执行的,即被包含的文件和被插入到的页面会被 JSP 编译器合成编译,最终编译后的文件实际上只有一个。而动态包含实际是在请求处理阶段执行的,JSP程序会将请求转发到(注意不是重定向)被包含页面,并将执行结果输出到浏览器中,然后返回页面继续执行后面的代码,即被包含的文件和被插入到的页面会被JSP编译器单独编译。

比较另类的远程文件包含

一眼典环节 没有对url传入参数进行限制导致可以直接请求远程服务器下的各种文件 一般情况下可以配合来读文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> 
 <title>远程文件包含测试</title>
 <%  String url = request.getParameter("url"); %>
 <c:import url="<%=url%>"></c:import>  
 
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
</head>
<body>
This is my JSP page. <br>
</body>
</html>
·文件上传

这里就不讲怎么打怎么绕限制了文件上传需要注意审计的函数有

File
lastIndexOf
indexOf
FileUpload
getRealPath
getServletPath
getPathInfo
getContentType
equalsLgnoreCase
FileUtils
MutilpartFile
MutilpartRequestEntiry
UploadHandleServlet
FileLoadServlet
FileOutputStream
getInputStream
DiskFileItemFactory
·任意文件读取/下载

主要关注FileInputStream反溯构造链即可

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何成为一个牛逼的脚本小子日记之0x001-JAVA 代码审计 Top half (2023829-... 的相关文章

  • HashMap不写入数据库

    我尝试在我的数据库中写入 但只写入发件人和消息 我不明白为什么会发生这种情况 我认为问题出在我使用 sendMessage 的地方 我认为问题是我没有什么可以做的读 写其他用户的主键 我在数据库中写入消息的活动 public class M
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 如何在spring mvc中从控制器名称+操作名称获取映射的URL?

    是否有现有的解决方案可以从 Spring MVC3 中的 控制器名称 操作名称 获取映射的 URL 例如 asp net mvc 或 Rails 中的 UrlHelper 我觉得非常有用 thx 也许 你想要这样的东西 in your Co
  • 如何使用 SimpleDateFormat 解析多种格式的日期

    我正在尝试解析文档中的一些日期 用户似乎以类似但不完全相同的格式输入了这些日期 以下是格式 9 09 9 2009 09 2009 9 1 2009 9 1 2009 尝试解析所有这些内容的最佳方法是什么 这些似乎是最常见的 但我想让我困扰
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • Condition 接口中的 signalAll 与对象中的 notificationAll

    1 昨天我才问过这个问题条件与等待通知机制 https stackoverflow com questions 10395571 condition vs wait notify mechanism 2 我想编辑相同的内容并在我的问题中添加
  • Firestore - RecycleView - 图像持有者

    我不知道如何编写图像的支架 我已经设置了 2 个文本 但我不知道图像的支架应该是什么样子 你能帮我告诉我图像的文字应该是什么样子才能正确显示吗 holder artistImage setImageResource model getArt
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 在java中实现你自己的阻塞队列

    我知道这个问题之前已经被问过并回答过很多次了 但我只是无法根据互联网上找到的示例找出窍门 例如this http tutorials jenkov com java concurrency blocking queues html or t
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • Espresso 和 Proguard 的 Java.lang.NoClassDefFoundError

    我对 Espresso 不太有经验 但我终于成功地运行了它 我有一个应用程序需要通过 Proguard 缩小才能处于 56K 方法之下 该应用程序以 3 秒的动画开始 因此我需要等到该动画结束才能继续 这就是我尝试用该方法做的事情waitF
  • 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?

    我正在 Eclipse 中开发动态 Web 项目 我创建了一个 properties 文件来存储数据库详细信息 用户名 密码等 我通过右键单击项目和 New gt File 添加它 我使用了Java util包Properties类 但它不
  • 尝试使用等于“是”或“否”的字符串变量重新启动 do-while 循环

    计算行程距离的非常简单的程序 一周前刚刚开始 我有这个循环用于解决真或假问题 但我希望它适用于简单的 是 或 否 我为此分配的字符串是答案 public class Main public static void main String a
  • 如何通过 Inno Setup for NetBeans 使用自定义 .iss 文件

    我将 Inno Setup 5 与 NetBeans 8 一起使用 并且我已经能够创建一个安装程序来安装该应用程序C users username local appname 但是我希望将其安装在C Programfiles 我如何在 Ne
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Java的-XX:+UseMembar参数是什么

    我在各种地方 论坛等 看到这个参数 并且常见的答案是它有助于高并发服务器 尽管如此 我还是找不到 sun 的官方文档来解释它的作用 另外 它是Java 6中添加的还是Java 5中存在的 顺便说一句 许多热点虚拟机参数的好地方是这一页 ht
  • 嵌入式 Jetty - 以编程方式添加基于表单的身份验证

    有没有一种方法可以按如下方式以编程方式添加基于表单的身份验证 我用的是我自己的LdapLoginModule 最初我使用基本身份验证并且工作正常 但现在我想在登录页面上进行更多控制 例如显示徽标等 有没有好的样品 我正在使用嵌入式 jett
  • 在哪里存储 Java 的 .properties 文件?

    The Java教程 http download oracle com javase tutorial essential environment properties htmlon using Properties 讨论如何使用 Prop
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创

随机推荐

  • 微型小程序页面跳转加携带数据

    一 WXML中
  • 列表数据转树形数据 trees-plus 使用方法(支持typescript)

    trees plus Operations related to tree data Install npm i trees plus S Import import TreesPlus from trees plus Usage impo
  • 如何使用DLL函数动态加载-静态加载

    公司里的项目里用到加密解密 使用的是客户指定的DLL库来加密解密 开始 我按照以前的方法来使用DLL库 这里也介绍下吧 虽然网上很多 一般动态加载DLL的步骤如下 HINSTANCE DLL库实例名 LoadLibrary T DLL库名
  • 高德api 实现根据中文地址地图打点弹窗

  • diffusion models笔记

    ELBO of VDM Understanding 1 中讲 variational diffusion models VDM 的 evidence lower bound ELBO 推导时 53 式有一个容易引起误会的记号
  • Promethus(普罗米修斯)安装与配置(亲测可用)

    1 普罗米修斯概述 Prometheus 是由go语言 golang 开发 是一套开源的监控 报警 时间序列数 据库的组合 适合监控docker容器 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 自201
  • 字符串匹配算法0-基本概念

    字符串匹配的算法在很多领域都有重要的应用 这就不多说了 我们考虑一下算法的基本的描述 给定大小为 字母表 上的长度为n的文本t和长度为m的模式p 找出t中所有的p的出现的地方 一个长度为m的串p表示为一个数组p 0 m 1 这里m 0 当然
  • [前端系列第5弹]JQuery简明教程:轻松掌握Web页面的动态效果

    在这篇文章中 我将介绍jQuery的基本概念 语法 选择器 方法 事件和插件 以及如何使用它们来实现Web页面的动态效果 还将给一些简单而实用的例子 让你可以跟着我一步一步地编写自己的jQuery代码 一 什么是JQuery JQuery是
  • 【异步系列五】关于async/await与promise执行顺序详细解析及原理详解

    前段时间总结了几篇关于异步原理 Promise原理 Promise面试题 async await 原理的文章 链接如下 感兴趣的可以去看下 相信会有所收获 一篇文章理清JavaScript中的异步操作原理 Promise原理及执行顺序详解
  • 博客4:YOLOv5车牌识别实战教程:模型优化与部署

    摘要 本篇博客将详细介绍如何对YOLOv5车牌识别模型进行优化和部署 我们将讨论模型优化策略 如模型蒸馏 模型剪枝和量化等 此外 我们还将介绍如何将优化后的模型部署到不同平台 如Web 移动端和嵌入式设备等 车牌识别视频 正文 4 1 模型
  • 4.5 静态库链接

    4 5 静态库链接 一种语言的开发环境往往会附带语言库 language library 这些库通常是对操作系统API的包装 例如C语言标准库的函数strlen 并没有调用任何操作系统的API 但是很大一部分库函数都要调用操作系统API 例
  • 三目运算符优先级

    今天发表一个遇到的js的三元运算符优先级问题 如图 在解答这一题的时候 首先我们先理解什么是三元运算符 如名字一样是有三个操作数 语法 条件判断 结果1 结果2 如果条件成立 则返回结果1 否则返回结果2 在这里 三元运算符优先级是最低的
  • C语言实现TCP连接

    开发环境 TCP服务端 TCP UDP测试工具 开发环境 Linux 编程语言 C语言 TCP UDP测试工具工具的使用请自行百度 我们用这款软件模拟TCP服务端 效果展示 代码编写 include
  • bootstrap中container类和container-fluid类的区别

    近几天才开始系统的学习bootstrap 但马上就遇到了一个 拦路虎 container和container fluid到底什么区别 查了很多资料 看到很多人和我有同样的疑问 但是下面的回答一般都是一个是响应式一个宽度是百分百 说的好像是那
  • 【华为OD机试】斗地主之顺子(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • firefox 阻止此页面创建其他对话框的解决方法

    用Firefox操作弹出界面时总是遇到 firefox 阻止此页面创建其他对话框 点击确定后 控制台就会报错误 解决方法 1 在firefox里输入about config 2 在列表框里右键 gt 新建 gt 整数 3 输入选项名dom
  • Redis底层数据结构

    Redis简单介绍一下 Redis是一个开源的 使用C语言编写的 支持网络交互的 可基于内存也可持久化的Key Value数据库 有哪些数据结构 说起Redis数据结构 肯定先想到Redis的5 种基本数据结构 String 字符串 Lis
  • 日期类之运算符重载

    date h pragma once include
  • linux tcpdump抓包命令详解,tcpdump(抓包分析命令详解)

    TCPDump可以完全拦截网络上传输的数据包以提供分析 它支持对网络层 协议 主机 网络或端口的过滤 并提供逻辑语句 例如和 或不帮助您删除无用的信息 tcpdump抓包分析命令详解 tcpdump是一个用于截取网络分组 并输出分组内容的东
  • 如何成为一个牛逼的脚本小子日记之0x001-JAVA 代码审计 Top half (2023829-...

    如何成为一个牛逼的脚本小子日记之 0x001 JAVA 代码审计 Top half 2023 8 29 2023 9 1 此记录是在拥有一定的java基础下进行的 java基础类 反射 继承 filter servlet calssLoad