fasm shellcode style

Тема в разделе "WASM.BEGINNERS", создана пользователем common_up, 22 апр 2011.

  1. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    Пишу лоадер в процедурном стиле. Все как бе получается, но единственное кумарит, так это:
    lea eax,[variable1]
    add eax,[delta]
    push eax
    lea eax,[variable2]
    add eax,[delta]
    push eax
    .....
    ....
    ....
    lea eax,[variable100500]
    add eax,[delta]
    push eax
    lea eax,[proc1]
    add eax,[delta]
    call eax

    жутко неэстетично.
    думал сделать типа
    macro shcall proc,delta,[arg]
    {
    if ~ arg eq
    reverse
    lea eax,[arg]
    add eax,[delta]
    pushd arg
    end if
    lea eax,[proc]
    add eax,[delta]
    call eax
    }
    Сразу скажу, про макросы нихера не читал:) Не до макросов сейчас. Так, как выше обозначено - как-то не трушно это все получилось. Как бы рандонимизировать регистры ? Дальше по сути дела конечно вставлю туда генерацию мусора и тд. Сначала нужно скелет нормализованных вариэйблс и процедур.
    PS: или по барабану на рандомизацию ? Всеравно ж будет сие творение упаковываться в обёртку ?
     
  2. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    для начала:
    invoke\stdcall eax , addr var + delta
    В итоге прийдешь к такому, если макросы учить будешь(хотя может и умнее что то придумаешь):
    32 бита
    CallAPI.FromRVA( edi , ZwQueryInformationToken )\
    ( [dwTemp] , TOKEN_INFORMATION_CLASS.TokenElevation , addr bElevated , 4 , addr dwTemp )
    64 бита
    CallAPI.FromRVA( rdi , ZwQueryInformationToken )\
    ( qword [dwTemp] , TOKEN_INFORMATION_CLASS.TokenElevation , addr bElevated , 4 , addr dwTemp )

    Макрос CallAPI.FromRVA только написать нужно будет.
     
  3. litrovith

    litrovith Member

    Публикаций:
    0
    Регистрация:
    20 июн 2007
    Сообщения:
    509
    common_up, как вариант:

    Код (Text):
    1. my_virtual_table:
    2. I_table:
    3. i_proc1   = 00h
    4. i_proc2   = 04h
    5. i_proc3   = 08h
    6. var_table:
    7. variable1 = 0Ch
    8. variable2 = 14h
    9. variable3 = 18h
    10.  
    11. proc proc1 p_my_virtual_table, i_proc, param1
    12.   mov someREG, p_my_virtual_table
    13.   invoke [someREG+i_proc], [someREG+param1]
    14.   ret
    15. endp ;proc1