masm32 shellcode macro

Тема в разделе "WASM.ASSEMBLER", создана пользователем СFF, 29 мар 2010.

  1. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Вообщем народ у кого есть поделитесь или помогите. Нужен макрос для масм32 чтобы делал так:
    .code
    $PUSHSTRING kernel32.dll

    Вставляет следующие

    push 'l'
    push 'ld.2'
    push '3lle'
    push 'nrek'
    push esp

    Вот мои наброски но застрял выдает

    Код (Text):
    1. $PUSHSTRING macro sStr:REQ
    2.     crep = @SizeStr(sStr)/4
    3.     %echo Count: @CatStr(%crep)
    4.     count = 0
    5.     rept crep
    6.         %echo Index: @CatStr(%count) ,data: @SubStr(sStr,1+(%count*4),4)
    7.         push @SubStr(sStr,1+(%count*4),4)
    8.         count = count + 1
    9.     endm
    10.     push esp
    11. endm
    12.  
    13. C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50) : error A2006: undefined symbol : kern
    14.  MacroLoop(2): iteration 1: Macro Called From
    15.   $PUSHSTR(8): Macro Called From
    16.    C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50): Main Line Code
    17. C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50) : error A2006: undefined symbol : el32
    18.  MacroLoop(2): iteration 2: Macro Called From
    19.   $PUSHSTR(8): Macro Called From
    20.    C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50): Main Line Code
    21. C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50) : error A2006: undefined symbol : dll
    22.  MacroLoop(2): iteration 3: Macro Called From
    23.   $PUSHSTR(8): Macro Called From
    24.    C:\Documents and Settings\root\Desktop\Debug\Asm\my_shellcode.asm(50): Main Line Code
     
  2. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    19841204, вот работающий пример:
    Код (Text):
    1. PUSHSTRING macro sStr:REQ
    2.     acrep = @SizeStr(sStr)
    3.     crep = acrep/4
    4.     count = crep - 1
    5.     push 0
    6.     rept crep
    7.         db 68h ; push
    8.         db STRINGA (@SubStr(sStr,(acrep-3),1))
    9.         db STRINGA (@SubStr(sStr,(acrep-2),1))
    10.         db STRINGA (@SubStr(sStr,(acrep-1),1))
    11.         db STRINGA (@SubStr(sStr,(acrep),1))
    12.         count = count - 1
    13.         acrep=acrep-4
    14.     endm
    15.     push esp
    16. endm
    найдите два различия ;) . макрос не будет работать, если длина строки не кратна 4, допиливайте сами.
     
  3. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Пасибааааа учитель :)
     
  4. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Обычно нужно передавать указатели на строки а не сами строки
    Так что:
    Код (Text):
    1. push_line MACRO String:VARARG
    2.    call @F
    3.    db String
    4. @@:
    5. ENDM
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    s_d_f
    Это же очевидно - автор собирает пермутирующий код. В этом коде конструкции типа:
    Код (Text):
    1.    call @F
    2.    db String
    3. @@:
    не используются. Микод не содержит данных, они генерируются динамически.
     
  6. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    Ну и пусть пермутирующий. А чего здесь принципиально неприемлимого?
    Разница между этим

    push 'l'
    push 'ld.2'
    push '3lle'
    push 'nrek'
    push esp

    и этим

    call @F
    db 'kernel32.dll',0
    @@:

    не большая.
    Если говорить о динамически генерируемых данных строку после call @F ничто мешает чем-нибудь перезаписать, или в случае необходимости целиком в стэк скопировать.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    s_d_f
    Разница огромна. Во первых после морфинга за инструкцией Call @f не будет строки(граф перестраивается, инструкции изменяются). Во вторых данные будут рассмотрены как код и строка отморфлена. В третих строки в виде хардкода являются голой сигнатурой.
     
  8. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Все спасибо марос помог вот выкладиваю окончательный вариант, кратность учитывается.
    Код (Text):
    1. $PUST_STR macro sStr:REQ   
    2.     crep = @SizeStr(sStr)
    3.     %if @SizeStr(sStr) mod 4
    4.         len = @SizeStr(sStr)/4 + 1
    5.         crep = crep + (4 - @SizeStr(sStr) mod 4)
    6.     else
    7.         len = @SizeStr(sStr)/4
    8.         push 0
    9.     endif
    10.     ;%echo Len: @CatStr(%len)
    11.     rept len
    12.         db 68h
    13.         ;%echo push
    14.         off = 3
    15.         rept 4
    16.             ;%echo Offset @CatStr(%off),crep: @CatStr(%crep),index: @CatStr(%(crep-off))
    17.             %if (crep-off) gt @SizeStr(sStr)
    18.                 ;%echo db 0
    19.                 db 0
    20.             else
    21.                 ;%echo db @SubStr(sStr,%(crep-off),1)
    22.                 db STRINGA (@SubStr(sStr,%(crep-off),1))
    23.             endif
    24.             off = off - 1
    25.         endm
    26.         crep = crep - 4
    27.     endm
    28.        
    29.     push esp
    30. endm
    31.  
    32. Usage:
    33. $PUST_STR kernel32.dll
    34. $PUST_STR ws2_32.dll
     
  9. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Да кстате в макрос можно добавить рандомный ксор. Щас дам примерчик
     
  10. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Хотя ничего не дам, лень писать, задачу свою я сделал :)
     
  11. СFF

    СFF PP

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    233
    Да кстате советую посмотреть статью зомби у него строки красивей заносятся. http://vx.netlux.org/lib/vzo18.html