20232426 2025-2026-1 《网络与系统攻防技术》实验四实验报告

news/2025/11/10 21:03:28/文章来源:https://www.cnblogs.com/lara666/p/19205901

一、实验目标(内容)

  1. 恶意代码文件类型标识、脱壳与字符串提取
  2. 使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息
  3. 分析一个自制恶意代码样本rada,并撰写报告
  4. 取证分析实践

二、实验步骤

任务一:恶意代码文件类型标识、脱壳与字符串提取

1. 分析原始rada样本

在Kali虚拟机中使用file命令分析目标文件的类型和结构。
分析结果表明RaDa.exe是一个适用于MS Windows 4.00(图形界面)的PE32(32位)可执行文件,基于Intel i386架构,包含3个区段。

884d2866c166748d2f0ac01df44da409

在主机中使用软件PEiD对目标文件进行分析。PEiD检测到该文件使用了UPX加壳,并给出了UPX加壳的版本区间,同时还显示Markus & Laszlo是该UPX的开发者。

8543b3c415c23826b10a0152b021ee96

2. 分析脱壳后的RaDa样本

使用超级巡警对RaDa样本进行脱壳处理。

d7e3ed83e9f4fbe8bea4a771d78226a6

打开IDA Pro,选择PE Executable,即对Windows下的可执行文件进行分析。所需分析的文件是经过脱壳后的RaDa_unpacked.exe文件。

0882aaff76ec2c21b8612471738c928a

选择IDA ViewA,在地址为00403F7A处可以看到RaDa文件的作者信息,为Raul Siles && David Perez;在地址为00403FD4处可以看到RaDa文件的创作时间,为2004年9月。

e30a91f1297c8a556cfbe0fba225495a

任务二:使用IDA Pro静态或动态分析crackme1.exe与crakeme2.exe,寻找特定输入,使其能够输出成功信息

1. 分析文件crackme1.exe

在主机的cmd中运行此文件,当输入1个参数时,文件提示“Pardon? What did you say?”;发现当输入多个参数时,文件给出提示“I think you are missing something.”。说明该文件需要输入一个正确的参数。

image

IDA Pro中打开文件crackme1.exe,选择View→Graphs→Function calls,打开该文件的函数调用图,发现函数sub_401280会调用strcmp(用于字符串比较的库函数)以及fprintf、printf等涉及IO的库函数,说明sub_401280函数可能会对接收的参数进行比较判断,并输出相应语句。

6613add4adeba6ff5602a30fbe8e87d1

选择Windows→Functions,打开函数管理工具,双击需分析的函数sub_401280,打开该函数的流程图。

71cb512b69df89131e4a2643b299c97f

从函数流程图分析可知,当输入的总参数个数≠2时(即程序名加用户参数的总数不满足),程序输出“I think you are missing something.”;当总参数个数=2但用户传入的参数不是“I know the secret”时,程序输出“Pardon? What did you say?”;当总参数个数=2且用户传入的参数为“I know the secret”时,程序输出“You know how to speak to programs, Mr. Reverse-Engineer”。因此,该程序需要输入1个参数字符串“I know the secret”(总参数为程序名加此参数,共2个),且程序不校验自身文件名,仅验证用户传入的这1个核心参数。

10b5ef4f20fafdc467bc507548913904

在Windows主机的PowerShell中再次运行此文件,输入额外参数“I know the secret”,得到了正确的回答。

514a75b769f24e648488996b9ab06e52

2. 分析文件crackme2.exe

在Windows主机的PowerShell中运行此文件,发现返回情况大体与crackme1.exe相似.但输入额外参数为“I know the secret”时,仍然无法验证通过,说明还需寻找适合crackme2.exe的正确参数。

e887ff58ca5ea5bf4df7f9aeda08b289

打开crackme2.exe的函数调用图,发现函数sub_401280会调用strcmp、fprintf、puts、putchar等可疑的库函数,说明sub_401280函数可能仍是对接收的参数进行比较判断的函数。

1b88206579389249aecf0b3a9482f91d

在函数管理工具中打开函数sub_401280的流程图,分析可知,除crackme1所具有的比较内容外,crackme2还对输入的第一个参数进行了比较,要求其为“crackmeplease.exe”。说明我们需要将该文件的文件名修改为crackmeplease.exe再运行。

731e7cd4dd9a04e57bff0374de10e91f

修改文件名,在cmd中再次输入参数。发现可以获得正确的结果。

b2406987ee7eb70dd11a0c1c749c1943

任务三:分析一个自制恶意代码样本rada,并撰写报告

1. 在虚拟机通过输入以下命令对RaDa文件的进行文件类型识别、完整性验证以及时间戳分析:

file RaDa.exe   #识别文件类型
md5sum RaDa.exe   #计算文件的md5摘要值
exiftool RaDa.exe | grep "Time Stamp"   #提取文件元数据并过滤时间戳信息

从返回值中可以看出RaDa.exe是一个32位Windows GUI程序,其md5摘要值为caaa6985a43225a0b3add54f44a0d4c7,且在2004年10月30日编译的。

1f0ec849fcc24fa84abb2c8a8e18b170

2. 分析文件的目的

在IDA Pro中分析脱壳后的RaDa文件。打开函数调用图,发现函数sub_404FB0下有很多的子函数。

2dca1bf33658d1349e1c48629cefa0c0

分析该函数的流程图以获取更多信息。

a041a8986e3d0885f0c403f142c8210f

查看sub_404FB0流程图发现,该文件主要通过修改注册表和定义恶意路径,以实现恶意软件的持久化驻留与远程控制。具体分析如下:

  • 复制临时目录路径(用于存储下载的指令/数据)ff2a52305449084a707d3edec7f0da83
  • 复制注册表启动项路径(HKLM下的开机自启键)6c974bae083a571b8d3240a10eadc1fb
  • 复制注册表值名称(启动项对应的键名)
    efd5573f06e80c341c71dc37607de951
  • 复制程序安装目录(恶意程序自身存放路径)b7a595a6b99346038761df91b6c95e46
push    eax ; 指向"C:\\RaDa\\bin"
push    offset dword_402A00 ; 路径分隔符"\"
call    ebx ; __vbaStrCat(字符串拼接)
push    eax ; 指向"C:\\RaDa\\bin\"
push    offset aRada_exe ; "RaDa.exe"
call    ebx ; __vbaStrCat
mov     edx, eax
mov     ecx, offset dword_40C05C ; 最终路径存入该缓冲区
call    __vbaStrMove

9d24de395501fc052ddad685c75a2991

3. 问题回答

  1. 问题一:提供对这个二进制文件的摘要,包括可以帮助识别同一样本的基本信息。

回答一:它的MD5摘要为 caaa6985a43225a0b3add54f44a0d4c7。其他基本信息:RaDa.exe 是32位 Windows GUI可执行文件,面向Intel x86处理器,内部含3个段。

  1. 问题二:找出并解释这个二进制文件的目的。
    回答二:这是一个远程控制后门程序。它先创建专属工作目录,通过开机自启动实现持久化潜伏与环境准备,随后连接远程C&C服务器,等待并执行数据窃取、参与DDoS攻击、充当跳板等恶意指令。

  2. 问题三:识别并说明这个二进制文件所具有的不同特性。
    回答三:该二进制文件是经UPX压缩壳保护、VBA编译的模块化后门程序,具备持久化与网络通信能力,特性包括:开机自启动、动态创建工作目录、与硬编码C&C服务器HTTP通信、下载并执行后续恶意载荷。

  3. 问题四:识别并解释这个二进制文件中所采用防止被分析或逆向工程的技术。
    回答四:该文件采用 UPX 加壳技术,通过压缩原始代码、劫持入口点隐藏程序逻辑。应对方法:使用脱壳工具还原原始代码,通过动态调试绕过反调试机制。

  4. 问题五:对这个恶意代码样本进行分类(病毒、蠕虫等),并给出你的理由。
    回答五:该RaDa恶意代码样本属于后门程序。理由:它不具备自我复制或主动传播能力,需通过伪装诱导用户执行,核心行为是在受害主机建立隐蔽持久的远程访问通道,供攻击者完全控制主机。

  5. 问题六:给出过去已有的具有相似功能的其他工具。
    回答六:功能相似的工具包括:后门程序灰鸽子,可创建后门的工具msfvenom、veil。

  6. 问题七:可能调查出这个二进制文件的开发作者吗?如果可以,在什么样的环境和什么样的限定条件下?
    回答七:可以调查出开发作者。该二进制文件开发者为Raul Siles && David Perez,可在IDA Pro中找到相关信息。

  7. 问题八:给出至少5种检测该恶意软件的方法,例如基于特征码的方法,需要详细介绍每种方法。

  • 方法一:基于特征码的检测
    将软件内容与病毒库特征码比对,匹配即判定为恶意软件,含静态特征码与UPX壳特征码(加壳文件标记为可疑)。优势:资源消耗低、对已知病毒有效;劣势:对病毒库外特征值无效。
  • 方法二:基于启发式的检测
    通过分析代码行为与逻辑判断恶意性,采用预定义规则与评分系统,得分超阈值即判定可疑。优势:可检测未知病毒及变种;劣势:漏报、误报概率较高。
  • 方法三:沙箱检测
    在隔离虚拟环境中安全执行可疑文件并监控行为。优势:能还原完整行为链、检测准确;劣势:资源消耗大、速度慢,易被高级恶意软件识别并规避。
  • 方法四:基于网络流量分析的检测
    监控数据包,分析流量模式、协议与内容,如检测连接恶意IP、下载DDoS模块及异常发包行为。优势:可检测内网渗透恶意软件、不受加壳影响;劣势:加密通信场景下检测困难。
  • 方法五:基于日志分析的检测
    通过分析系统日志发现恶意行为。优势:适用于事后取证与失陷主机排查;劣势:日志量巨大,易被攻击者清除,分析难度高。

任务四:取证分析实践

1. IRC

问题:
(1)IRC是什么?
(2)当IRC客户端申请加入一个IRC网络时将发送哪个消息?
(3)IRC一般使用那些TCP端口?

回答:
(1)IRC的全称为Internet Relay Chat,它是一种基于文本的实时网络聊天协议,主要用于多用户、多频道的即时交流。僵尸网络的控制者经常利用IRC服务器作为命令控制服务器,被感染的肉鸡会作为客户端连接到指定的IRC频道,等待攻击者下达指令。
(2)当IRC客户端想要加入一个网络时,它需要完成注册操作,即发送一条PASS/NICK/USER组合消息。其中PASS是网络或服务器所需的口令(可选),NICK是网络上的昵称,USER是注册用户的个人信息。在这些消息中,最核心的、标识身份的消息NICK和USER。当服务器收到这些信息后,如果昵称没有被占用,就会把用户注册到网络中,并返回表示成功的代码。
(3)IRC最常使用的端口是6667端口与6697端口,偶尔也会使用其他相关的端口。其中6667端口是IRC的默认非SSL端口,其上通信是明文传输的;6697端口是现代IRC最常用的SSL/TLS加密端口,可防止通信被窃听。

2. 僵尸网络

问题:
(1)僵尸网络是什么?
(2)僵尸网络通常用于什么?

回答:
(1)僵尸网络是一个由攻击者通过命令与控制服务器集中控制大量被感染的互联网设备组成的网络。其中被控制的设备就是僵尸主机或肉鸡。
(2)僵尸网络的核心价值在于庞大、可远程控制的资源。攻击者利用这些资源进行多种犯罪活动。比如发动DDOS攻击、作为跳板增加追踪难度、信息窃取与数据挖掘、静默挖矿等。

3. 蜜罐主机

问题:蜜罐主机(IP地址:172.16.134.191)与哪些IRC服务器进行了通信?

回答:蜜罐主机与IP地址为209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10的IRC服务器进行了通信。
在Wireshark中打开botnet_pcap_file.dat文件,通过命令ip.src==172.16.134.191 and tcp.dstport==6667,筛选源IP为172.16.134.191,目的端口为6667的数据包。经过分析可知,蜜罐主机与4台IRC服务器进行通信,IRC服务器的IP分别是209.126.161.29、66.33.65.58、63.241.174.144、217.199.175.10。

cd4d3529a7cffebb5d4c729f2728e5f2

4. 访问过服务器的僵尸网络

问题:在这段观察期间,多少不同的主机访问了以209.196.44.172为服务器的僵尸网络?

回答:有3461个不同的主机访问了这一僵尸网络。
在Kali虚拟机中需安装软件tcpflower。通过命令sudo apt update更新软件包列表索引,再通过命令sudo apt-get install tcpflow,下载tcpflower。可通过命令tcpflow --version查看安装版本。
通过命令tcpflow -r botnet_pcap_file.dat "host 209.196.44.172 and port 6667",使用tcpflow,从botnet_pcap_file.dat文件中,筛选出与IP为209.196.44.172且端口为6667的主机相关的所有TCP流量数据。

3f43e867c77a80663fa8aea28e5c291d

执行后,tcpflow会生成report.xml报告文件,包含了TCP流量的统计信息。此外还会生成独立的TCP连接流文件,其文件名格式为:源IP.源端口—目的IP.目的端口。
3f43e867c77a80663fa8aea28e5c291d
在僵尸网络场景中,受感染的主机会主动去连接服务器。因此,此处需要查找源IP为209.196.44.172的文件,使用命令cat 209.196.044.172.06667-172.016.134.191.01152 | grep -a "^:irc5.aol.com 353" | sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g" | tr ' ' '\n' | tr -d "\15" | grep -v "^$" | sort -u | wc -l,精确统计访问僵尸网络服务器的不同客户端数量。

其中grep -a "^:irc5.aol.com 353"用于筛选,只保留以:irc5.aol.com 353开头的行;sed "s/^:irc5.aol.com 353 rgdiuggac @ #x[^x]*x ://g"用于清理修剪,只保留用户名列表;tr ' ' '\n'用于转换格式;tr -d "\15"用于删除隐藏字符;grep -v "^$"用于删除空行;sort -u用于排序去重;wc -l用于计数。从返回数据可知,共有3461台不同的主机访问了以209.196.44.172为服务器的僵尸网络。
8c2a0d01e3e4bb2b58ddc11248823db0
5. 被用于攻击蜜罐主机的IP地址

问题:哪些IP地址被用于攻击蜜罐主机?

回答:共有165个IP地址被用于攻击蜜罐主机
通过tcpdump -n -nn -r botnet_pcap_file.dat 'dst host 172.16.134.191' | awk -F " " '{print $3}' | cut -d '.' -f 1-4 | sort | uniq | more > 20232426ljc.txt;wc -l 20232426ljc.txt,从botnet_pcap_file.dat文件中,找出所有向主机172.16.134.191发送数据包的源IP地址,保存并统计它们的具体数值。其中awk -F " " '{print $3}'表示提取源IP地址和端口,cut -d '.' -f 1-4表示从“源IP.源端口”中分离出纯IP地址,sort | uniq表示对IP地址进行排序和去重。

87511dd3756a8bf4ee1b65efe739f8e9

6. 攻击者使用的安全漏洞

在Wireshark中打开将botnet_pcap_file.dat文件,选择点Statistics→Protocol Hierarchy,分析网络流量中各种协议的分布情况和层次结构。从分析结果中可以看出,攻击者大部分使用了TCP数据包(占比约99.7%),也有使用少量的UDP数据包(占比约0.3%)。
ad7c3ae8f4cfb22558903446d5fce6a4
在Kali终端中使用命令tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and tcp[tcpflags]== 0x12 | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq,筛选主机172.16.134.191发起的所有TCP连接的源端口号;使用命令tcpdump -r botnet_pcap_file.dat -nn 'src host 172.16.134.191' and udp | cut -d ' ' -f 3 | cut -d '.' -f 5 | sort | uniq,筛选主机172.16.134.191发送的所有UDP数据包的源端口号。
c47bd0067399fad126c78820b77980a5
对于TCP的分析结果可知,使用的端口有135(RPC,Windows远程过程调用)、139/445(SMB,Windows文件共享)、25(SMTP,简单邮件传输协议)、4899(Remote Administrator,远程控制软件)、80(HTTP,网页服务)。对于UDP的分析结果可知,使用的端口为137(NetBIOS,Windows网络邻居功能)。
7. 成功的攻击与原因
成功的攻击有:TCP连接得到445端口、4899端口、80端口。成功原因见具体分析部分:

  1. TCP连接135端口
    在Wireshark中打开将botnet_pcap_file.dat文件,设置过滤条件为ip.addr==172.16.134.191 and tcp.port==135
    daf1e50c21a64183af3c9074a9f967a4
    经分析可知,对于TCP连接的135端口,只有三次握手的数据包,而没有后续的恶意数据包,且客户端很快发送FIN请求断开连接。因此135端口虽被成功连接,但未被成功利用。

  2. TCP连接139端口
    设置过滤条件为ip.addr == 172.16.134.191 and tcp.port == 13
    6b862f4c54f647c3a57632a3625de0ea
    经分析可知,对于TCP连接的139端口,具有三次握手的数据包,且攻击者尝试访问共享目录\PC0191\c,但服务器返回RST拒绝访问,后续也没有恶意数据包。因此139端口虽然被成功连接,但未被成功利用。

  3. TCP连接25端口

    设置过滤条件为ip.addr == 172.16.134.191 and tcp.port == 25
    3391c8d2f0f6532c705dc7d96c1fea44
    经分析可知,对于TCP连接的25端口,具有三次握手的数据包。但接建立后,没有后续的恶意数据包,且服务器很快发送FIN,ACK请求断开连接。因此25端口虽然被成功连接,但未被成功利用。

  4. TCP连接445端口

设置过滤条件为ip.addr == 172.16.134.191 and tcp.port == 445
6cd11ac60938962cb6c5a4b2a82d2097
经分析可知,外部主机195.36.247.77向172.16.134.191:445发起TCP三次握手,完成NTLMSSP认证协商并通过认证,随后发送Tree Connect请求以访问共享资源。

此外,多个源IP向目标172.16.134.191:445发起大量SMB请求,包含重复NTLMSSP认证、多路径Tree Connect操作及大量SAMR/DCE/RPC操作,疑似横向移动或扫描行为。

最后,攻击者通过445端口SMB协议,成功删除目标主机172.16.134.191上C:\System32\PSEXESVC.EXE文件。该文件是Windows系统PsExec工具的远程命令执行服务端组件,删除后会导致PsExec失效,推测是攻击者为清除痕迹或阻止后续检测所采取的行动。
9ab3b32cdc7bd28492ebd6be0dd0c022
综上,对于TCP连接的445端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→认证→权限扩张→恶意文件操作。且攻击者能够删除System32目录下的文件,说明它可能通过漏洞利用或则和弱口令攻击的方式获得了管理员权限。这属于SMB漏洞利用。
5. TCP连接4899端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==4899
73cc8d2cbe169f48a22f9d9355b3bc93
经分析可知,外部主机向172.16.134.191:4899发起TCP三次握手,随后发送了大量rbakcupl > radmin-port [PSH,ACK]数据包,表示攻击者通过4899端口持续传输数据。而PSH表示“紧急需要立即处理的数据”,说明攻击者已建立稳定的通信通道。
image
最后,攻击者通过HTTP请求,发送目录遍历攻击HEAD /cgi/../../../../../winnt/system32/cmd.exe?/c+dir。
6567adc836772e310aa12e363ab1823e
综上,对于TCP连接的4899端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→数据传输→恶意命令执行。攻击者通过4899端口的Web界面漏洞,成功执行了系统命令,说明4899端口已被用来控制目标主机。这属于远程控制软件漏洞利用。
6. TCP连接80端口
设置过滤条件为ip.addr==172.16.134.191 and tcp.port==80
d514eaa592039f94f3f48bbacf3975d7

经分析可知,正常TCP三次握手后,攻击者向80端口发送含大量字符“c”的数据包,该数据包为缓冲区溢出攻击载荷。攻击包发送后,服务器未返回任何RST或ICMP错误信息,表明已接收并处理该恶意请求。此外,攻击后客户端与服务器仍存在正常HTTP通信,此次攻击未造成服务崩溃,但攻击者大概率已在服务器植入后门或维持访问权限,导致服务器被控制。
4ffc30a3b01d60b9b220f53b257153ae

综上,对于TCP连接的80端口,已被攻击者成功利用。攻击者的具体攻击方式为:初始连接→缓冲区溢出攻击→恶意代码执行。攻击者通过80端口的Web服务漏洞,成功发送了包含超长字符串的恶意载荷,导致目标服务器缓冲区溢出,从而控制目标主机。这属于Web服务缓冲区溢出漏洞利用。
7. UDP连接137端口
设置过滤条件为ip.addr==172.16.134.191 and udp.port==137
e4b3f7456340d4910cf1a5070b674f8e
经分析可知,对于UDP连接的137端口,虽然具有大量的NetBIOS服务扫描活动,但数据包内容均为正常的名称查询与响应,未包含任何攻击载荷,应当未被攻击者成功利用

三、实验中遇到的问题与解决方法

问题 1:crackmeplease.exe 无法在PowerShell中执行,仅能在CMD中运行
问题描述:PowerShell中使用./调用crackmeplease.exe并传入参数时,程序返回错误提示;不添加./则无法启动程序,切换到CMD中直接调用可正常执行。
原因:crackmeplease.exe需双重校验参数(第一个用户参数必须为纯程序名"crackmeplease.exe",第二个为"I know the secret")。PowerShell中./调用会使程序接收的第一个参数含./前缀(如./crackmeplease.exe),与校验要求不匹配;CMD 无需./前缀,传入的第一个参数为纯程序名,符合校验规则。
解决:在CMD中执行完整命令crackmeplease.exe "I know the secret"

四、学习体会

本次实验的顺利完成,同样离不开对前人成果的借鉴与参考。通过IDA反汇编工具分析,我发现恶意程序的某一关键步骤设计的确很巧妙;同时,我还借助IDA的流程图视图,对两个crackme的执行流程展开深度拆解。此外,针对botnet_pcap_file.dat文件的分析,让我直观观察到攻击行为所利用的端口信息,相比计算机网络、路由及网络安全协议课程中的常规抓包练习,更加刺激,但核心仍未脱离TCP三次握手的基础原理。在此,感谢前辈们的经验与实验报告,为我高效推进实验提供了重要指导😘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/961750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 的方法和状态码 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

华凌燃气灶维修全国各售后号码《今日汇总》

华凌燃气灶售后维修服务热线-号码2025已更新(受理/派单 华凌燃气灶售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验…

通过远程桌面连接Windows实例, 提示“为安全考虑, 已锁定该用户帐户, 原因是登录尝试或密码更改尝试过多”

问题现象 使用远程桌面、Workbench或者Windows APP等工具远程登录Windows实例时,提示“为安全考虑,已锁定该用户帐户,原因是登录尝试或密码更改尝试过多”或类似错误。 一、锁定根本原因安全策略触发账户保护机制系…

P12504 「ROI 2025 Day1」树上的青蛙

树上最大匹配对数,考虑贪心。怎么感觉题解都没有很讲明白复杂度优化的过程,也可能是我太蠢了。 \(d\) 为偶数的情况 \(d\to d-1\) 没有影响,所以只讨论 \(d\) 为奇数。 假设 \(lca(u,v)=w\),\(V_i=\{u|dep_u=i\}\)…

重练算法(代码随想录版) day6 - 哈希表part1

day5周日休息一天 今日刷题量:8 当前刷题总量:33 Easy: 20 Mid: 12 Hard: 1 Day 6 基础理论 1.哈希表通常用来判断一个元素是否出现在集合里,牺牲空间来换时间。 2.通过哈希函数得到索引,将元素存储在索引对应的位…

目前广州往返珠海网约车软件

广州往返珠海首选网约车平台推荐:广州城市快线汽车租赁有限公司专业城际出行服务,让您的旅途更舒心如果您正在寻找广州往返珠海的网约车服务,广州城市快线汽车租赁有限公司是您的最佳选择。作为广州地区领先的城际出…

利用RFM模型对客户进行分类

数据大概长这样: A1:C101存储着销售数据 E1:J17对销售数据进行分类汇总以下为单元格公式: F2:用每个客户总消费额,除以每个客户的消费次数,这里次数定义是每人一天算一次 =ROUND(SUMIFS($C:$C,$A:$A,$E2)/SUM(--(U…

第三十七篇

今天是11月10号,上了数据建模语言,Java

别让料单拖慢开关柜生产!这个功能让精准与效率双在线

做成套高低压开关柜的你,是不是常被料单“卡脖子”? 柜型参数记错一个数,采购回来的元件直接报废;找绝缘辅料、断路器型号翻遍多个平台,半天凑不齐一份完整 BOM;好不容易做完料单,采购说型号不对、车间说参数不…

#题解#洛谷P4653

[传送门](P4653 [CEOI 2017] Sure Bet - 洛谷) 分析显然在同一类中选取灯泡越大越好。如果某一类中选取灯泡比另一类比另一类多太多,会造成较大的浪费(每次选灯泡收益-1)于是直觉告诉我们,AB两类的灯泡选取应该尽量…

Netty管道机制:ChannelPipeline与Handler详解

目录1. 简介2. Channel Pipeline的逻辑架构2.1. 通信调度层 Reactor2.2. 职责链 ChannelPipeline2.3. 业务逻辑编排层 ServiceChannelHandler3. ChannelPipeline3.1. ChannelPipeline的类继承关系图3.2. ChannelPipeli…

第六天 svn和git的安装和使用

一、svn的定义:多个人共同开发一个项目,实现共享资源。 作用:对项目相关文件进行管理和共享 (适合近距离,公司内) 二、svn安装 先安装服务端注意事项:将端口修改为8443,创建快捷方式到桌面 服务端的使用 1、创…

华帝热水器维修售后电话24小时—全国各区定点服务中心

华帝热水器(维修)售后服务中心--报修欢迎您 华帝热水器售后电话:400-1819-193 为了更好地为您提供米恩集成灶维修服务,我们特为您整理了详细的报修流程及常见故障处理方法,希望能为您带来便捷的服务体验。如需帮助,…

25.11.10随笔联考总结

考试 正常开题,发现 T1 很简单秒了,看 T2 也很简单,秒了,T3 貌似是一个背包,但是容量很大我一瞬间想到了生成函数然后 Bostan-Mori 直接做,但是又想到这是 NOIP 模拟赛所以放弃多项式小工业(其实我能够写出来)…

[Python刷题记录]-旋转图像-矩阵-中等

[Python刷题记录]-旋转图像-矩阵-中等链接:48. 旋转图像 - 力扣(LeetCode) 解题思路:找到原始点、最终点和中心点之间的关系,以3*3的矩阵为例原始点 最终点 中心点 原始点-中心点 最终点-中心点(1,0) (0,1)…

2025年11月学习机品牌全解析:找准适配款,提分更高效

如今的学习机市场早已进入红海竞争阶段:新品牌层出不穷,老品牌不断推新,各类宣传噱头眼花缭乱 —— 有的标榜 “全科提分神器”,有的宣称 “AI 全能辅导”,甚至不乏夸大功效、混淆概念的 “牛鬼蛇神”,让不少家长…

基于浏览器的DOCX文件编辑器:实现导入、编辑与导出功能 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年11月智能油烟机型号排行:实测数据与选购要点一网打尽

站在灶台前,油烟扑面、头发沾味、橱柜黏手,是多数家庭每天面对的“隐形家务”。2025年住建部《住宅厨房空气质量调研》显示,92%的家庭在煎炒高峰期PM2.5瞬时超标三倍,其中30-49岁女性受访者占比68%,她们普遍具备本…

P1531 I Hate It

#include <bits/stdc++.h> using namespace std; #define lc i<<1 #define rc i<<1|1 const int N=2e5+5; int n,m,a[N],ma[N<<2],x,y; void up(int i){ma[i]=max(ma[lc],ma[rc]); } void bu…

CI/CD产品选型调研 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …