Шелл код

Тема в разделе "WASM.BEGINNERS", создана пользователем sTupor, 7 окт 2005.

  1. sTupor

    sTupor New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    16
    Адрес:
    Russia
    Надеюсь на подсказку.

    Шелл - код.

    Кернел получил, функции из таблицы экспорта получил,

    запускаю любую функцию, она соответственно затирает

    мои временные переменные находящиеся в стеке(в которые я

    записывал адреса функций и т.д.). Чё опять надо искать кернел

    и выбирать функции? Если их записывать в файл(допустим в свою

    таблицу функций и данных), так адрес на эту таблицу тоже затрётся. Может это где и было не нашёл, уж извините.
     
  2. sTupor

    sTupor New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    16
    Адрес:
    Russia
    Ну в принципе можно сохранять адрес на таблицу в регистре потом его восстанавливать после вызова апишной функции, но мне кажется это неправильно:dntknw:
     
  3. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    ну самое простое использовать в переменные:)

    Однако никто не любит это, т.к нужно 4*[кол.использ.функций] байт, а можно и встеке просто используй add esp,xxx///sub esp,xxx, где ххх - кол.использ.функций



    если только начинаешеь рекомендую первый способ, чтобы не заморачиваться на этом в начале, а как остальное заработает, оптимизируешь это. пост ИМХО(!)
     
  4. sTupor

    sTupor New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    16
    Адрес:
    Russia
    Ну может я не правильно выразился(А может и правильно). Переменные у меня есть,

    т.к. я выдераю код скомпилированный VC++ со вставками ассемблера

    то у меня переменные -- [ebp-05] и т.д. Фишка в том, что при вызове

    API функции у меня данные по этим адресам, соответственно затираются :dntknw:

    Таблицу хочу использовать, чтобы при втором запуске не

    искать эти адреса, я их сохранил в файле и забыл.

    ну допустим :

    BOOL (_stdcall * _VirtualProtect)( LPVOID lpAddress, DWORD dwSize, DWORD flNewProtect, PDWORD lpflOldProtect );

    (FARPROC &)_VirtualProtect=(FARPROC &) dwVirtualProtect;

    (* _VirtualProtect)((void *)ImageBaseLocal,...,......,&fl);

    или LoadLibraryA вызыватся. Всё равно.
     
  5. warsem

    warsem Сеня

    Публикаций:
    0
    Регистрация:
    26 янв 2005
    Сообщения:
    170
    Адрес:
    Германия, NRW
    что-то мы друг друга не понимаем. Ты говоришь о переменных в стеке, а я о переменных в коде.



    что-то вроде этого(я так юзал):

    api_1 dd ?

    api_2 dd ?



    тока учти что секция кода должна быть открыта для записи.



    call 4 ptr cs:[api_1]



    p.s. ты пишешь вирь на Си?
     
  6. sTupor

    sTupor New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2005
    Сообщения:
    16
    Адрес:
    Russia
    :) да разобрался, приходиться всё делать через ж. Я не пишу вирь. Просто по нужде я должен знать как это работает. С переменными там другая ситуация. Секция у меня нормально открыта для записи и для чтения. Просто в ассемблерных вставках я не могу инициализировать переменные(в коде dd,dw ..), и те переменные которые я могу инициализировать в C++, они ининициа-ся как переменные в стеке. Поэтому я счас постепенно всё равно перехожу к асму:). И переменные создаю в своём месте.

    Спасибо за ответы.