Помогите по полиморфизму

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by zl0y, 25 Aug 2007.

  1. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Вот пишу полиморф движок дошел до генерирования мусора кодом,когда генерирвую строками ошибок нет,но делать это строками мне совесть не позволяет :)
    Code:
    function GetIncDec32():string;
    var I : integer;
    reg_inc,reg_dec : integer;
    begin
    randomize;
    i:=random(8);
    reg_inc:=0
    reg_dec:=0;
    asm
    mov eax,40//Поместим в eax опкод inc
    mov ebx,48//Поместим в ebx опкод dec
    add eax,i//Добавим в eax,рандом регистр
    add ebx,i//Добавим в ebx,рандом регистр
    xchg reg_inc,eax//Получим в reg_inc нужный нам опкод
    xchg reg_dec,ebx//Получим в reg_dec нужный нам опкод
    end;
    result:=IntToStr(reg_inc)+IntToStr(reg_dec);
    end;
    Так все работает нормально,но если делаю это в цикле прога вылетает... почему??? :(
     
    #1 zl0y, 25 Aug 2007
    Last edited: 25 Aug 2007
  2. dmnt

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

    Joined:
    6 Jun 2007
    Messages:
    89
    Likes Received:
    36
    Reputations:
    15
    вопервых лучше не использовать все 8 регистров для мусора, проблемы могут быть :)
    во вторых можно пойти по пути наимньшего сопротивления и задать сразу наборы мусорных инструкций, однобайтовых, двухбайтовых и т.д. а потом выбирать из них случайную
     
  3. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    400
    Likes Received:
    153
    Reputations:
    48
    бред =)

    >> result:=IntToStr(reg_inc)+IntToStr(reg_dec);

    получаются теже строки!!!

    в какой цикл, что вылетает? ))) ольгу в зубы и смотреть код...

    з.ы. вообще в битовыми масками нада работать, так проще...
     
  4. Ni0x

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

    Joined:
    27 Aug 2006
    Messages:
    338
    Likes Received:
    157
    Reputations:
    37
    Ужасный код.
    Ищи исходники Morphine, там 2 версии в архиве, как на С, так и на дельфи. Также почитай про способы генерации мусорных команд.
     
    1 person likes this.
  5. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Я знаю,что ужасный :) но надо же как то разобраться с принципом ;)

    Кттаи в морфине не лучше ;)
    $85- опкод test reg32 =)
     
  6. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    Херня ваши морфины. Героин круче;)
    Генерация команд - полная лажа. Прикольнее разбивать код на куски, перемешивать их и делать джапмы друг на друга, просчитывая все остальные джапмы и колы.
     
  7. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    А ты статеек подкинь номальных,а то мне самому кроме генерации по опкодам ничег ов голову неприходит :(
     
  8. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    400
    Likes Received:
    153
    Reputations:
    48
    дык ничё сложного, наф статейки? дизасм нормальны и вперёд...
    я пишу такую тулзу, надо будет выбрать участки кода и в итоге из них получится
    лапша =)
     
  9. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    Самая дурь когда в твоём полиморфизме есть встроенный дизассемблер, который аналогичные команды заменяет своими, пример простой:
    есть add eax, 1 твоя прога заменяет на inc eax + nop's !!! Т.е. интелектуальный способ создания ПОЛИ\МНОГО МОРФИЗМ\ТЕЛЬНОГО кода, т.е. твоя прога изменяет тело программы не влияя на функциональность, вот это было бы круто, а не просто генерация мусора :)
     
  10. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > есть add eax, 1 твоя прога заменяет на inc eax + nop's !!!

    даа... просто гениальный метод, сложный в реализации. приватный наверное
    антивирусам по*** что там inc eax, add eax,1 или sub eax, -1 - у них свой меж-скриптовый сценарий генерится, где все твои инструкции считаются одной и тойже - "прибавить к eax единицу"

    нахера статейки? бери код, разбивай его на куски, делай джамп из одного в другой, все инструкции, зависящие от адреса (и старые джампы из одгого в другой) - перенастраивай

    Что реально интересно - виртуальная машина например.
    Вставлять нопы и заменять inc eax на add eax, 1 - бессмысленно
     
    1 person likes this.
  11. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    KEZ А сколько будет весить простенькая виртуальная машина, реализованная на С++ или Asme?
     
  12. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    смысл в том, что какие-то действия заменить псвевдо-кодом (придумать свои инструкции) и написать обработчик - выполнялку этих инструкций. а тут уж замусорить код в самих инструкциях и обработчике. чем менее понятные, неконкретные и мелкие действия выполняют инструкции - тем хуевее будет человеку, который будет это отлаживать

    чему там весить? тем более каждый по своему сделает, можно mov eax, 1 превратить в десяток инструкций типа

    задать_регистр_для_работы(eax)
    задать_что_перемещать_будем DWORD
    выделить_буффер
    положить в буффер, с которым работаем "2"
    вычесть из буффера "1"
    скинуть_буфер_в_регистр, с которым работаем
    убрать_буффер


    тут все независимо от инструкция процессора - сам генерируй на одну инструкцию себе сколкьо хочешь всякого говна - то вычесть пять прибавить шесть вычесть один умножить на два, записать - убрать , переместить - поменять... и тд
     
    #12 KEZ, 4 Sep 2007
    Last edited: 4 Sep 2007
    1 person likes this.
  13. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Слуайте подскажите как генерить cmp reg32,reg32

    Чот особой закономерности невижу,есть конечно догадки - но не более :(
     
  14. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    А ты генеришь, основываясь на отличиях мнемоники команд?) Вообще-то описано какой у них должен быть опкод и как они формируются, в cadt by ms-rem дизассемблере видно как по cmp создается мнемоника, вот также и обратную сторону
     
    1 person likes this.
  15. dmnt

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

    Joined:
    6 Jun 2007
    Messages:
    89
    Likes Received:
    36
    Reputations:
    15
    3BCx - cmp eax, reg1-8
    3BCX - cmp ecx, reg1-8

    и т.д.
    hiew в помощь
     
  16. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    купи книжку юрова, там структура опкодов есть
     
  17. GlOFF

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

    Joined:
    8 May 2006
    Messages:
    689
    Likes Received:
    484
    Reputations:
    4
    _Great_ Дай полное название...
     
  18. KEZ

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

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    В книжке Юрова ("Ассемблер" че-то такое) нет структуры опкодов...
     
  19. _Great_

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

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,118
    Reputations:
    1,139
    В.Юров "Assembler. Специальный справочник".
    все там есть. и структура машинной команды и опкоды каждой инструкции
     
  20. Lamia

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

    Joined:
    11 Jul 2007
    Messages:
    186
    Likes Received:
    77
    Reputations:
    -9
    Воть тут сначало посмотрите!Если шарите в ассемблере то поймёте!Если шарите то тогда никчему эта тема! http://vx.org.ua/29a/main.html