搜索
查看: 3592|回复: 23
收起左侧

[讨论] AI杀毒引擎缺陷探索

  [复制链接]
电脑发烧友
发表于 2019-5-22 22:55:13 | 显示全部楼层 |阅读模式
本帖最后由 电脑发烧友 于 2019-5-23 22:47 编辑

不太会用论坛的编辑器,导致阅读较为困难,本文末尾提供本文的markdown文档和测试样本下载


AI杀毒引擎缺陷探索


声明
0.本文以智量的AI杀毒引擎为研究对象,意在探索AI杀毒引擎的一些缺陷,即探索任何一个AI杀毒引擎都存在的一些缺陷,并不是针对智量。
1. 作者并非专业人士,只是向在自己的能力范围内给出相对客观的猜测,真正衡量一款杀毒引擎(或者一类)的优劣是需要大量的数据进行进行横向比较的,而并非我一个外行人随便折腾折腾就能做的到的。
2. 本文以智量的AI杀毒引擎作为被测试对象,因为智量现在刚起步,其AI引擎也有很多地方需要完善,这时候也更容易爆露出AI杀毒引擎的一些缺陷,并不是以此来对智量的AI杀毒引擎进行贬低。
3. 本贴将会根据智量杀毒引擎的表现并综合其他引擎的结果做出作者现有知识范围内的自认为合理的猜测,而不是得出结论。
4. 本文所用测试的程序均使用C\C++语言编写,编译环境为DEV C++ 5.11 和 Microsoft Visual Studio 2019 Community,运行环境 Windows 10 1809 家庭版,智量版本2.05。
5. 本文使用了测试程序的汇编码进行了一些验证,其中涉及到编译的极小部分知识,作者对此接触不多,如有错误还请指出。
6.本文的所有猜测适用的AI引擎均符合一个条件——该引擎仅分析文件的静态特征,如果受测时智量的AI引擎不仅仅只分析文件的静态特征,那么本文所有基于现象的假设将会全部不可信。
7.本文所使用的测试样本的作用均为创建一个test.txt空文件。
8.本文的观点和猜测尚有不严谨之处,欢迎一起讨论。
9. TODO

1.WinAPI——OpenFile
本部分所使用测试代码

  1. #include <stdio.h>
  2. #include <Windows.h>

  3. int main() {
  4.         OFSTRUCT s;
  5.     // 在桌面创建一个名为“test.txt”的空文件
  6.         OpenFile("C:/Users/PC/Desktop/test.txt", &s, OF_CREATE);
  7.         printf("%d", s.nErrCode);
  8.         system("pause");
  9. }
复制代码

测试样本1.1
G++编译参数
  1. g++.exe "C:\Users\PC\Desktop\未命名1.cpp" -o "C:\Users\PC\Desktop\未命名1.exe" -g3 -O0 -I"...\Dev-Cpp\MinGW64\include" -I"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++" -L"...\Dev-Cpp\MinGW64\lib" -L"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -g3
复制代码
智量不杀
VT扫描结果

测试样本1.2
G++编译参数
  1. g++.exe "...\未命名1.cpp" -o "...\未命名1.exe"  -I"...\Dev-Cpp\MinGW64\include" -I"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++" -L"...\Dev-Cpp\MinGW64\lib" -L"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc
复制代码
1.2.png


VT扫描结果

测试样本1.3
使用VS2019 Debug X64 模式编译
智量不杀
VT扫描结果

测试样本1.4
使用VS2019 Release X64 模式编译
智量不杀
VT扫描结果

段落总结
四份相同的源代码,不同的编译选项,不同的开发环境造成了两种不同的结果,只有测试样本1.2出现了误报,其他的均未误报。由于在不同的情况对相同源代码的处理也不同,于是我分别查看了四个样本的汇编码

测试样本1.1
  1. .text:0000000000401540                 lea     rax, [rbp+s]
  2. .text:0000000000401547                 mov     r8d, 1000h      ; uStyle
  3. .text:000000000040154D                 mov     rdx, rax        ; lpReOpenBuff
  4. .text:0000000000401550                 lea     rcx, FileName   ; ".../test.txt"
  5. .text:0000000000401557                 mov     rax, cs:__imp_OpenFile
  6. .text:000000000040155E                 call    rax ; __imp_OpenFile
  7. .text:0000000000401560                 movzx   eax, [rbp+s.nErrCode]
  8. .text:0000000000401567                 movzx   eax, ax
  9. .text:000000000040156A                 mov     edx, eax
  10. .text:000000000040156C                 lea     rcx, Format     ; "%d"
  11. .text:0000000000401573                 call    printf
  12. .text:0000000000401578                 lea     rcx, Command    ; "pause"
  13. .text:000000000040157F                 call    system
  14. .text:0000000000401584                 mov     eax, 0
  15. .text:0000000000401589                 add     rsp, 0B0h
  16. .text:0000000000401590                 pop     rbp
  17. .text:0000000000401591                 retn</font>
复制代码

测试样本1.2
  1. .text:0000000000401540                 lea     rax, [rbp+ReOpenBuff]
  2. .text:0000000000401547                 mov     r8d, 1000h      ; uStyle
  3. .text:000000000040154D                 mov     rdx, rax        ; lpReOpenBuff
  4. .text:0000000000401550                 lea     rcx, FileName   ; ".../test.txt"
  5. .text:0000000000401557                 mov     rax, cs:__imp_OpenFile
  6. .text:000000000040155E                 call    rax ; __imp_OpenFile
  7. .text:0000000000401560                 movzx   eax, [rbp+ReOpenBuff.nErrCode]
  8. .text:0000000000401567                 movzx   eax, ax
  9. .text:000000000040156A                 mov     edx, eax
  10. .text:000000000040156C                 lea     rcx, Format     ; "%d"
  11. .text:0000000000401573                 call    printf
  12. .text:0000000000401578                 lea     rcx, Command    ; "pause"
  13. .text:000000000040157F                 call    system
  14. .text:0000000000401584                 mov     eax, 0
  15. .text:0000000000401589                 add     rsp, 0B0h
  16. .text:0000000000401590                 pop     rbp
  17. .text:0000000000401591                 retn</font>
复制代码
测试样本1.3
  1. 00007FF7BEEA187B  mov         r8d,1000h  
  2. 00007FF7BEEA1881  lea         rdx,[s]  
  3. 00007FF7BEEA1885  lea         rcx,[string ".../test.txt" (07FF7BEEA9CA8h)]  
  4. 00007FF7BEEA188C  call        qword ptr [__imp_OpenFile (07FF7BEEB0000h)]  
  5. 00007FF7BEEA1892  movzx       eax,word ptr [rbp+12h]  
  6. 00007FF7BEEA1896  mov         edx,eax  
  7. 00007FF7BEEA1898  lea         rcx,[string "%d" (07FF7BEEA9CCCh)]  
  8. 00007FF7BEEA189F  call        printf (07FF7BEEA11D6h)  
  9. 00007FF7BEEA18A4  lea         rcx,[string "pause" (07FF7BEEA9CD0h)]  
  10. 00007FF7BEEA18AB  call        qword ptr [__imp_system (07FF7BEEB02B8h)]  
  11. 00007FF7BEEA18B1  xor         eax,eax  </font>
复制代码

测试样本1.4


  1. .text:0000000140001081                 mov     [rsp+0C8h+var_18], rax
  2. .text:0000000140001089                 mov     r8d, 1000h      ; uStyle
  3. .text:000000014000108F                 lea     rdx, [rsp+0C8h+ReOpenBuff] ; lpReOpenBuff
  4. .text:0000000140001094                 lea     rcx, FileName   ; ".../test.txt"
  5. .text:000000014000109B                 call    cs:__imp_OpenFile
  6. .text:00000001400010A1                 movzx   edx, [rsp+0C8h+ReOpenBuff.nErrCode]
  7. .text:00000001400010A6                 lea     rcx, _Format    ; "%d"
  8. .text:00000001400010AD                 call    printf
  9. .text:00000001400010B2                 lea     rcx, Command    ; "pause"
  10. .text:00000001400010B9                 call    cs:__imp_system
  11. .text:00000001400010BF                 xor     eax, eax
复制代码

显然,DEV C++ 和 VS2019生成的汇编码并无较大差距,我认为本文中所截取的main函数中的部分汇编码的差别不足以影响到智量杀毒引擎的判断。那么是什么影响了智量杀毒引擎低判断呢?一个程序在运行时并不是只执行我们所写的代码,还要做一系列检查,比如检测系统环境,检测栈平衡等,检测运行参数等,以及不同的IDE生成的代码风格也不一样,我认为导致查杀结果不同的原因在此(可以理解为两个IDE生成的代码风格不同)。同时由于OpenFile这个API已经相当老了,现在除了老项目应该也没人用了。同时四个样本使用了四种代码优化方式,其中DEV C++开启-O优化后误报,我认为也可以认为是DEV C++对代码处理导致的。
P S:虽然现代编译器生成代码和优化代码都有公式可用,但是编译器终究是由人写的,我认为这很可能导致编译器生成的二进制代码具有一定的风格,而不是千篇一律。

总结观点
1. 本文中所截取的main函数中的部分汇编码的差别不足以影响到智量杀毒引擎的判断。
2. DEV C++ 和 VS2019 执行的编译生成的程序因其他非main函数内的代码影响了智量杀毒引擎的判断。
3. 由于OpenFile这个API属于几乎被抛弃的API,目前使用很少。
4. 附加观点:现在的工程很少用DEV C++开发,而VS 2019 多一些。

由上述第1,2,4观点可以做出一个猜测
智量的AI杀毒引擎在提取特征,尤其是白样本特征的时候提取更多的可能是VS2019(或VS 系列)的风格的特征,所以导致了测试样本1.3和1.4并未误报,然而在扫描测试样本1.2的时候可能因为之前提取的白特征中缺少DEV C++风格的白特征,加上命中了一些黑特征,所以被误报。但是本猜测无法解释测试样本1.1为何没有误报。

总结猜测
智量AI杀毒引擎提取的特征可能存在一些风格,这种带风格的特征可能会带来一些误报。不过显然我们最好不要提取出这种带风格的特征。这个猜测我认为同样适用于其他的AI杀毒引擎(如果没有做刻意规避的话),并不局限于智量的AI杀毒引擎。不过,基于虚拟机的启发式引擎受到此类影响相对于AI杀毒引擎则小很多,因为此类引擎的检测依据通常是外在的表现行为,而不是二进制特征。

2.C++ Standard Library——fstream
本部分所使用的测试代码
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <fstream>
  4. #include <Windows.h></div><div>using std::cout;
  5. using std::cin;
  6. using std::endl;
  7. using std::fstream;
  8. using std::ios;</div><div>int main() {
  9. fstream fs;
  10.     // 在桌面名为“test.txt”的空文件
  11. fs.open("test.txt", ios::out);
  12. if (!fs) {
  13.   cout << "fail" << endl;
  14. }
  15. fs.close();
  16. system("pause");
  17. }
复制代码

测试样本2.1

G++编译参数
  1. g++.exe "...\未命名1.cpp" -o "...\未命名1.exe" -g3 -O0 -I"...\Dev-Cpp\MinGW64\include" -I"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++" -L"...\Dev-Cpp\MinGW64\lib" -L"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -g3
复制代码
智量不杀
VT扫描结果

测试样本2.2

G++编译参数

  1. g++.exe "...\未命名1.cpp" -o "...\未命名1.exe"  -I"...\Dev-Cpp\MinGW64\include" -I"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include" -I"...\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++" -L"...\Dev-Cpp\MinGW64\lib" -L"...\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc
复制代码

智量不杀


测试样本2.3

使用VS2019 Debug X64 模式编译

智量不杀


测试样本2.4

使用VS2019 Release X64 模式编译

智量不杀

VT扫描结果

段落总结
改用C++标准库创建相同的文件则四个样本都没有误报。
同时从VT扫描结果中发现使用DEV C++的编译的两个样本尚有3的引擎误杀,而使用VS2019的编译的两个样本则没有杀毒引擎误杀。P S:这三个引擎都不认识。
总结现象
改用C++标准库后智量不再误报,同时测试样本 2.3 和 2.4在VT上无杀毒引擎误报,但是测试样本2.1 和 2.2则有三个杀毒引擎误报。

基于上述现象,可以做出下列猜测
由于C++标准库使用广泛,所以智量提取的相关白特征更多,这是智量没有误报的原因之一。同时VT上两个IDE生成的程序扫描结果不同,我认为这个两款IDE生成的代码风格具有差别有关。
总结猜测
1. 使用一些冷门API可能会导致智量AI杀毒引擎误报,**这个猜测我认为同样适用于其他的AI杀毒引擎(如果没有做刻意规避的话),并不局限于智量的AI杀毒引擎**。
2. 第一部分的猜测。
3.上述猜测对基于虚拟机的启发式引擎受到此类影响相对于AI杀毒引擎则小很多,因为此类引擎的检测依据通常是外在的表现行为,而不是二进制特征。

现在,第二部分的测试结果使得第一部分的猜测正确的可能性提高了。

P S.DEV C++ 和 VS2019 生成的汇编风格差异

测试样本2.2汇编 -O 优化,-O2代码变化不大
  1. .text:0000000000401530                 push    rbp
  2. .text:0000000000401531                 push    rbx
  3. .text:0000000000401532                 sub     rsp, 208h
  4. .text:0000000000401539                 lea     rbp, [rsp+80h]
  5. .text:0000000000401541                 call    __main
  6. .text:0000000000401546                 lea     rax, [rbp+190h+fstream]
  7. .text:000000000040154A                 mov     rcx, rax
  8. .text:000000000040154D                 call    constructor_of_fstream
  9. .text:0000000000401552                 lea     rax, [rbp+190h+fstream]
  10. .text:0000000000401556                 mov     r8d, 10h
  11. .text:000000000040155C                 lea     rdx, aTestTxt   ; "test.txt"
  12. .text:0000000000401563                 mov     rcx, rax
  13. .text:0000000000401566 ;   try {
  14. .text:0000000000401566                 call    fstream_open
  15. .text:000000000040156B                 lea     rax, [rbp+190h+fstream]
  16. .text:000000000040156F                 add     rax, 0D8h
  17. .text:0000000000401575                 mov     rcx, rax
  18. .text:0000000000401578                 call    fstream_operator_non
  19. .text:000000000040157D                 test    al, al
  20. .text:000000000040157F                 jz      short loc_4015A3
  21. .text:0000000000401581                 lea     rdx, aFail      ; "fail"
  22. .text:0000000000401588                 mov     rcx, cs:_refptr__ZSt4cout ; std::ostream *
  23. .text:000000000040158F                 call    std__cout
  24. .text:0000000000401594                 mov     rdx, cs:std__endl
  25. .text:000000000040159B                 mov     rcx, rax
  26. .text:000000000040159E                 call    std__cout_0
  27. .text:00000000004015A3
  28. .text:00000000004015A3 loc_4015A3:                             ; CODE XREF: main+4F↑j
  29. .text:00000000004015A3                 lea     rax, [rbp+190h+fstream]
  30. .text:00000000004015A7                 mov     rcx, rax
  31. .text:00000000004015AA                 call    fstream_close
  32. .text:00000000004015AF                 lea     rcx, Command    ; "pause"
  33. .text:00000000004015B6                 call    system
  34. .text:00000000004015B6 ;   } // starts at 401566
  35. .text:00000000004015BB                 lea     rax, [rbp+190h+fstream]
  36. .text:00000000004015BF                 mov     rcx, rax
  37. .text:00000000004015C2                 call    _ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev ; std::basic_fstream<char,std::char_traits<char>>::~basic_fstream()
  38. .text:00000000004015C7                 mov     eax, 0
  39. .text:00000000004015CC                 jmp     short loc_4015E8
  40. .text:00000000004015CE ; ---------------------------------------------------------------------------
  41. .text:00000000004015CE ;   cleanup() // owned by 401566
  42. .text:00000000004015CE                 mov     rbx, rax
  43. .text:00000000004015D1                 lea     rax, [rbp+190h+fstream]
  44. .text:00000000004015D5                 mov     rcx, rax
  45. .text:00000000004015D8                 call    _ZNSt13basic_fstreamIcSt11char_traitsIcEED1Ev ; std::basic_fstream<char,std::char_traits<char>>::~basic_fstream()
  46. .text:00000000004015DD                 mov     rax, rbx
  47. .text:00000000004015E0                 mov     rcx, rax        ; gcc_exc
  48. .text:00000000004015E3                 call    _Unwind_Resume
  49. .text:00000000004015E8 ; ---------------------------------------------------------------------------
  50. .text:00000000004015E8
  51. .text:00000000004015E8 loc_4015E8:                             ; CODE XREF: main+9C↑j
  52. .text:00000000004015E8                 add     rsp, 208h
  53. .text:00000000004015EF                 pop     rbx
  54. .text:00000000004015F0                 pop     rbp
  55. .text:00000000004015F1                 retn
复制代码

VS2019 Release生成的汇编码
测试样本2.4???变量多了好多,内联函数?我的水平读起来很费劲

  1. .text:0000000140001B10 var_70          = qword ptr -70h
  2. .text:0000000140001B10 var_68          = qword ptr -68h
  3. .text:0000000140001B10 var_60          = qword ptr -60h
  4. .text:0000000140001B10 var_58          = qword ptr -58h
  5. .text:0000000140001B10 var_50          = qword ptr -50h
  6. .text:0000000140001B10 var_48          = qword ptr -48h
  7. .text:0000000140001B10 var_40          = byte ptr -40h
  8. .text:0000000140001B10 var_3F          = byte ptr -3Fh
  9. .text:0000000140001B10 var_38          = std::basic_string<char,std::char_traits<char>,std::allocator<char> > ptr -38h
  10. .text:0000000140001B10 var_18          = qword ptr -18h
  11. .text:0000000140001B10 var_s0          = byte ptr  0
  12. .text:0000000140001B10
  13. .text:0000000140001B10 ; FUNCTION CHUNK AT .text:0000000140003940 SIZE 0000000C BYTES
  14. .text:0000000140001B10
  15. .text:0000000140001B10 ; __unwind { // __GSHandlerCheck_EH
  16. .text:0000000140001B10                 mov     rax, rsp
  17. .text:0000000140001B13                 push    rbp
  18. .text:0000000140001B14                 lea     rbp, [rax-5Fh]
  19. .text:0000000140001B18                 sub     rsp, 90h
  20. .text:0000000140001B1F                 mov     [rbp+5Fh+var_58], 0FFFFFFFFFFFFFFFEh
  21. .text:0000000140001B27                 mov     [rax+10h], rbx
  22. .text:0000000140001B2B                 mov     [rax+18h], rdi
  23. .text:0000000140001B2F                 mov     rax, cs:__security_cookie
  24. .text:0000000140001B36                 xor     rax, rsp
  25. .text:0000000140001B39                 mov     [rbp+5Fh+var_18], rax
  26. .text:0000000140001B3D                 mov     rdi, rcx
  27. .text:0000000140001B40                 mov     rax, [rcx+38h]
  28. .text:0000000140001B44                 mov     rcx, [rax]
  29. .text:0000000140001B47                 test    rcx, rcx
  30. .text:0000000140001B4A                 jz      short loc_140001B78
  31. .text:0000000140001B4C                 mov     rdx, [rdi+50h]
  32. .text:0000000140001B50                 movsxd  r8, dword ptr [rdx]
  33. .text:0000000140001B53                 lea     rax, [rcx+r8]
  34. .text:0000000140001B57                 cmp     rcx, rax
  35. .text:0000000140001B5A                 jnb     short loc_140001B78
  36. .text:0000000140001B5C                 lea     eax, [r8-1]
  37. .text:0000000140001B60                 mov     [rdx], eax
  38. .text:0000000140001B62                 mov     rcx, [rdi+38h]
  39. .text:0000000140001B66                 mov     rdx, [rcx]
  40. .text:0000000140001B69                 lea     rax, [rdx+1]
  41. .text:0000000140001B6D                 mov     [rcx], rax
  42. .text:0000000140001B70                 movzx   eax, byte ptr [rdx]
  43. .text:0000000140001B73                 jmp     loc_140001DC0
  44. .text:0000000140001B78 ; ---------------------------------------------------------------------------
  45. .text:0000000140001B78
  46. .text:0000000140001B78 loc_140001B78:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+3A↑j
  47. .text:0000000140001B78                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+4A↑j
  48. .text:0000000140001B78                 cmp     qword ptr [rdi+80h], 0
  49. .text:0000000140001B80                 jnz     short loc_140001B8C
  50. .text:0000000140001B82                 mov     eax, 0FFFFFFFFh
  51. .text:0000000140001B87                 jmp     loc_140001DC0
  52. .text:0000000140001B8C ; ---------------------------------------------------------------------------
  53. .text:0000000140001B8C
  54. .text:0000000140001B8C loc_140001B8C:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+70↑j
  55. .text:0000000140001B8C                 mov     r8, [rdi+18h]
  56. .text:0000000140001B90                 lea     rax, [rdi+70h]
  57. .text:0000000140001B94                 cmp     [r8], rax
  58. .text:0000000140001B97                 jnz     short loc_140001BB9
  59. .text:0000000140001B99                 mov     rdx, [rdi+90h]
  60. .text:0000000140001BA0                 mov     rcx, [rdi+88h]
  61. .text:0000000140001BA7                 mov     [r8], rcx
  62. .text:0000000140001BAA                 mov     rax, [rdi+38h]
  63. .text:0000000140001BAE                 mov     [rax], rcx
  64. .text:0000000140001BB1                 sub     edx, ecx
  65. .text:0000000140001BB3                 mov     rax, [rdi+50h]
  66. .text:0000000140001BB7                 mov     [rax], edx
  67. .text:0000000140001BB9
  68. .text:0000000140001BB9 loc_140001BB9:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+87↑j
  69. .text:0000000140001BB9                 mov     rcx, [rdi+80h]  ; File
  70. .text:0000000140001BC0                 cmp     qword ptr [rdi+68h], 0
  71. .text:0000000140001BC5                 jnz     short loc_140001BE3
  72. .text:0000000140001BC7                 call    cs:__imp_fgetc
  73. .text:0000000140001BCD                 cmp     eax, 0FFFFFFFFh
  74. .text:0000000140001BD0                 movzx   ebx, al
  75. .text:0000000140001BD3                 jnz     loc_140001DBE
  76. .text:0000000140001BD9                 mov     ebx, 0FFFFFFFFh
  77. .text:0000000140001BDE                 jmp     loc_140001DBE
  78. .text:0000000140001BE3 ; ---------------------------------------------------------------------------
  79. .text:0000000140001BE3
  80. .text:0000000140001BE3 loc_140001BE3:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+B5↑j
  81. .text:0000000140001BE3                 mov     [rbp+5Fh+var_38._Mypair._Myval2._Mysize], 0
  82. .text:0000000140001BEB                 mov     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 0Fh
  83. .text:0000000140001BF3                 mov     byte ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx], 0
  84. .text:0000000140001BF7                 call    cs:__imp_fgetc
  85. .text:0000000140001BFD                 mov     r8d, eax        ; _Fn
  86. .text:0000000140001C00                 cmp     eax, 0FFFFFFFFh
  87. .text:0000000140001C03                 jz      loc_140001D0F
  88. .text:0000000140001C09                 nop     dword ptr [rax+00000000h]
  89. .text:0000000140001C10
  90. .text:0000000140001C10 loc_140001C10:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+1F9↓j
  91. .text:0000000140001C10                 mov     rcx, [rbp+5Fh+var_38._Mypair._Myval2._Mysize]
  92. .text:0000000140001C14                 mov     rdx, [rbp+5Fh+var_38._Mypair._Myval2._Myres] ; _Size_increase
  93. .text:0000000140001C18                 cmp     rcx, rdx
  94. .text:0000000140001C1B                 jnb     short loc_140001C3D
  95. .text:0000000140001C1D                 lea     rax, [rcx+1]
  96. .text:0000000140001C21                 mov     [rbp+5Fh+var_38._Mypair._Myval2._Mysize], rax
  97. .text:0000000140001C25                 lea     rax, [rbp+5Fh+var_38]
  98. .text:0000000140001C29                 cmp     rdx, 10h
  99. .text:0000000140001C2D                 cmovnb  rax, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  100. .text:0000000140001C32                 mov     [rax+rcx], r8b
  101. .text:0000000140001C36                 mov     byte ptr [rax+rcx+1], 0
  102. .text:0000000140001C3B                 jmp     short loc_140001C4A
  103. .text:0000000140001C3D ; ---------------------------------------------------------------------------
  104. .text:0000000140001C3D
  105. .text:0000000140001C3D loc_140001C3D:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+10B↑j
  106. .text:0000000140001C3D                 movzx   r9d, r8b        ; <_Args_0>
  107. .text:0000000140001C41                 lea     rcx, [rbp+5Fh+var_38] ; this
  108. .text:0000000140001C45
  109. .text:0000000140001C45 loc_140001C45:                          ; DATA XREF: .rdata:stru_1400054C0↓o
  110. .text:0000000140001C45 ;   try {
  111. .text:0000000140001C45                 call    ??$_Reallocate_grow_by@V_lambda_319d5e083f45f90dcdce5dce53cbb275_@@D@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAAAEAV01@_KV_lambda_319d5e083f45f90dcdce5dce53cbb275_@@D@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char>>::_Reallocate_grow_by<_lambda_319d5e083f45f90dcdce5dce53cbb275_,char>(unsigned __int64,_lambda_319d5e083f45f90dcdce5dce53cbb275_,char)
  112. .text:0000000140001C4A
  113. .text:0000000140001C4A loc_140001C4A:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+12B↑j
  114. .text:0000000140001C4A                 lea     rdx, [rbp+5Fh+var_38]
  115. .text:0000000140001C4E                 cmp     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 10h
  116. .text:0000000140001C53                 cmovnb  rdx, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  117. .text:0000000140001C58                 lea     r8, [rbp+5Fh+var_38]
  118. .text:0000000140001C5C                 cmovnb  r8, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  119. .text:0000000140001C61                 mov     r9, [rbp+5Fh+var_38._Mypair._Myval2._Mysize]
  120. .text:0000000140001C65                 add     r9, rdx
  121. .text:0000000140001C68                 lea     rax, [rbp+5Fh+var_48]
  122. .text:0000000140001C6C                 mov     [rsp+90h+var_58], rax
  123. .text:0000000140001C71                 lea     rax, [rbp+5Fh+var_3F]
  124. .text:0000000140001C75                 mov     [rsp+90h+var_60], rax
  125. .text:0000000140001C7A                 lea     rax, [rbp+5Fh+var_40]
  126. .text:0000000140001C7E                 mov     [rsp+90h+var_68], rax
  127. .text:0000000140001C83                 lea     rax, [rbp+5Fh+var_50]
  128. .text:0000000140001C87                 mov     [rsp+90h+var_70], rax
  129. .text:0000000140001C8C                 lea     rdx, [rdi+74h]
  130. .text:0000000140001C90                 mov     rcx, [rdi+68h]
  131. .text:0000000140001C94                 call    cs:__imp_?in@?$codecvt@DDU_Mbstatet@@@std@@QEBAHAEAU_Mbstatet@@PEBD1AEAPEBDPEAD3AEAPEAD@Z ; std::codecvt<char,char,_Mbstatet>::in(_Mbstatet &,char const *,char const *,char const * &,char *,char *,char * &)
  132. .text:0000000140001C9A                 test    eax, eax
  133. .text:0000000140001C9C                 js      short loc_140001D0F
  134. .text:0000000140001C9E                 cmp     eax, 1
  135. .text:0000000140001CA1                 jg      loc_140001D9A
  136. .text:0000000140001CA7                 lea     rax, [rbp+5Fh+var_40]
  137. .text:0000000140001CAB                 cmp     [rbp+5Fh+var_48], rax
  138. .text:0000000140001CAF                 lea     rax, [rbp+5Fh+var_38]
  139. .text:0000000140001CB3                 jnz     loc_140001D55
  140. .text:0000000140001CB9                 cmp     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 10h
  141. .text:0000000140001CBE                 cmovnb  rax, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  142. .text:0000000140001CC3                 mov     r10, [rbp+5Fh+var_50]
  143. .text:0000000140001CC7                 sub     r10, rax
  144. .text:0000000140001CCA                 mov     r8, [rbp+5Fh+var_38._Mypair._Myval2._Mysize]
  145. .text:0000000140001CCE                 cmp     r8, r10
  146. .text:0000000140001CD1                 cmovb   r10, r8
  147. .text:0000000140001CD5                 lea     rcx, [rbp+5Fh+var_38]
  148. .text:0000000140001CD9                 cmp     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 10h
  149. .text:0000000140001CDE                 cmovnb  rcx, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx] ; Dst
  150. .text:0000000140001CE3                 sub     r8, r10
  151. .text:0000000140001CE6                 mov     [rbp+5Fh+var_38._Mypair._Myval2._Mysize], r8
  152. .text:0000000140001CEA                 inc     r8              ; Size
  153. .text:0000000140001CED                 lea     rdx, [rcx+r10]  ; Src
  154. .text:0000000140001CF1                 call    memmove_0
  155. .text:0000000140001CF6                 mov     rcx, [rdi+80h]  ; File
  156. .text:0000000140001CFD                 call    cs:__imp_fgetc
  157. .text:0000000140001D03                 mov     r8d, eax
  158. .text:0000000140001D06                 cmp     eax, 0FFFFFFFFh
  159. .text:0000000140001D09                 jnz     loc_140001C10
  160. .text:0000000140001D0F
  161. .text:0000000140001D0F loc_140001D0F:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+F3↑j
  162. .text:0000000140001D0F                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+18C↑j ...
  163. .text:0000000140001D0F                 mov     ebx, 0FFFFFFFFh
  164. .text:0000000140001D0F ;   } // starts at 140001C45
  165. .text:0000000140001D14
  166. .text:0000000140001D14 loc_140001D14:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+285↓j
  167. .text:0000000140001D14                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+2A4↓j
  168. .text:0000000140001D14                                         ; DATA XREF: ...
  169. .text:0000000140001D14                 mov     rdx, [rbp+5Fh+var_38._Mypair._Myval2._Myres]
  170. .text:0000000140001D18                 cmp     rdx, 10h
  171. .text:0000000140001D1C                 jb      loc_140001DBE
  172. .text:0000000140001D22                 inc     rdx             ; __formal
  173. .text:0000000140001D25                 mov     rcx, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx] ; block
  174. .text:0000000140001D29                 mov     rax, rcx
  175. .text:0000000140001D2C                 cmp     rdx, 1000h
  176. .text:0000000140001D33                 jb      loc_140001DB9
  177. .text:0000000140001D39                 add     rdx, 27h
  178. .text:0000000140001D3D                 mov     rcx, [rcx-8]
  179. .text:0000000140001D41                 sub     rax, rcx
  180. .text:0000000140001D44                 add     rax, 0FFFFFFFFFFFFFFF8h
  181. .text:0000000140001D48                 cmp     rax, 1Fh
  182. .text:0000000140001D4C                 jbe     short loc_140001DB9
  183. .text:0000000140001D4E                 call    cs:__imp__invalid_parameter_noinfo_noreturn
  184. .text:0000000140001D54 ; ---------------------------------------------------------------------------
  185. .text:0000000140001D54                 nop
  186. .text:0000000140001D55
  187. .text:0000000140001D55 loc_140001D55:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+1A3↑j
  188. .text:0000000140001D55                 cmp     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 10h
  189. .text:0000000140001D5A                 cmovnb  rax, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  190. .text:0000000140001D5F                 mov     rbx, [rbp+5Fh+var_38._Mypair._Myval2._Mysize]
  191. .text:0000000140001D63                 mov     rcx, [rbp+5Fh+var_50]
  192. .text:0000000140001D67                 sub     rbx, rcx
  193. .text:0000000140001D6A                 add     rbx, rax
  194. .text:0000000140001D6D                 test    rbx, rbx
  195. .text:0000000140001D70                 jle     short loc_140001D91
  196. .text:0000000140001D72
  197. .text:0000000140001D72 loc_140001D72:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+27F↓j
  198. .text:0000000140001D72                 dec     rbx
  199. .text:0000000140001D75                 movsx   ecx, byte ptr [rbx+rcx] ; Ch
  200. .text:0000000140001D79                 mov     rdx, [rdi+80h]  ; File
  201. .text:0000000140001D80                 call    cs:__imp_ungetc
  202. .text:0000000140001D86                 test    rbx, rbx
  203. .text:0000000140001D89                 jle     short loc_140001D91
  204. .text:0000000140001D8B                 mov     rcx, [rbp+5Fh+var_50]
  205. .text:0000000140001D8F                 jmp     short loc_140001D72
  206. .text:0000000140001D91 ; ---------------------------------------------------------------------------
  207. .text:0000000140001D91
  208. .text:0000000140001D91 loc_140001D91:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+260↑j
  209. .text:0000000140001D91                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+279↑j
  210. .text:0000000140001D91                 movzx   ebx, [rbp+5Fh+var_40]
  211. .text:0000000140001D95                 jmp     loc_140001D14
  212. .text:0000000140001D9A ; ---------------------------------------------------------------------------
  213. .text:0000000140001D9A
  214. .text:0000000140001D9A loc_140001D9A:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+191↑j
  215. .text:0000000140001D9A                 cmp     eax, 3
  216. .text:0000000140001D9D                 jnz     loc_140001D0F
  217. .text:0000000140001DA3                 lea     rax, [rbp+5Fh+var_38]
  218. .text:0000000140001DA7                 cmp     [rbp+5Fh+var_38._Mypair._Myval2._Myres], 10h
  219. .text:0000000140001DAC                 cmovnb  rax, qword ptr [rbp+5Fh+var_38._Mypair._Myval2._Bx]
  220. .text:0000000140001DB1                 movsx   ebx, byte ptr [rax]
  221. .text:0000000140001DB4                 jmp     loc_140001D14
  222. .text:0000000140001DB9 ; ---------------------------------------------------------------------------
  223. .text:0000000140001DB9
  224. .text:0000000140001DB9 loc_140001DB9:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+223↑j
  225. .text:0000000140001DB9                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+23C↑j
  226. .text:0000000140001DB9                 call    ??3@YAXPEAX_K@Z ; operator delete(void *,unsigned __int64)
  227. .text:0000000140001DBE
  228. .text:0000000140001DBE loc_140001DBE:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+C3↑j
  229. .text:0000000140001DBE                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+CE↑j ...
  230. .text:0000000140001DBE                 mov     eax, ebx
  231. .text:0000000140001DC0
  232. .text:0000000140001DC0 loc_140001DC0:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+63↑j
  233. .text:0000000140001DC0                                         ; std::basic_filebuf<char,std::char_traits<char>>::uflow(void)+77↑j
  234. .text:0000000140001DC0                 mov     rcx, [rbp+5Fh+var_18]
  235. .text:0000000140001DC4                 xor     rcx, rsp        ; StackCookie
  236. .text:0000000140001DC7                 call    __security_check_cookie
  237. .text:0000000140001DCC                 lea     r11, [rsp+90h+var_s0]
  238. .text:0000000140001DD4                 mov     rbx, [r11+18h]
  239. .text:0000000140001DD8                 mov     rdi, [r11+20h]
  240. .text:0000000140001DDC                 mov     rsp, r11
  241. .text:0000000140001DDF                 pop     rbp
  242. .text:0000000140001DE0                 retn
  243. .text:0000000140001DE0 ; } // starts at 140001B10
  244. .text:0000000140001DE0 ?uflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ endp
  245. .text:0000000140001DE0
  246. .text:0000000140001DE0 ; ---------------------------------------------------------------------------
  247. .text:0000000140001DE1 $LN518          db 0Fh dup(0CCh)        ; DATA XREF: .pdata:00000001400080CC↓o
  248. .text:0000000140001DF0
  249. .text:0000000140001DF0 ; =============== S U B R O U T I N E =======================================
  250. .text:0000000140001DF0
  251. .text:0000000140001DF0
  252. .text:0000000140001DF0 ; int __fastcall std::basic_filebuf<char,std::char_traits<char>>::underflow(std::basic_filebuf<char,std::char_traits<char> > *this)
  253. .text:0000000140001DF0 ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ proc near
  254. .text:0000000140001DF0                                         ; DATA XREF: .rdata:const std::basic_filebuf<char,std::char_traits<char>>::`vftable'↓o
  255. .text:0000000140001DF0                                         ; .rdata:00000001400054D8↓o ...
  256. .text:0000000140001DF0
  257. .text:0000000140001DF0 arg_0           = qword ptr  8
  258. .text:0000000140001DF0
  259. .text:0000000140001DF0                 push    rbx
  260. .text:0000000140001DF2                 sub     rsp, 20h
  261. .text:0000000140001DF6                 mov     rax, [rcx+38h]
  262. .text:0000000140001DFA                 mov     rbx, rcx
  263. .text:0000000140001DFD                 mov     rcx, [rax]
  264. .text:0000000140001E00                 test    rcx, rcx
  265. .text:0000000140001E03                 jz      short loc_140001E1D
  266. .text:0000000140001E05                 mov     rax, [rbx+50h]
  267. .text:0000000140001E09                 movsxd  rdx, dword ptr [rax]
  268. .text:0000000140001E0C                 add     rdx, rcx
  269. .text:0000000140001E0F                 cmp     rcx, rdx
  270. .text:0000000140001E12                 jnb     short loc_140001E1D
  271. .text:0000000140001E14                 movzx   eax, byte ptr [rcx]
  272. .text:0000000140001E17                 add     rsp, 20h
  273. .text:0000000140001E1B                 pop     rbx
  274. .text:0000000140001E1C                 retn
  275. .text:0000000140001E1D ; ---------------------------------------------------------------------------
  276. .text:0000000140001E1D
  277. .text:0000000140001E1D loc_140001E1D:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::underflow(void)+13↑j
  278. .text:0000000140001E1D                                         ; std::basic_filebuf<char,std::char_traits<char>>::underflow(void)+22↑j
  279. .text:0000000140001E1D                 mov     rax, [rbx]
  280. .text:0000000140001E20                 mov     rcx, rbx
  281. .text:0000000140001E23
  282. .text:0000000140001E23 loc_140001E23:                          ; DATA XREF: .rdata:00000001400054D8↓o
  283. .text:0000000140001E23                                         ; .rdata:00000001400054EC↓o ...
  284. .text:0000000140001E23                 mov     [rsp+28h+arg_0], rdi
  285. .text:0000000140001E28                 call    qword ptr [rax+38h]
  286. .text:0000000140001E2B                 mov     edi, eax
  287. .text:0000000140001E2D                 cmp     eax, 0FFFFFFFFh
  288. .text:0000000140001E30                 jnz     short loc_140001E3D
  289. .text:0000000140001E32                 mov     rdi, [rsp+28h+arg_0]
  290. .text:0000000140001E37                 add     rsp, 20h
  291. .text:0000000140001E3B                 pop     rbx
  292. .text:0000000140001E3C                 retn
  293. .text:0000000140001E3D ; ---------------------------------------------------------------------------
  294. .text:0000000140001E3D
  295. .text:0000000140001E3D loc_140001E3D:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::underflow(void)+40↑j
  296. .text:0000000140001E3D                                         ; DATA XREF: .pdata:00000001400080E4↓o ...
  297. .text:0000000140001E3D                 mov     rax, [rbx]
  298. .text:0000000140001E40                 mov     edx, edi
  299. .text:0000000140001E42                 mov     rcx, rbx
  300. .text:0000000140001E45                 call    qword ptr [rax+20h]
  301. .text:0000000140001E48                 mov     eax, edi
  302. .text:0000000140001E4A                 mov     rdi, [rsp+28h+arg_0]
  303. .text:0000000140001E4F                 add     rsp, 20h
  304. .text:0000000140001E53                 pop     rbx
  305. .text:0000000140001E54                 retn
  306. .text:0000000140001E54 ?underflow@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHXZ endp
  307. .text:0000000140001E54
  308. .text:0000000140001E54 ; ---------------------------------------------------------------------------
  309. .text:0000000140001E55 algn_140001E55:                         ; DATA XREF: .pdata:00000001400080F0↓o
  310. .text:0000000140001E55                 align 20h
  311. .text:0000000140001E60
  312. .text:0000000140001E60 ; =============== S U B R O U T I N E =======================================
  313. .text:0000000140001E60
  314. .text:0000000140001E60
  315. .text:0000000140001E60 ; int __fastcall std::basic_filebuf<char,std::char_traits<char>>::pbackfail(std::basic_filebuf<char,std::char_traits<char> > *this, int _Meta)
  316. .text:0000000140001E60 ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z proc near
  317. .text:0000000140001E60                                         ; DATA XREF: .rdata:const std::basic_filebuf<char,std::char_traits<char>>::`vftable'↓o
  318. .text:0000000140001E60                                         ; .pdata:00000001400080FC↓o
  319. .text:0000000140001E60
  320. .text:0000000140001E60 arg_10          = qword ptr  18h
  321. .text:0000000140001E60
  322. .text:0000000140001E60                 mov     [rsp+arg_10], rbx
  323. .text:0000000140001E65                 push    rdi
  324. .text:0000000140001E66                 sub     rsp, 20h
  325. .text:0000000140001E6A                 mov     rax, [rcx+38h]
  326. .text:0000000140001E6E                 mov     rbx, rcx
  327. .text:0000000140001E71                 mov     edi, edx
  328. .text:0000000140001E73                 mov     rcx, [rax]
  329. .text:0000000140001E76                 test    rcx, rcx
  330. .text:0000000140001E79                 jz      short loc_140001EB1
  331. .text:0000000140001E7B                 mov     rax, [rbx+18h]
  332. .text:0000000140001E7F                 cmp     [rax], rcx
  333. .text:0000000140001E82                 jnb     short loc_140001EB1
  334. .text:0000000140001E84                 cmp     edx, 0FFFFFFFFh
  335. .text:0000000140001E87                 jz      short loc_140001E91
  336. .text:0000000140001E89                 movzx   eax, byte ptr [rcx-1]
  337. .text:0000000140001E8D                 cmp     eax, edx
  338. .text:0000000140001E8F                 jnz     short loc_140001EB1
  339. .text:0000000140001E91
  340. .text:0000000140001E91 loc_140001E91:                          ; CODE XREF: std::basic_filebuf<char,std::char_traits<char>>::pbackfail(int)+27↑j
  341. .text:0000000140001E91                 mov     rax, [rbx+50h]
  342. .text:0000000140001E95                 inc     dword ptr [rax]
  343. .text:0000000140001E97                 mov     rax, [rbx+38h]
  344. .text:0000000140001E9B                 dec     qword ptr [rax]
  345. .text:0000000140001E9E                 xor     eax, eax
  346. .text:0000000140001EA0                 cmp     edi, 0FFFFFFFFh
  347. .text:0000000140001EA3                 cmovnz  eax, edi
  348. .text:0000000140001EA6                 mov     rbx, [rsp+28h+arg_10]
  349. .text:0000000140001EAB                 add     rsp, 20h
  350. .text:0000000140001EAF                 pop     rdi
  351. .text:0000000140001EB0                 retn
复制代码
附上测试程序和markdown文档

AI杀毒引擎缺陷探索.part1.rar

1000 KB, 下载次数: 8

AI杀毒引擎缺陷探索.part2.rar

1000 KB, 下载次数: 4

AI杀毒引擎缺陷探索.part3.rar

43.97 KB, 下载次数: 4

评分

参与人数 9原创 +1 分享 +3 魅力 +1 人气 +15 收起 理由
柯林 + 1 技术分
467100524 + 3 版区有你更精彩: )
Jirehlov1234 + 1 版区有你更精彩: )
翼风Fly + 3 版区有你更性感: )
iha40999 + 1 精品文章

查看全部评分

智量官方
发表于 2019-5-24 12:22:28 | 显示全部楼层
感谢楼主的测试,我们也欢迎原创技术类讨论。

我们之前也说过,我们最开始就已经研究了编译器给PE文件带来的影响,编译器本身的特征在智量的特征里只占很少的一部分. 我相信智量报告你测试的文件为病毒还是因为和黑样本距离过近导致的, 也就是在现实里面像你编译的那种白样本太少,黑样本太多。这需要通过样本的不断积累来调节。

另外认同你的基于虚拟机的启发式引擎受到此类影响比较小的观点. 但是静态AI引擎可以通过增加和优化特征,样本,以及应用持续学习等一系列手段来持续提升精确度. 除了AI本身提高之外,智量的流式更新也能将误报对用户的影响降至更低。


说句题外话,基于虚拟机的启发式引擎也有它的问题,效率低,对Windows API的模拟不够, 很容易被针对等。由于这些缺点,造成此类引擎查杀率不是很理想。如果对这个话题感兴趣, 可以看看:https://i.blackhat.com/us-18/Thu-August-9/us-18-Bulazel-Windows-Offender-Reverse-Engineering-Windows-Defenders-Antivirus-Emulator.pdf

评分

参与人数 2人气 +2 收起 理由
电脑发烧友 + 1 感谢解答: )
翼风Fly + 1 感谢解答: )

查看全部评分

小野泽悠贵
发表于 2019-5-23 18:52:01 | 显示全部楼层
@智量官方 解释解释呗
小Q机器人
发表于 2019-5-23 19:15:08 | 显示全部楼层
智量再持续发展5年,能否达到国际一流的杀软水平,都难说、、、  慢慢期待智量发展。
pal家族
发表于 2019-5-23 19:17:51 | 显示全部楼层
真实环境会有这个样本?
影响用户使用了?
naive!
QQ截图20190523191722.jpg QQ截图20190523191731.jpg

评分

参与人数 1人气 +1 收起 理由
电脑发烧友 + 1 中国文化,博大精深。

查看全部评分

电脑发烧友
 楼主| 发表于 2019-5-23 19:37:47 | 显示全部楼层
pal家族 发表于 2019-5-23 19:17
真实环境会有这个样本?
影响用户使用了?
naive!

并不是很懂你的意思?我的理解大概是测试所用样本和真实环境相差太大。

本文所用的测试样本和真实环境确实相差很大,这点确实是一个硬伤。但是本文的目的是探索,难免有一些不合适不严谨之处,做出的只是一些基于现有现象的猜测。

不过我当前确实认为本文的猜测所陈述的情况应该可以反应没有做相关规避的AI杀毒引擎的一些缺陷,欢迎讨论。

评分

参与人数 2人气 +2 收起 理由
dg1vg4 + 1 他讥讽的不是你,懂了吧。
pal家族 + 1 你可能对我产生了误判,,

查看全部评分

jwb136
发表于 2019-5-23 19:54:18 | 显示全部楼层
发展都需要一个过程,希望它越来越好
冰血封心
发表于 2019-5-23 21:04:38 | 显示全部楼层
本帖最后由 冰血封心 于 2019-5-23 22:07 编辑

真实环境的样本不局限于自己编译的这些内容
如果是恶意程序的话这种测试完全是不靠谱的
这种测试只能在一些简单的没有恶行行为的程序上面的一些解释
当然楼主的出发点是好的,但是在恶意样本表现方面没有任何说服力,毕竟杀毒就是来查杀恶意程序的
AI在处理一些基础已知的样本行为是可行的,这个完全看传统杀毒的技术积累聚合能力。

对付一款未知样本如果你谈AI查杀能力首先要验证的是其具备启发式加虚拟脱壳和干掉加跳针,分析较为复杂的未知结构。
我们可以简单的说把分析未知恶意程序的行为结构简化为模型库,
通过传统杀毒技术的积累把不同恶意行为的模型库来归类分组形成索引分析聚合侦测行为。
任何一款恶意程序不可能自我暴露出来告诉你我是病毒或木马吧?
没有这些基本的验证何来AI缺陷探索?何来AI查杀?
更可笑的是有人甚至告诉我AI要通过索引一些文字来形成算法,简直是可笑至极。
如果只是扫描一些简单特征行为就能定义一个程序是不是病毒和木马是不是人人都可以写AI杀毒了?
这是多么愚蠢的思想?这样能不产生误报?





评分

参与人数 2人气 +2 收起 理由
467100524 + 1 你又开始了?
学雷锋做人 + 1 又开始满嘴跑火车,啥都不懂

查看全部评分

hez2010
发表于 2019-5-24 23:23:25 | 显示全部楼层
VS 的 C++ 编译器从 2017 一路进化过来加了一大堆优化黑魔法,提升了很多的性能,所以反汇编看起来可能会丑一些,但是跑起来速度会更快。
神算子
发表于 2019-6-12 13:19:41 | 显示全部楼层
小Q机器人 发表于 2019-5-23 19:15
智量再持续发展5年,能否达到国际一流的杀软水平,都难说、、、  慢慢期待智量发展。

今年也许就参加国际测试了
小Q机器人
发表于 2019-6-12 13:47:55 | 显示全部楼层
@神算子也许,我天上掉人民币,一万亿,我全部赠送给智量 也许..............哈哈
hao1234566
发表于 2019-6-12 15:42:45 | 显示全部楼层
火前留名嘿嘿。
写的挺厉害的。
欧阳宣
发表于 2019-6-14 21:17:18 | 显示全部楼层
冰血封心 发表于 2019-5-23 21:04
真实环境的样本不局限于自己编译的这些内容
如果是恶意程序的话这种测试完全是不靠谱的
这种测试只能在一 ...

把细致入微的事情过分简化只能说明两点

1.对你要简化的事情的本质根本不了解
2.你自己根本没意识到自己不了解
杀软病综合医院
发表于 2019-6-15 10:32:16 | 显示全部楼层
一个基于机主出发点的分析,叫做主动分析,现在的主防有这方面的意思,但完全不够智能化,包括且不限于分析系统自身的漏洞,应用软件的漏洞,)
一个是基于对过去的病毒所做的分析,叫被动分析。这个总是落后一步,没什么办法,出发点就是先出来病毒,然后分析,然后怎样怎样,后面无论做的总结多么好,都是预防同类病毒,稍微变动一下就可能查不到。
有一个方式可以弥补,就是入库速度,就是未知程序被放行之后,杀毒软件能不能自行判断已经中毒。如果判断出中毒,即时上报,全网封杀,虽然不至于逼死黑客,但在杀毒界也属于第一了。把这个过程放到虚拟机里,得出结论后执行,更加的稳妥。(事实上,好多病毒运行,系统崩了,杀毒软件自身难保何谈上报。或者放行即为信任,程序后续搞小动作也熟视无睹,这都算不上智能)


最后简单的说,
如果还需要人工处理那就还不是人工智能。最起码还不是高度的人工智能。


QINGMU
发表于 2019-6-15 14:13:50 | 显示全部楼层
了解一下。
稳稳的幸福988
发表于 2019-6-15 21:41:02 | 显示全部楼层
不错的帖子
l88888866
发表于 2019-6-16 19:50:07 | 显示全部楼层
长知识了,  赞一个
柯林
发表于 2019-6-18 21:53:14 | 显示全部楼层
杀软病综合医院 发表于 2019-6-15 10:32
一个基于机主出发点的分析,叫做主动分析,现在的主防有这方面的意思,但完全不够智能化,包括且不限于分析 ...

单纯从原理上来看,还是操作系统导致的问题。一个相对安全的系统,至少应该采用1+2的形式——1就是一个独立的内核,谁也不能进入,再怎么出问题,它也是不会崩溃的;2就是两个用户态的系统,以双子星的形式运行,代表当前用户权限的运行在前台,后台还有一个备用的暂时空额的潜在运行,一旦前台这个崩溃完蛋,后台这个立马转正接替,这二者是相互隔离的,(相当于两个账户user1与user2,user1中毒崩溃,转去维修,由user2接手)。如果采用类似的设计,中毒的几率应该会大幅度下降。小白以为,未来的系统,出于安全考虑,隔离与划权应该会越来越清晰——在隔离上,内核隔离、硬件隔离、用户操作与系统操作隔离、数据操作与运算操作隔离,应该会成为常态;权限划分上,不同的操作和等级,对应不同的请求与审批,也会成为常态;最有可能出现的情景之一,就是系统自带完整强大的沙盘(最好就是每个用户安装使用的程序,分配一个独立虚拟的空间,想做坏事真的很难)。逻辑上推论,这些措施应该才是最有效的防毒办法,集合程序白名单审查机制以及漏洞自动修补机制,可以把病毒的存在空间压至最低。
杀软病综合医院
发表于 2019-6-18 22:25:27 | 显示全部楼层
柯林 发表于 2019-6-18 21:53
单纯从原理上来看,还是操作系统导致的问题。一个相对安全的系统,至少应该采用1+2的形式——1就是一个独 ...

人工智能任重道远。
系统修改是个大工程,win10比过去版本已多出很多安全意识,现在问题还很多。对于以办公娱乐为主的用户来说如果绝对安全似乎损失很多性能。这样可能不会为大众接受。所以有需求的保密单位一般是定制版系统。并且有物理措施。很可能用不到杀毒软件。
杀毒软件的生存空间就是办微软办不到的事。
从防御来讲就是多层机制过滤,。而病毒就是多层多步隐藏,不到最后一刻不释放核心动作。其实最后比拼的是谁进化的速度快,谁的层数多。谁更加的考虑在前头,也就是智能化
axeaaa
发表于 2019-6-18 22:33:34 | 显示全部楼层
感谢楼主~这么好的帖子…人太少了
其实一直认为杀软使用AI只能是辅助,核心还得靠传统的技术
怎么说呢……机器学习这东西有点太玄学了
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛|纳美地| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 苏ICP备07004770号 ) GMT+8, 2019-6-27 14:45 , Processed in 0.060460 second(s), 7 queries , MemCache On.

快速回复 返回顶部 返回列表