cи для асм

Тема в разделе "WASM.HEAP", создана пользователем wsd, 6 окт 2008.

  1. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    как расчитать размер в байтах си функции для инжекта
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    вычитать
    p.s. или складывать (кому как удобнее;)
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    censored
    что из чего плиз
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    точнее начало то да,ав конец как вычислить
    censored
    ты где
     
  5. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    точнее поставлю вопрос
    нужно в приложение заинжектить си функцию, только размер(конец) как?
    что-бы знать сколько кода копироавть
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Посчитать разницу между 2мя указателями?
    PS Можно поставить маркеры и искать их в памяти
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    так вот и трабла со 2
    у тебя какие вариант
    в конце фукции определять метку и эта разнгость и будет рзмером?
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    censored
    допёр СПСАСИБО
     
  9. doesn

    doesn New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2007
    Сообщения:
    97
    поделись с людьми _)
     
  10. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    doesn
    Код (Text):
    1. // hel1.cpp : Defines the entry point for the console application.
    2. //
    3.  
    4. #include "stdafx.h"
    5. using namespace std;
    6.  
    7. void alfa(int* abx,int*  bbx=0)
    8. {
    9.     ++*abx;
    10.      *bbx+=*abx;
    11.     MessageBoxA(NULL, "alfa", "", MB_OK);
    12.    
    13. };
    14. void  betta()
    15. {   // bla-bla
    16.     puts("betta");
    17. };
    18.  
    19.  
    20. int _tmain(int argc, _TCHAR* argv[])
    21. {  
    22.     unsigned char buf [100];
    23.    
    24.     size_t sizecode =(char*)betta - (char*)alfa;
    25.  
    26.     memcpy((void*)&buf, (void*)&alfa, sizecode);
    27.    
    28.     puts("start\n");
    29.     getchar();
    30.     VirtualProtect(buf, sizeof buf, PAGE_EXECUTE
    31.         | PAGE_READWRITE, NULL) ;
    32.        
    33.     memcpy((void*)&buf, (void*)&alfa, sizecode);
    34.    
    35.     typedef void(__cdecl *kh)(int* , int*);
    36.     kh assa = (kh)&buf[0];
    37.    
    38.     int ab =10, bb = 1;
    39.     (assa)(&ab, &bb);
    40.     cout << ab << endl;
    41.     cout << bb << endl;
    42.     getchar();
    43.  
    44.     return 0;
    45. }
    заголовочные то сам риделаеш :)
     
  11. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    wsd
    немного неверно
    Даже с откл. оптимизацией в некоторых случаях генерятся джампы.
    Т.е. на выходе получается такой код

    Код (Text):
    1. jmp alfa
    2. .... (другие джампы на другие функции)
    3. jmp beta
    4. ..... (тут может быть что угодно... другие джампы, код или какие-то данные)
    5.  
    6.  
    7.  
    8. alfa:   (функции могут находится произвольно. Не обязательно рядом и не обязательно последовательно)
    9. ....
    10. beta:
    11. ....
    таким образом,

    size_t sizecode =(char*)betta - (char*)alfa;

    в sizecode - у тебя будет расстояние между двумя джампами, а не функциями.
    Непосредственно тела функций будут в совершенно других местах программы.
    И не факт что функции будут идти последовательно.

    Прежде чем что-то от чего-то отнимать, сперва желательно проверить первый байт функции.
    Если 0xE9 - скорректировать действительные адреса.
     
  12. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Magnum
    Hi
    так там всё на этапе копиляции вычисляется
    а ты имел ввиду IAT?там всё без её участия
    мы также вырывнивание тянем;)
    имхо я так понял что мс располагает функции в бинаре в обратным порядке
     
  13. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    wsd
    Нет, я не имел ввиду IAT

    После сборки ВАШИ функции могут идти либо непосредственно друг за другом, либо по &myfunc будет jmp на тело myfunc, а не сама myfunc

    Вот смотри
    простой проект

    void myfunc1(int a, int b)
    {
    return;
    };

    void myfunc2(int a)
    {
    return;
    }


    после сборки это может выглядеть так

    jmp myfunc1
    jmp myfunc2
    ........

    myfunc1:
    ...
    myfunc2:
    ...


    и вот такой вот код

    a = &myfunc1

    вернет адрес jmp-a на myfunc1, но никак не адрес тела самой функции



    ЗЫ: я говорю именно про ваши функции. Наличие или отуствие импорта тут вообще ни при чем.
     
  14. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    достаточно функу объявить как внешнюю и она даже при оптимизации останется функой. Те не будет слита с другой или отброшена если нет явного использования. А переведение комбинации 'call xxx; ret;' в 'jmp xxx;' можно отключить хотя зачем это надо - не знаю.
     
  15. reverser

    reverser New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    615
    Выключи incremental linking и не будет никаких левых джампов.
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    All
    сенкс
     
  17. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    wsd
    Мне кажется, что лучше всего на указателях. Но ! Компиллер в праве разместить или за инлайнить или еще чего сделать с кодом ) потому ты должен принудительно задать порядок размещения в коде ф-ций. Дальше разность указателей, плюс убавить полученное на размер области байтов с 0xCC значением.
     
  18. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    wsd
    Еще при внедрении в файл учти, что в ф-ции следует избегать вызова импортируемых ф-ций, да и другие ф-ции тоже следует избегать ;) Ведь то что было в твоей программе-инжектор не есть такие же адреса в программе-жертва ;)
     
  19. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    wsd
    если инжектируемые группы фунок оформить в отдельных файлах, то оптимизация не помешает. И даже переходы внутри одного файла будут нормальными. Только глобальных переменных юзать нельзя. Только локальные и классированые. А еще, инжектируемую прогу можно слинковать в подобие сом файла (PIC) и в инжектер в виде массива.
     
  20. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    EvilsInterrupt
    cамо сабой релоки и парсы тогда :)
    спасибо за участие!
    _basmp_
    да это я пробы пера на эксплоитах, хотел основную часть на си
    а потом вынуть спасибо!