PDA

Просмотр полной версии : Помогите по полиморфизму


zl0y
25.08.2007, 02:44
Вот пишу полиморф движок дошел до генерирования мусора кодом,когда генерирвую строками ошибок нет,но делать это строками мне совесть не позволяет :)
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;
Так все работает нормально,но если делаю это в цикле прога вылетает... почему??? :(

dmnt
25.08.2007, 11:01
вопервых лучше не использовать все 8 регистров для мусора, проблемы могут быть :)
во вторых можно пойти по пути наимньшего сопротивления и задать сразу наборы мусорных инструкций, однобайтовых, двухбайтовых и т.д. а потом выбирать из них случайную

Hellsp@wn
25.08.2007, 12:11
бред =)

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

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

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

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

Ni0x
25.08.2007, 14:52
Ужасный код.
Ищи исходники Morphine, там 2 версии в архиве, как на С, так и на дельфи. Также почитай про способы генерации мусорных команд.

zl0y
25.08.2007, 15:00
Ужасный код.
Ищи исходники Morphine, там 2 версии в архиве, как на С, так и на дельфи. Также почитай про способы генерации мусорных команд.
Я знаю,что ужасный :) но надо же как то разобраться с принципом ;)

Кттаи в морфине не лучше ;)
procedure TestReg32Rand(var AMem: PByte);
begin
AMem^:= $85;
Inc(AMem);
AMem^:= $C0 + RandomReg32All*9;
Inc(AMem);
end;

$85- опкод test reg32 =)

KEZ
25.08.2007, 19:30
Херня ваши морфины. Героин круче;)
Генерация команд - полная лажа. Прикольнее разбивать код на куски, перемешивать их и делать джапмы друг на друга, просчитывая все остальные джапмы и колы.

zl0y
25.08.2007, 19:39
Херня ваши морфины. Героин круче;)
Генерация команд - полная лажа. Прикольнее разбивать код на куски, перемешивать их и делать джапмы друг на друга, просчитывая все остальные джапмы и колы.
А ты статеек подкинь номальных,а то мне самому кроме генерации по опкодам ничег ов голову неприходит :(

Hellsp@wn
25.08.2007, 19:44
дык ничё сложного, наф статейки? дизасм нормальны и вперёд...
я пишу такую тулзу, надо будет выбрать участки кода и в итоге из них получится
лапша =)

GlOFF
04.09.2007, 00:03
Самая дурь когда в твоём полиморфизме есть встроенный дизассемблер, который аналогичные команды заменяет своими, пример простой:
есть add eax, 1 твоя прога заменяет на inc eax + nop's !!! Т.е. интелектуальный способ создания ПОЛИ\МНОГО МОРФИЗМ\ТЕЛЬНОГО кода, т.е. твоя прога изменяет тело программы не влияя на функциональность, вот это было бы круто, а не просто генерация мусора :)

KEZ
04.09.2007, 02:42
> есть add eax, 1 твоя прога заменяет на inc eax + nop's !!!

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


А ты статеек подкинь номальных,а то мне самому кроме генерации по опкодам ничег ов
голову неприходит

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

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

GlOFF
04.09.2007, 11:01
KEZ А сколько будет весить простенькая виртуальная машина, реализованная на С++ или Asme?

KEZ
04.09.2007, 12:19
смысл в том, что какие-то действия заменить псвевдо-кодом (придумать свои инструкции) и написать обработчик - выполнялку этих инструкций. а тут уж замусорить код в самих инструкциях и обработчике. чем менее понятные, неконкретные и мелкие действия выполняют инструкции - тем хуевее будет человеку, который будет это отлаживать

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

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


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

zl0y
06.09.2007, 02:48
Слуайте подскажите как генерить cmp reg32,reg32

00401006: 39C0 CMP EAX, EAX
00401008: 39D8 CMP EAX, EBX
0040100A: 39C9 CMP ECX, ECX
0040100C: 39D2 CMP EDX, EDX
0040100E: 39F6 CMP ESI, ESI
00401010: 39FF CMP EDI, EDI
00401012: 39ED CMP EBP, EBP
00401014: 39E4 CMP ESP, ESP
00401016: 39E3 CMP EBX, ESP

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

KEZ
06.09.2007, 03:03
А ты генеришь, основываясь на отличиях мнемоники команд?) Вообще-то описано какой у них должен быть опкод и как они формируются, в cadt by ms-rem дизассемблере видно как по cmp создается мнемоника, вот также и обратную сторону

dmnt
06.09.2007, 14:36
3BCx - cmp eax, reg1-8
3BCX - cmp ecx, reg1-8

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

_Great_
06.09.2007, 18:42
Слуайте подскажите как генерить cmp reg32,reg32


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

GlOFF
06.09.2007, 19:02
_Great_ Дай полное название...

KEZ
07.09.2007, 10:33
В книжке Юрова ("Ассемблер" че-то такое) нет структуры опкодов...

_Great_
07.09.2007, 13:52
В книжке Юрова ("Ассемблер" че-то такое) нет структуры опкодов...
В.Юров "Assembler. Специальный справочник".
все там есть. и структура машинной команды и опкоды каждой инструкции

Lamia
13.09.2007, 18:27
Воть тут сначало посмотрите!Если шарите в ассемблере то поймёте!Если шарите то тогда никчему эта тема! http://vx.org.ua/29a/main.html

disasembler
03.07.2008, 22:01
подкиньте плиз статей, которые описывают создание вирт.машин:)