Авторские статьи Пишем конфигуратор[c++]

Discussion in 'Статьи' started by Ky3bMu4, 8 Jul 2007.

  1. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Итак, вы написали супер-троя.Трой стучит по стате,непалится антивирусами и т.д. Но вот проблема:каждому юзеру юзающему вашего троя компилить из исходников неудобно! В этой статье я расскажу вам как написать конфигуратор для вашего детища. Всё наше действо будет состоять из 2 частей:

    I)Готовим тело троя
    II)Сам конфигуратор

    Ok, let`s go! (c)

    I)
    Готовим тело троя.
    Компилим трой. Все параметры для отстука по стату(к примеру) должны заканчиваться и начинаться на '_'(нам это нужно будет)
    Т.е.
    Code:
    #define host "_megasite.megahost.com_"
    #define path "_/mega777/megagate.php_"
    
    Зачем нам такие длинные имена? Почему бы просто не site.com и /gate.php ? Дело в том, что будем править уже готовый .exe`шник

    и "переполнять" там что-то очень нежелательно.
    К примеру:
    Сделаем site.com, а у кого-нибудь юзера стата на megasite.jino-net.ru , В итоге у него ничего не будет работать.
    Теперь я советую переименовать откомпиленый трой в virus.dat(к примеру),чтоб всякие ребята не запускали лишний раз наш ехе.

    II)Сам конфигуратор.
    Итак тело у нас в virus.dat
    Далее буду просто приводить куски кода с комментами.
    Объявем 3 глобальные переменные:
    Code:
    char host[]="site.com";
    char path[]="/777/gate.php";
    char body[12000]; 
    
    Для конфигуратора 2 первые параметра нужно брать из Edit`а. Мне ламо приводить всю работу с VCL(тем более, что это

    элементарно), поэтому рассмотрим всё на частном случае. Размер body в зависимости от размера файла. Лучше брать размер на

    2-3кило больше размера файла.К примеру: вирь весит 15кб размер вы берёте 17000;
    Далее:
    Code:
    DWORD dwBytesRead ,dw ,size , dw1;
    HANDLE hFile = CreateFile("virus.dat",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 
    
    //открываем наше тело
    size = GetFileSize(hFile,&dw); //получаем кол-во знаков в файле
    ReadFile(hFile,body,size ,&dwBytesRead, NULL); //читаем тело в наш массив
    
    Так далее самый ответственный момент. Ищем и заменяем наши параметры.Для этого напишем отдельнуй функцию.
    Code:
    void param(void){
    int x=0;
    int y=1;
    int c=0;
    while(body[x]!='_'){ //вот для чего нам нужны были '_'. Ищем параметр.
    x++;
    }
    //мы остановились на символе '-'
    x++;
    //Теперь мы на следующем символе. Посмотрим что это: host или path
    if(body[x]=='s'){ 
    //итак это хост. Далее очищаем нужное нам место
    while(body[x]!='_'){
    body[x]=NULL;
    x++;
    y++; //чтобы узнать на сколько мы отдалились от '_'
    }
    //мы остановились на символе '_' .Удаляем его и возвращаемся назад
    body[x]==NULL;
    x=x-y; 
    //теперь заполняем наш параметр
    while(host[c]!='_'){
    body[x]=host[c];
    x++;
    c++;
    }
    }
    else {
    //значит это path. Действия теже самые. Только заменяем host на path
    while(body[x]!='_'){
    body[x]=NULL;
    x++;
    y++; //чтобы узнать на сколько мы отдалились от '_'
    }
    //мы остановились на символе '_' .Удаляем его и возвращаемся назад
    body[x]==NULL;
    x=x-y; 
    //теперь заполняем наш параметр
    while(path[c]!='_'){
    body[x]=path[c];
    x++;
    c++;
    }
    }
    }
    
    Ну и концовка:
    Code:
    param();//параметра у нас 2
    param();
    HANDLE hFile1 = CreateFile("Build.exe",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_NEW ,FILE_ATTRIBUTE_NORMAL,NULL); 
    //создаём новый файл
    WriteFile(hFile1,body,size,&dw1,NULL); //пишем в него
    CloseHandle(hFile); //закрываем оба файла
    CloseHandle(hFile1);
    
    Ну вот, в принципе , и всё. Это всё на С++ , но при желании можно переписать на любой язык или переделать не только для параметров статы.
     
    1 person likes this.
  2. [53x]Shadow

    [53x]Shadow Leaders of Antichat

    Joined:
    25 Jan 2007
    Messages:
    284
    Likes Received:
    597
    Reputations:
    514
    Идея интересная, но под стандартный трои конфигураторов имхо дофига. И зачем это в статьи, для этого есть раздел кодинг С++, т.к. кроме исходов здесь больше ничего и нет.
    А так если я все правильно понял есть вопросы:
    1. "_" - таких символов в исполняемом файле дох... и сочетаний с "s" тоже.
    2. А если длина ссылки все-таки больше чем length(host+site)?
     
    #2 [53x]Shadow, 8 Jul 2007
    Last edited: 8 Jul 2007
  3. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    А вот и нефига. ;)
     
  4. [53x]Shadow

    [53x]Shadow Leaders of Antichat

    Joined:
    25 Jan 2007
    Messages:
    284
    Likes Received:
    597
    Reputations:
    514
    В случайно открытом exe обнаружил 127, из них сочетаний с "s" - 6!
    В своем трое - 23, правда сочетаний с "s" нет, но имхо это на удачу...
    По-этому лучше использовать сочетание как минимум из трех редко встречаемых символов (те маленькая сигнатура).
     
  5. Ky3bMu4

    Ky3bMu4 Elder - Старейшина

    Joined:
    3 Feb 2007
    Messages:
    487
    Likes Received:
    284
    Reputations:
    42
    Ну если и есть такие сочитания, то они походу файла первые. Пробовал на bloodknife`е, моём лоадере, и просто проге вызывающей MessageBox - работает.
     
    1 person likes this.
  6. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    еще недавно ты называл это билдером ;)
     
    1 person likes this.
  7. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Наоборот это самое то, когда можно править сурсы, менять команды, добавлять мусор и делать индивидуальные сигны! А конфигураторы обычно пишут для того чтобы юзать\менять настройки чужих программ, т.е. когда нет под рукой исходных кодов!

    Ky3bMu4 За старания +!
     
  8. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    КАКИЕ СОЧЕТАНИЯ???

    ИМХО за такие статьи убивать надо, чтоб билдить бинарник, изменяя его по шаблону.
    НЕТ СЛОВ ребята, нет слов
     
    2 people like this.
  9. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    господи, а почему в конкретную позицию бинарника нельзя писать нужные значения? завел глобальную переменную - и пиши в нее спокойно.
    зы нормальный парсинг ехе-файла в общем случае сравним с асм-анализом сего, что крайне не нужно для поставленной задачи. а тут очень опасная реализация: что если функция обьявленная как cdeclaration пойдет на экспорт?
     
    #9 ZaCo, 20 Sep 2007
    Last edited: 21 Sep 2007
    1 person likes this.
  10. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    713
    Likes Received:
    142
    Reputations:
    50
    Блин... во умище... напишите мне кто-нибудь задачку на C++ а то я в нем не шарю, а сдать надо. горит :)
     
  11. pamba

    pamba New Member

    Joined:
    8 Sep 2007
    Messages:
    5
    Likes Received:
    2
    Reputations:
    0
    Настройки можно писать оверлеем\в новую секцию\между заголовком и первой секцией\в mz-заголовок в дос-стаб. Не стоит делать так, как сделал ты. Это маразм первой категории.
     
  12. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Мне кажется эвристику это не понравится. Про стаб вроде обсуждалось на васме.
    А вообще, уж лучше билдер тогда писать(оверлей, отдельная секция), чем писать такой конфигуратор. То что сделал ТС, это примитив первой категории, если уж корректно говорить.
     
  13. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Господи, что за бред? Пиши в оверлей и не страдай фигней.

    "Маразм крепчал" (С) Вариация Чехова, кажется.

    Умища не так много как кажется
     
  14. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    Можно поподробнее про оверлеи? (как я понимаю, overlay - это код, добавленный после основного кода путем расширения последней секции - седня копался в hiew :) )
     
  15. GlOFF

    GlOFF Elder - Старейшина

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Piflit Оверлей может быть в любом месте файла на диске, и загрузчик винды этот оверлей не пишет в память при загрузке образа файла. PE-Explorer на оверлеи ругается Extra Data :)

    _Great_, Ni0x А как эврестики относятся к оверлеям?
     
  16. Ni0x

    Ni0x Elder - Старейшина

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Нужно думать как эвристик =). Ведь тут особого ума не надо, например эвристик находит секцию ресурсов, начинает анализировать ее, но заместо ресурсов видит левый бинарник, странно неправда ли? Таких примеров можно привести очень много. Насчет оверлея, наверное ни раз играли во флеш игры(exe)? Ну так вот там например бывает, что сам плеер - это основная программа, а непосредственно игра находится в оверлее. Так что ничего против оверлеев эвристик не имеет.