вопрос о самомод.коде

Тема в разделе "WASM.WIN32", создана пользователем bPED, 20 янв 2008.

  1. bPED

    bPED New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2008
    Сообщения:
    52
    Я как-то читал статью К.Касперски. В ней говорилось, для того чтобы код мог самоизменяться, нужно
    определить кусок кода некоторый, выделить под него память и обрабатывать его именно в памяти.
    Но ведь можно изменять код и без выделения памяти. Можно просто выставить атрибуты на RWX и все.
    Я написал прогу таким методом - она себя изменяла без проблем, ида это подтверждала.
    Может у такого способа есть минусы? Или его просто не хорошо использовать? Но ведь теже самые антивирусы обращают внимание на запросы к памяти больше, чем на запросы к файлам. Или я в чем-то не прав?
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    а на код можно взглянуть?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Нужно очищать кэш ZwFlushInstructionCache(), иначе может некорректно выполнить.
     
  4. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.742
    Можно но некоторые AV могут нервно на это реагировать ...
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Тогда можно исполнять в стеке. (правда может DEP не дать...)
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У стека по умолчанию атрибуты RW
     
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Clerk
    Хм, а у меня работало. Я ж говорю, что если DEP то не сработает. А так - должно.
     
  8. AshBone

    AshBone New Member

    Публикаций:
    0
    Регистрация:
    12 дек 2007
    Сообщения:
    101
    Что касается платформы IA32, то, кажись, она не отличает атрибуты чтения от выполнения...
     
  9. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.742
    ... кажись :)

    Отличает.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    У меня если выполнить в стеке - падает
     
  11. bPED

    bPED New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2008
    Сообщения:
    52
    Ну например такой ( прошу ногами не пинать. я просто экспериментировал :)

    section '.UPX!' code executable readable writeable ;)

    ein:
    ;----------------------------------------------------------------;
    __gen:

    push 666h
    sub ecx,ecx
    call my_rnd
    mov [.666],eax
    xor [$$],eax
    neg dword [_d]
    mov [_lo],eax
    call my_rnd
    ;----------------------------------------------------------------;
    .666:

    xor eax,ebx
    mov eax,4
    m: jmp _aa_

    _d:

    cmp eax,5
    je _lo
    inc eax
    jmp _d

    ;----------------------------------------------------------------;

    _lo:
    xor [$$],byte $55 ;; some good 55h
    and [$$+$c],dword 'serg'
    sub eax,eax
    push eax
    nop
    nop
    _aa_: nop
    nop
    invoke ExitProcess,0

    .end ein

    ;---------------------------------------------------------------
    my_rnd:

    ; how to use
    ; push 5
    ; call my_rnd
    ; nop ; ur code

    pop eax
    imul eax,eax,100
    mov edi,eax
    rdtsc
    add eax,edi
    imul eax, 214013
    add eax, 2531011
    shr eax, 16
    imul eax, [esp+4]
    shr eax, 16
    push $$+$c
    ret ; возврат

    Теоретически этот код должен работать и на unix машинах. Но это отдельная тема.
     
  12. UTeX

    UTeX New Member

    Публикаций:
    0
    Регистрация:
    19 окт 2007
    Сообщения:
    584
    этот код?
     
  13. bPED

    bPED New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2008
    Сообщения:
    52
    да. под fasm
     
  14. bPED

    bPED New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2008
    Сообщения:
    52
    на unix я пока не проверял. Может в скором будущем. И прошу к коду относиться "снисходительно". Я не кодер.
    тут только некий общий принцип. Но вроде у меня на winxp работал.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    При создании стека устанавливаются атрибуты PAGE_READWRITE как для XP, так и для Vista.
    Код push 0C3h/Call Esp вызывает исключение. Насчёт TermoSINteZ - у тебя могло работать только под отладчиком.
     
  16. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    bPED
    Да это работает. Память есть память хочешь пиши, хочешь выполняй, с соответствующими атрибутами конечно. Может Крис и имел ввиду как раз палево AV.
    Clerk
    Не думаю, процессор должен уметь обрабатывать такие ситуации.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    К сожелению(или к счастью для когото) не умеет из-за кєша.
     
  18. bPED

    bPED New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2008
    Сообщения:
    52
    Да я не думаю что аверы настолько умны. Если очень постараться и правильно спланировать код и все проходы по нему - думаю аверы тут ничего не запалять. Можно даже будет попробовать :)