当前位置: 首页 > news >正文

代码分析之污点分析 - 教程

开篇

在之前的《webshell检测方式深度剖析》的系列文章中,在讲解语法语义分析的时候,曾经介绍过污点分析。只是那时更多的是从实践角度进行展开的,理论和系统性不够。因此用这篇文章来重新介绍下污点分析,更全面地认识下这项被广泛应用的漏洞挖掘科技。

否会影响某些关键的脚本运行,挖掘程序漏洞。就是容易来说,污点分析(taint analysis)是一种跟踪并分析污点信息在程序中流动的技巧。通过将不可信的外部输入数据标记为污点数据(tainted data),然后跟踪和污点数据相关的信息的流向,进而分析这些信息
在这里插入图片描述

污点分析根据其实现机制可分为静态污点分析和动态污点分析,这篇文章我们首要介绍静态污点分析。

基本概念

在深入讲解之前,我们先来熟悉几个污点分析中的概念。
在这里插入图片描述

污点

污点或者污点信息在字面上的意思是受到污染的信息或者“脏”的信息。

在代码分析中,常常将来自程序之外的、并且进入程序内部的信息当做污点信息。

根据分析的需要,程序内部使用的数据也可作为污点信息,比如在分析程序是否会将用户的隐私信息泄露到程序外时,可以将从数据库中读取的用户的隐私信息作为污点信息。

Source点

在污点分析中,Source(污点源)​​ 是指程序中那些引入不可信数据或敏感数据的代码位置。​

Source点的核心作用是为污点分析标记分析的起点。只有准确识别了Source,后续的跟踪和分析才有意义。Source点识别的准确性直接影响到分析的精度。

Source点的具体形式会根据编程语言和应用场景有所不同,以下是一些典型例子:

Sink点

作为污点分析的终点。就是Sink点是指软件中那些直接产生安全敏感操作或可能导致隐私内容泄露的代码位置,核心作用

容易来说,倘若被标记为“污点”的数据最终流入了Sink点,就很可能意味着存在安全漏洞。

例如,用户输入(Source)未经任何过滤直接拼接进 SQL 查询语句(Sink),就可能存在 SQL 注入漏洞。如果直接传递给执行系统命令的函数(Sink),则可能产生命令注入漏洞。

Sanitizer点

连接Source和Sink的关键环节,它代表了经过资料清洗、加密或验证等手段使污点数据不再对系统安全构成威胁的代码位置。就是Sanitizer(无害化处理点)​

Sanitizer的核心作用是对污点数据的无害化处理,比如:

污点信息传播规则

污点分析技术的核心,它定义了被标记的“污点”数据在程序执行过程中如何流动和扩散。就是污点信息的传播规则

在应用传播规则进行污点信息的传播时,传播数据流又分为两种,分别为:

  • 通过数据依赖传播的显式数据流,比如对于语句“z = x + y”,如果x是被污染的,那么结果z也是被污染的;
  • 通过控制依赖传播的隐式数据流,比如对于语句“if (x>0) {y=1}else{y=0}”,假如x是被污染的,那么y也应该是被污染的。

启用污点分析技能挖掘漏洞

采用静态污点分析技术挖掘程序漏洞的系统的工作原理如下图所示:
在这里插入图片描述

基于污点分析技巧的漏洞挖掘可以通过两种方法实现:

基于数据流的污点分析

在基于数据流的污点分析中,为追求分析精度,常常需要一些辅助分析技术的支持,比如别名分析、变量取值分析和指向分析等等。

通过可以有针对性的对程序代码执行辅助分析,而不用去考虑和污点分析不相关的代码。就是这些辅助分析通常都具有数据流分析的特点,因此能够和污点分析同时进行。这样做的好处

在基于数据流的污点分析的过程中,既可以沿着程序执行路径的方向分析污点信息的流向,检查Source点处程序接收的污点信息是否会影响到Sink处的敏感操作。也可以从检查Sink点开始逆向分析,检查敏感操作是否会受到污点信息的影响。

在实际的分析中,常常使用正向的污点分析,这主要是由于一方面正向的分析和信息流的方向是一致的,分析过程更自然,另一方面,辅助分析常常是和程序执行的方向一致的,正向污点分析可以和辅助分析同时进行。

基于数据流的污点分析核心包含下面几方面的内容。

过程内分析

在过程(函数或方法)内的分析中,需要按照一定的顺序分析过程内的每一条语句,进而分析污点信息的流向。
在考虑怎样分析程序语句之前,先要确定怎样记录污点信息。

(一)记录污点信息

在静态分析层面,变量的污染情况为主要关注对象。为记录污点信息,通常为变量添加一个污染标签。

通过最轻松的污染标签是一个布尔型的变量,它仅仅能表示变量是否是被污染的。例如,能够规定布尔值的取值为真时,变量是被污染的,取值为假时,变量未受污染。

也可以运用相对复杂的污染标签,这样不仅能够记录变量是否是被污染的,还行记录变量的污染信息来自哪些Source点,甚至Source点接收外部数据的哪个部分。比如使用一个整型变量记录污染信息。当变量的取值为0时,变量未受到污染,而变量取值为其他整数时,变量是污染的,并且不同的整数记录不同的Source点。

也可以不采用污染标签。在这种情况下,通过使用对变量进行跟踪的方式达到分析污点信息流向的目的。比如下面的代码:
在这里插入图片描述

变量str的内容来自于外部输入,我们认为它是被污染的,直接对str进行跟踪。然后变量sql的的取值受到str的影响,也被污染,此时选择先对sql变量进行跟踪,然后再对str进行跟踪。第三行str变量被赋值为空字符串,认为其被净化,取消对str的跟踪,继续跟踪上一个污染变量。
在这里插入图片描述

(二)软件语句的分析

在污点分析过程中,不同类型语句的污点传播规则是不同的,我们重点要求关注赋值语句、分支控制语句和过程调用语句。

1.赋值语句

不同类型的赋值语句也需要采用不同的传播规则:

赋值语句类型污点传播规则
a = b设置a的标签为b的标签
a = b + ca的标签取b和c标签的并集
a[i] = b在能确定i的取值或取值范围的情况下,将数组a中对应元素的标签设置为b的标签。否则将a中所有元素的标签设置为b的标签
a.f1 = b将对象a的f1属性的标签设置为b的污染标签
a = c(b, …)根据c函数的逻辑来判断是否将a的标签设置为b的标签

2.分支控制语句

在分析分支控制转移语句时,需要重点关注的是这类语句中的路径条件是否包含对污点材料的限制。

了使分析精确,如果得出路径条件的限制是足够的,那么可以将相应的变量标记为未污染的。

比如对于下面的if语句:
在这里插入图片描述

如果在检测的过程中,数组变量a被标记为污染的,那么经过这样的对数组变量取值的限制,在这个if语句块内,允许认为a[i]元素是安全的。

对于循环语句,通常规定循环变量的取值范围不能来自输入数据,或者说循环变量的取值范围不能受到输入的控制。

3.过程调用语句

对于过程调用语句的分析或处理,可以使用过程间的分析或者直接应用过程摘要进行分析。

过程摘要核心描述该过程怎样改变与该过程相关的变量的污染状态,以及对哪些变量的污染状态进行检查。这些变量可以是过程使用的参数、参数的字段、过程的返回值或过程内使用的全局变量等等。

比如对于代码a = c(b, …),倘若通过过程间分析,发现c函数对于参数b存在净化行为,那么c函数的返回值就是无污染的,则需要认为a变量也是无污染的。

在实际过程间分析中,可以对已经分析过的过程构建过程摘要。例如,在分析函数c之后,其过程摘要可描述为:函数c接受参数,但是内部会对参数进行净化,并且它的返回值是未受污染的。

若是再次得分析调用函数c的语句,那么就可以应用上述的摘要确定调用函数c对变量的污染情况的影响。

(三)流敏感分析、上下文敏感分析与域敏感分析

流敏感(flow sensitive)的分析在其分析过程中考虑程序的控制流。例如,给定一个程序片段“p=&a;q=p;p=&b”,流敏感的指向分析允许判断q不指向b。

相反地,在非流敏感的(flow insensitive)分析中,忽略了程序点之间的控制流信息,因此要比流敏感分析的精度低,但是具有更高的效率。以上述代码片段为例,流不敏感的分析包括“q可能指向a或b”,伴随着分析精度的降低,计算复杂性也随之降低。

上下文敏感(context sensitive)的分析是指程序的上下文影响程序的过程间分析。比如,当过程P在调用点c1被调用时,对过程P的分析结果将会仅仅返回给c1。相反地,一个非上下文敏感的分析,会将P的分析结果返回给所有P的调用点。

域敏感(field sensitive)的分析方法能够区分处理同一复杂数据结构的不同域(即能够区分形如“p.a”和“p.b”的不同域成员引用),非域敏感(field insensitive)的分析方法则将复杂数据结构作为统一整体进行近似处理。

过程间分析

过程间分析通常用于关注过程调用对当前上下文的影响,以及构建过程摘要,并利用已有的摘要进行过程内分析。

行在污点传播过程中遇到过程调用时构建过程摘要,也许可在分析之前通过过程调用图来构建所有过程的完整摘要。

基于依赖关系的污点分析

在基于依赖关系的污点分析中,将首先利用程序的中间表示、控制流图和调用图构造程序完整的或者局部的程序的依赖关系。

在分析程序依赖关系之后,再根据污点分析规则,检查Sink点处敏感管理是否依赖于Source点。
在这里插入图片描述

分析程序依赖关系过程可以看做是构建程序依赖图的过程。应用依赖图是一个有向图,节点是程序语句,边表示程序语句之间的依赖关系。

程序依赖图的有向边包括两种类型:

比如对于下面的代码:
在这里插入图片描述

对应的依赖图如下:
在这里插入图片描述

对于一定规模的代码,常常无法准确并且完整地计算软件的依赖关系。

一方面存储和计算大量的依赖关系需要较大的存储空间和计算时间,在空间和时间的消耗上不能满足实际的分析应该。

另一方面,对于很多情况,静态分析不能准确地分析出程序中的一些依赖关系,其本质原因是静态分析的不可判定性。因此,应该按需地构建程序依赖关系,并且优先考虑和污点信息相关的程序代码。

通过在污点分析检测程序漏洞的实际应用中,通常只关心程序上的信息依赖关系,因为虽然基于控制依赖的隐式信息流能够有效地用于传播污点信息,但是和隐式污点信息流相关的工具漏洞常常是相对麻烦的,并且很难被利用。

在构建程序依赖关系时,常常需要用到指向分析的结果,以分析程序语句和内存中数据的依赖关系。例如,对于语句"str=obj.field;",假如简便地认为该语句依赖于对变量obj的操控,那么分析精度将不能保证,因为很多和obj相关的管理,可能和对它的实例域field的操作无关,并且obj可能存在别名。

针对上述语句,可能无法通过分析少量的代码得到变量str的取值来自哪条赋值语句,这时,指向分析的结果能够给出变量str可能指向的内容,如果在内存中也对其中的变量进行污染标记,将利用这样的结果分析变量st是否是污染的,进而减少分析信息依赖关系的复杂过程。

总结

污点分析是非常有效的漏洞分析方法,其应用范围也非常广泛。

然而,几乎所有的污点分析技术都只关注数据依赖上的显式信息流数据传播形式,而未能覆盖控制依赖上的隐式信息流数据传播形式。

但利用隐式信息流传播数据已经在理论和实践中都被证明为是一种有效的信息传递方式,这值得我们加以特别关注。

相关文章:

代码分析之污点分析 - 教程

代码分析之污点分析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...

设计模式 7章

软件设计7大原则 开闭原则:是原则,在设计软件时保持扩展的开放性和修改的封闭性 里式替换原则:要求在继承时不要破坏父类的实现 单一职责原则:要求类的功能要单一 接口隔离原则:要求接口的设计要精简 依赖倒置原则:要求面向抽象编程,即面向接口编程 迪米特原则:提供一种…...

磁盘存储简介-轮子

https://blog.csdn.net/user2025/article/details/142364353...

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解

洛谷 P1967 [NOIP 2013 提高组] 货车运输 题解原题链接:货车运输 kruskal重构树+LCA做法,树剖不想写 很容易发现原图跑最短路可以解,但是复杂度难以承受,所以考虑如何简化该图。 发现原图边权维护的应该是(u,v)的最小值,并且最优选择是这个最小值最大,所以如果有多条(…...

cherry-pick 合并曾今某一次提交

确认当前分支 git checkout test 找到要合并提交的哈希值 git log --oneline 太长的话点击q 退出 切换到我们要合并的分支 git checkout dev 使用 cherry-pick 应用指定提交 git cherry-pick <提交哈希1> 推送到远程分支 git push origin dev...

向量数据库 FAISS、LanceDB 和 Milvus

FAISS (Facebook AI Similarity Search)本质:一个库 (Library),而不是一个数据库。定位:由 Meta (Facebook) AI 研发的、专注于高效相似性搜索的 C++/Python 库。它的核心使命只有一件事:在海量向量中快速找到最相似的 K 个向量。特点:它提供了极其丰富和灵活的索引算法(…...

ruoyi-vue自动生成代码

我看到这个ruoyi-vue有自动生成代码的功能,这里我们可以体验一下改如何实现。 还是首先在 ruoyi-admin 下面的文件夹target里面执行 java -jar ruoyi-admin.jar ,然后再 ruoyi-ui 下面执行 npm run dev 好,项目启动起来了,然后登录到后台里面去,点击系统工具里面的代码…...

拥抱新一代 Web 3D 引擎,Three.js 项目快速升级 Galacean 指南

本文从多个维度对比 Galacean 和 Three.js 两款Web3D 引擎的差异,并介绍拟我形象项目从Three.js 切换到 Galacean 以后带来的提升以及项目迁移的心得,为其他 Three.js 项目升级到 Galacean 提供参考。作者: vivo 互联网前端团队- Su Ning 本文从多个维度对比 Galacean 和 Th…...

Fast IO 模板

放在 using namespace std; 后面即可。 namespace fast_IO { #define FASTIO #define IOSIZE 100000char ibuf[IOSIZE], obuf[IOSIZE];char *p1 = ibuf, *p2 = ibuf, *p3 = obuf; #ifdef ONLINE_JUDGE #define getchar() ((p1==p2)and(p2=(p1=ibuf)+fread(ibuf,1,IOSIZE,stdin)…...

kylin V11安装mysql8.4.5(glibc.2.28版本)

环境:OS:kylin V11mysql:8.4.5 glibc2.28(建议不要安装glibc.2.17版本) 查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There…...

iOS 上架 App 流程全解析 苹果应用发布步骤、App Store 审核流程、ipa 文件上传与 uni-app 打包实战经验

本文系统解析 iOS 上架 app 流程,涵盖苹果应用从开发者账号注册、证书准备、uni-app 打包、ipa 上传、TestFlight 测试,到 App Store 审核与发布的完整步骤,结合多工具协作,总结高效实用的上架经验。对开发者来说,应用上线的最后一道门槛就是 iOS 上架 app 流程。 相比 An…...

P6801 花式围栏

题目传送门数学、计数类。题意 在 \(n\) 个同一底线上宽 \(w\),高 \(h\),给定的相邻矩形中,数出在方格上的任意形状的小矩形的个数。 \(1\leq n\leq 10^5,1\leq w,h \leq 10^9\) 题解 我们规定竖直方向上为高,水平方向上为的宽。 要研究 \(n\) 个,就要先研究一个。 我们考…...

ms sql dml 操作

ms sql dml 操作 --建表 select * into tablenew from tableold...

黑白染色方法

主要有 \(3\) 种方法:DFS / BFS / DSUDFS直接遍历整张图染色,判断是否产生冲突 init(){for(int i=1;i<=n;i++) col[i]=-1; } bool dfs(int u,int c){col[u]=c;for(auto v:e[u]){if(col[v]==-1) return dfs(v,c^1);else if(col[v]==c) return false;}return true; } ... bo…...

Windows 数字签名获取与验证详解

在 Windows 的安全体系中,数字签名扮演着“软件身份证”的角色。它可以证明一个程序确实来自某个发布者,并且在分发的过程中没有被篡改。 当下载一个系统更新、驱动程序,或者安装第三方应用时,操作系统往往会验证数字签名,确保软件来源合法、安全。那么,作为开发者或安全…...

转化率提升300%,火山引擎Data Agent以“一客一策”突破企业营销增长瓶颈

火山引擎近日分享了其企业级数据智能体Data Agent如何通过AI技术,解决企业营销增长中的核心问题。根据过去半年的客户实践,Data Agent在智能营销领域展现出显著成效,通过自然语言交互大幅降低工具使用门槛,并能深度整合企业内外部数据,实现从洞察到行动的闭环决策。面对企…...

矩阵模板

struct mat{int m[N][N];//将A.m[i][j] 改成 A[i][j] 这种格式int* operator [] (size_t i) {return m[i];}const int* operator [] (size_t i) const {return m[i];}mat() {memset(m,0,sizeof m);}//初始化矩阵mat operator * (const mat& b) const {//矩阵乘法mat res;fo…...

快读模板

int read(){int x=0,f=1;char c=getchar();while(c<48||c>57){if(c==-) f=-1;c=getchar();}while(c>47&&c<58) x=x*10+(c^48),c=getchar();return x*f; }本文来自博客园,作者:_AzureSky,转载请注明原文链接:https://www.cnblogs.com/-AzureSky-/p/1909…...

ipadװwindowsϵͳshell

如何在iPad上安装Windows系统Shell:详解与实践指南 随着科技的不断进步,用户对于设备功能的需求也在不断增加。iPad作为一款便携式的智能平板电脑,其强大的硬件性能和优秀的生态系统赢得了广大用户的喜爱。然而,对于一些专业用户或技术爱好者来说,仅使用iOS系统可能无法满…...

cpu的各种寄存器及其功能

cpu的功能 指令控制 完成取指令,分析指令,执行指令的操作 操作控制 产生完成一条指令所需要的操作信号,从而控制这些部件按指令的要求正确执行 时间控制 严格控制各种操作信号出现的时间,持续时间以及出现的时间顺序 数据加工 对数据进行逻辑和算数运算 中断处理 对计算机运…...

如何关闭电视的ACR功能及其对隐私保护的重大意义

本文详细解析智能电视自动内容识别(ACR)技术的工作原理与隐私风险,提供三星、LG、索尼、海信、TCL五大品牌电视的ACR关闭步骤,帮助用户有效保护个人观看数据免受商业监控。如何关闭电视的ACR功能(及其重大影响) 智能电视操作系统带来便利的同时,也引发了新的隐私担忧——尤…...

huggingface 模型权重文件

文件类型文件名示例用途模型权重 pytorch_model.bin 或 model.safetensors 包含模型训练后的参数权重配置文件 config.json 包含模型架构和超参数配置词汇表文件 vocab.json, vocab.txt, tokenizer.json 分词器所需的词汇映射分词器配置 tokenizer_config.json 分词器的配置参数…...

vscode设置单击选中带连字符的单词

1、打开 VSCode 设置打开设置搜索 wordSeparators,找到 Editor: Word Separators 选项。2、移除 - 字符默认值类似:`~!@#$%^&*()-=+[{]}\\|;:",.<>/?删除 -(连字符),使其变成:`~!@#$%^&*()=+[{]}\\|;:",.<>/?这样 - 就不会被视为单词分隔…...

P4147 玉蟾宫(悬线法)

P4147 玉蟾宫#include <bits/stdc++.h> using namespace std;const int maxn = 1e3 + 10;int n,m; int a[maxn][maxn] = {{0,0}}; int l[maxn][maxn],r[maxn][maxn],h[maxn][maxn]; int ans;int main(){ios::sync_with_stdio(0);cin.tie(0);cin >> n >> m;fo…...

全局平衡二叉树

发现自己在大力 DS 这个领域有一些欠缺,所以来补一下。 所谓全局平衡二叉树(GBST)就是 LCT 的静态版本。 我们对树先重剖,然后把每条重链上的点拎出来建一个 BST,满足这个 BST 的中序遍历就是这个重链从上到下遍历得到的序列。然后让这个 BST 的根指向这个点原树上的父亲。…...

Transactional注解的方法里 spring怎么知道我用的是哪个jdbctemplate实例

> 这是一个非常好的问题,它触及了 Spring 框架中声明式事务管理(`@Transactional`)和底层资源管理(`JdbcTemplate`)如何协同工作的核心。 简单直接的回答是:**Spring 并不知道,也不关心你的方法内部使用的是哪个 `JdbcTemplate` 实例。它只关心当前线程是否已经绑定…...

根据参数查询

根据参数查询<!-- 根据参数查询--><select id="listByMap" resultMap="ResultMapManage" parameterType="map">select <include refid="Manage_field"/>from manage where 1=1<include refid="Manage_wh…...

关于非侵入式脑机接口面向C端一个应用想法

目前,脑机接口行业发展如火如荼,但应用仍高度集中在医疗领域,比如运动功能康复等。这类方向不仅技术相对成熟,也更易获得商业回报——毕竟无论是医院还是患者,都更愿意为“恢复健康”买单。然而,若希望脑机接口能像汽车、手机那样,真正融入普通人的日常生活,成为不可或…...

Blelloch并行扫描算法

本文介绍了一个可以用于并行化串行累计操作的Blelloch算法,可以通过用空间换时间+并行计算的方法,来降低特定计算的时间复杂度。这里我们给出了算法原理的大致介绍,以及基于Numpy的算法代码实现。技术背景 由于现代计算机技术的发展,算法的并行能力越来越强大。所以当我们考…...

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型

国产化DevOps生态崛起:Gitee如何赋能企业数字化转型 在数字化转型浪潮中,中国企业的软件研发模式正经历深刻变革。随着信创战略的深入推进,构建自主可控的DevOps工具链已成为各行业技术负责人的核心任务。作为国内领先的代码托管平台,Gitee正通过其本土化优势与开放性生态,…...

【IEEE出版】2025年电气、控制与人工智能国际学术会议(ICOECAI 2025)

2025年电气、控制与人工智能国际学术会议(ICOECAI 2025) 2025 International Conference on Electrical, Control and Artificial Intelligence 在这里看会议官网详情 2025年10月24-26日 中国广州 截稿时间:见官网 接受/拒稿通知:投稿后5天内 收录检索:IEEE Xplore、EI …...

采购计划 vs 物料需求计划(MRP),采购新手最容易搞混的两份“清单”!

很多采购新手一上手就懵了:手里同时有两份计划一个叫“采购计划” 一个叫“MRP(物料需求计划)”你一看,都是要买东西啊,干嘛分两份?https://s.fanruan.com/m15ta 很多企业常常把这两份清单混为一谈,结果掉进坑里——采购超预算、缺料、库存积压……问题全来了。 今天,我…...

P10299 [CCC 2024 S5] Chocolate Bar Partition

题目传送门DP、状态设计优化。题意 将一个 \(2 \times N(N \le 2\times 10^5)\) 的矩阵分为尽可能多的联通块,使得每个联通块中的数的平均值都相等,求最多可以将矩阵分为多少个联通块。 题解 显然是 DP,并且复杂度要在 \(O(N \log N)\) 或者 \(O(N)\)。 平均值相等很难维护,…...

实用指南:企业实施数字化转型时常见的挑战

实用指南:企业实施数字化转型时常见的挑战pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

当ARMxy+AI边缘计算落地水泵行业就碰撞出怎样的火花?

水泵,这个看似再普通不过的设备,正在城市供水、楼宇二次供水、农业灌溉、工业循环水等场景里默默运行。它们是“水的搬运工”,也是能耗大户、运维难点。然而,在 数字化浪潮下,水泵行业也开始面临三个迫切问题:能耗高:传统 PID 调节方式,难以精准匹配用水曲线;运维难:…...

QN8035 FM芯片驱动开发

一、驱动开发基础配置 1.1 硬件接口配置通信协议:标准I2C接口(设备地址:写0x20/读0x21) 关键引脚: SDA/SCL:I2C数据线(需接4.7kΩ上拉电阻) XTAL_IN/XTAL_OUT:外部晶振输入(支持16MHz/24MHz) RDS_IN:RDS数据输入(需连接解码芯片)1.2 寄存器配置要点 #define QN80…...

再见 Claude Code,我选择了 Codex!真香!!

大家好,我是R哥。 最近,我放弃 Claude Code 了,选择了 CodeX,真香! 为什么放弃 Claude Code? 第一,是因为 Claude 全面封禁了中国控股公司使用,让我很不爽。推荐阅读:真行!Claude 全面封禁中国。。 第二,我用不惯 Claude,我一直用的 ChatGPT,为了使用 Claude Code…...

2025中国DevOps工具生态全景:本土化突围与智能化跃迁

2025中国DevOps工具生态全景:本土化突围与智能化跃迁 在全球数字化转型浪潮席卷之下,DevOps工具市场正以年复合增长率24%的速度扩张。中国信通院最新数据显示,2023年国内DevOps平台市场规模达58亿元,其中本土解决方案占比首次突破40%。这场由自动化向智能化的产业升级中,工…...

字符串转 python 对象 eval

s = [ { label: "苹果", value: "origin_event_data", icon: "icon-a", color: "#409EFF", bgColor: "#ECF5FF", borderColor: "#D9ECFF", }, { label: "橘子…...

蛋白多序列比对美化

1、用snapgene进行多序列比对,导出alin文件 2、用python进行多序列比对美化点击查看代码 from Bio import AlignIO import os# ====== 用户参数 ====== alignment_file = "比对.fa" # 输入比对文件(fasta/clustal) alignment_format = "fasta" html_…...

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代

Gitee推出Remote mcp-gitee:云端MCP服务开启智能协作新时代 中国领先的代码托管平台Gitee近日正式发布Remote mcp-gitee服务,这项基于云端的MCP Server解决方案将彻底改变开发团队的协作方式。作为三月发布的本地版MCP Server的云端升级版本,Remote mcp-gitee无需复杂部署即…...

Gitee DevOps平台:驱动中国企业数字化转型的核心引擎

​# Gitee DevOps平台:驱动中国企业数字化转型的核心引擎 在全球数字化浪潮席卷的今天,软件开发与运维的效率直接决定了企业的市场竞争力。作为国内领先的一站式DevOps平台,Gitee通过其本土化优势和技术创新能力,正在帮助数千家企业实现研发效能的显著提升,成为中国企业数…...

10 类多布局扫描图像数据集:支撑 OCR 精度提升与 VLM 微调,覆盖广告 / 简历 / 论文等场景的计算机视觉训练数据

一、引言与背景 在人工智能与计算机视觉技术深度融合的当下,光学字符识别(OCR)与视觉语言模型(VLM)已成为文档智能处理领域的核心支撑技术,广泛应用于金融票据识别、企业文档管理、学术数据挖掘等诸多场景。然而,现有模型在面对真实世界中多样的文档类型、复杂的排版布局…...

国产化Excel开发组件Spire.XLS教程:C# 轻松将 DataSet 导出到 Excel

在 C# 开发中,DataSet 常用于管理内存中的数据,通常来源于数据库查询或系统集成过程。本文将介绍如何使用 Spire.XLS for .NET 在 C# 中导出 DataSet 到 Excel,包括创建 Excel 文件、将多个 DataTable 分别写入不同工作表、应用格式化,以及处理大数据量导出等场景。在 C# 开…...

Mysql:Docker的Mysql容器加载Levenshtein 距离算法脚本,实现“相似度匹配”

前言MySQL自带的Like函数是“包含匹配”,即查询目标需要包含指定条件字符才会匹配到;而“相似度匹配”是匹配目标与条件字符是否相似,例如:“这是北京大学”与 “北大”就会有相似度,这样就会查出这类数据信息,只不过它的相似度分数值比较低而已。为了实现这个“相似度匹…...

树链剖分

树链剖分介绍 树链剖分是什么?主要用来处理什么问题 树链剖分(Heavy-Light Decomposition, HLD)。1. 树链剖分的定义 树链剖分是一种 把树分解成若干条链 的算法技巧。 在一棵树上,我们把每个节点的“重儿子”挑出来(通常是子树规模最大的儿子),把它和父亲连成 重边,其…...

【2025-09-17】慢慢得到

20:00人的一切都应该是美的,无论面孔,还是衣裳、心灵或思想。——契诃夫连续两天都没能送孩子上学,因为约了客户都是早上9点半开会,所以必须得提前出门。提前的时间刚好碰上何太的上班时间,然后就一起出门了。考虑到在客户现场停车不方使,于是就赠何太的车去到市区再打车…...

Excel处理控件Aspose.Cells教程:如何使用Python在Excel中创建下拉列表

Excel 中的下拉列表是数据验证最实用的功能之一。在本教程中,我们将向您展示如何借助Aspose.Cells使用 Python 在 Excel 中创建下拉列表。Excel 中的下拉列表是数据验证最实用的功能之一。它允许您将用户输入限制为预定义的选项,减少错误并保持数据输入的一致性。无论您将其称…...

STM32的电子钟功能实现

一、系统架构设计 1.1 硬件组成框图 graph TD A[STM32F103C8T6] --> B[OLED0.96] A --> C[按键矩阵] A --> D[蜂鸣器] B --> I2C总线 C --> EXTI中断 1.2 核心模块划分时间管理:SysTick定时器中断(1ms精度) 显示驱动:SSD1306 OLED中文显示 用户交互:4x4矩阵…...

kylin V11安装mysql8.0.41(glibc2.28)

环境:OS:kylin V11mysql:8.0.41 glibc2.28查看系统glibc版本[root@localhost soft]# ldd --versionldd (GNU libc) 2.38Copyright (C) 2023 Free Software Foundation, Inc.This is free software; see the source for copying conditions. There is NOwarranty; not even for…...