Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Самоизменяющийся код

19K
20 декабря 2006 года
Dymytriy
7 / / 18.12.2006
Всем привет,
Пытаюсь написать прогру которая сама изменяет свой исходный код на этапе выполнения, использую компилятор VC2003, но никак не получаеться... подскажите, кто знает идеи... а то я новичек, даже не знаю с чего начать.
Спасибо.
2.1K
20 декабря 2006 года
AD_min
36 / / 11.02.2004
Мне кажется, что для начала ты взял очень сложное задание. Одному тебе его не потянуть, базовых знаний языка будет недостаточно.

Знаю есть тут на форуме любители, начинать изучать язык с создания собственной ОС.. : )
261
20 декабря 2006 года
ahilles
1.5K / / 03.11.2005
Цитата: AD_min
Знаю есть тут на форуме любители, начинать изучать язык с создания собственной ОС.. : )


прямо в точку
насчёт вопроса:
самомодифицирующийся код можно написать только на асме!!!!!!

2
20 декабря 2006 года
squirL
5.6K / / 13.08.2003
да ну? ты в этом уверен на 100%? а что мешает написать его, например, на С?
260
21 декабря 2006 года
Ramon
1.1K / / 16.08.2003
Интересно, а как представляет сие сам автор, хотелось бы услышать более четкую постановку задачи, что есть и что хотим получить.

PS: Указатели на функции - рулят :-D
9
21 декабря 2006 года
Lerkin
3.0K / / 25.03.2003
Цитата: Dymytriy
...которая сама изменяет свой исходный код на этапе выполнения...



Не понял. Запускаешь её, и она модифицирует свой исходник? :) Или надо модифицировать исполняемый код?

261
21 декабря 2006 года
ahilles
1.5K / / 03.11.2005
на C++ ты же не знаешь какой код будет сгенерирован как и на любой языке выского уровня
разумеется если ты будешь писать в __ASM{ ..... } то всё нормально, а если как обычно, то будут проблемы
я дельфист и потому привык к такой фигне, может быть на с++ проще.......
252
01 января 2007 года
koderAlex
1.4K / / 07.09.2005
пусть механизм изменения кода опишет , а то помнится мне что в защищённом режиме сегмент кода имеет атрибут RO . Подробностей , а то много вопросов возникает .
3
02 января 2007 года
Green
4.8K / / 20.01.2000
Цитата: koderAlex
сегмент кода имеет атрибут RO


VirtualProtect поможет

260
02 января 2007 года
Ramon
1.1K / / 16.08.2003
Цитата: koderAlex
пусть механизм изменения кода опишет , а то помнится мне что в защищённом режиме сегмент кода имеет атрибут RO . Подробностей , а то много вопросов возникает .



Во FLAT модели сегментация особой роли не играет ибо нету ее там как таковой.

PS: Про страничное преобразование не забываем ;-)

5.4K
02 января 2007 года
Svyatozar
221 / / 11.09.2006
Цитата: Dymytriy
Всем привет,
Пытаюсь написать прогру которая сама изменяет свой исходный код на этапе выполнения, использую компилятор VC2003, но никак не получаеться... подскажите, кто знает идеи... а то я новичек, даже не знаю с чего начать.
Спасибо.

И зачем новичку такая экзотерическая функциональность? Кроме вирусов, ну где еще есть необходимость в самоизменяемом коде??

252
03 января 2007 года
koderAlex
1.4K / / 07.09.2005
Цитата: Svyatozar
И зачем новичку такая экзотерическая функциональность? Кроме вирусов, ну где еще есть необходимость в самоизменяемом коде??


системы ИИ .

9
04 января 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: koderAlex
системы ИИ .



Да, вот новичку - самое оно задача.:) Аффтар, вирусняк пишешь? Признавайся... ;)

5.4K
04 января 2007 года
Svyatozar
221 / / 11.09.2006
Цитата: koderAlex
системы ИИ .

А можно поподробнее? Какие там еще есть механизмы научения которые невозможно реализовать интерпретируя простой макроязык наподобе, к примеру, того что используется в шрифтах ttf?

252
05 января 2007 года
koderAlex
1.4K / / 07.09.2005
дело не в механизмах . это из теории множеств . если есть множество задач и множество их решений , то должно существовать множество функций (алгоритмов) отображения . применительно к современному уровню кибернетики это означает вариабельность (сасмоизменяемость) кода .
3
05 января 2007 года
Green
4.8K / / 20.01.2000
ага... пришли к старой, как Мир, идее: берем массив, например, 1кб и начинаем перебирать все возможные варианты его заполнения (это всего 2^8192), в результате получаем массу полезных (сами не знаем чем) программ.
252
05 января 2007 года
koderAlex
1.4K / / 07.09.2005
код должен изменятся целенаправлено , иначе бессмыслица получится .
1.9K
06 января 2007 года
disasm
232 / / 06.02.2006
Игра есть еще - CoreWars. Основана на модификации (а скорее копировании и изменении инструкций) кода. Если замутить к ней нормалного игрока то получится вполне реальное применение генетическому алгоритму.
261
06 января 2007 года
ahilles
1.5K / / 03.11.2005
кстати кто знает на какой операционной системе выполняются программы CoreWars, потому что насколько я знаю память там устароена так что за последним байтом памяти следует первый (кольцевая система)
и ассемблер там какой то другой.....
252
07 января 2007 года
koderAlex
1.4K / / 07.09.2005
там виртуальная машинка .
выполняется в досе (стары версии) и винде .
1.9K
08 января 2007 года
disasm
232 / / 06.02.2006
Надо сделать для CoreWars прогу для работы на реальном компе, чтобы она против NTCore была :)
7
02 февраля 2007 года
@pixo $oft
3.4K / / 20.09.2006
Кто сказал,что на Ц нельзя самомодификацию уделать?Вполне можно;Крис Касперски даже пример приводит.В крайняк можно и на Асме написать,и при компиляции атрибуты секции сменить
5.4K
03 февраля 2007 года
Svyatozar
221 / / 11.09.2006
Цитата: @pixo $oft
Кто сказал,что на Ц нельзя самомодификацию уделать?Вполне можно;Крис Касперски даже пример приводит.В крайняк можно и на Асме написать,и при компиляции атрибуты секции сменить

Дык вопрос не в том можно ли, а в том нужно ли? Тот же CoreWars - это же контроллируемая среда. И потом операционная система имеет власть просто не давать процессу разрешение на запись в сегмент кода.

1.9K
03 февраля 2007 года
disasm
232 / / 06.02.2006
Но поскольку обычно пространство сегментов кода и данных совпадают, то можно код изменять через сегмент данных. Это вроде бы во всех PM ОС так..
Делать модификацию кода на C - это все равно что к программе дописать ее же саму так, чтобы код программы лежал в ее же массиве :)
Реально же применение самомодификации кода на PC очень узкое: оно используется в некоторых алгоритмах (например алгоритм рисования прямых линий), а также в системах защиты кода
261
03 февраля 2007 года
ahilles
1.5K / / 03.11.2005
самоизменять код на языках высокого уровня вообще бестолково да и не к чему, потому что откуда ты знаешь что сгенерирует компилятор и так накуралесишь что сама прога накроется.
9
03 февраля 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: disasm
...Реально же применение самомодификации кода на PC очень узкое: оно используется в некоторых алгоритмах (например алгоритм рисования прямых линий), а также в системах защиты кода



А вот где бы глянуть примерчик, или, там, статейку? Просто не думал, что для такой задачи, как рисование отрезка прямой линии, может потребоваться самомодифицирующийся код.

3
03 февраля 2007 года
Green
4.8K / / 20.01.2000
Цитата: ahilles
самоизменять код на языках высокого уровня вообще бестолково да и не к чему, потому что откуда ты знаешь что сгенерирует компилятор и так накуралесишь что сама прога накроется.


Ну это если ты относишься к программированию, как к шаманству, а к компилятору, как к бубну.

Я не вижу проблем в модификации программы в ран-тайме написанной на C/C++. Точнее вижу, но они все решаемы.

Простейший пример таких программ - упаковщики EXE.

55K
30 июля 2011 года
freeax
3 / / 30.07.2011
Уважаемые форумчане, подскажите как найти длину кода code_length ?

mov cx, code_length
mov si, offset begin_code
mov al, xor_key
_loop:
xor [si+cx], al ;расшифровываем байт
loop _loop ;берем следующий байт
jmp si

;...
;...

begin_code:
;...
;...

в плане как узнать длину команд в байтах, если команды известны?
Например, какая длина следующего кода?

pushl $n
pushl $msg
pushl $msgf
call printf
addl $8, %esp
pushl $sfmt
call scanf
addl $8, %esp
addl $1, n
316
30 июля 2011 года
Alm3n
889 / / 29.05.2009
Цитата: freeax
Уважаемые форумчане, подскажите как найти длину кода code_length ?

mov cx, code_length
mov si, offset begin_code
mov al, xor_key
_loop:
xor [si+cx], al ;расшифровываем байт
loop _loop ;берем следующий байт
jmp si

;...
;...

begin_code:
;...
;...

в плане как узнать длину команд в байтах, если команды известны?
Например, какая длина следующего кода?

pushl $n
pushl $msg
pushl $msgf
call printf
addl $8, %esp
pushl $sfmt
call scanf
addl $8, %esp
addl $1, n



открываешь отладчик, смотришь на адрес последней команды, потом первой, потом из последней вычитаешь первую,???,профит.

55K
30 июля 2011 года
freeax
3 / / 30.07.2011
Цитата: Alm3n
открываешь отладчик, смотришь на адрес последней команды, потом первой, потом из последней вычитаешь первую,???,профит.



0x08048404 <main+0>: push $0x8049624
0x08048409 <main+5>: push $0x8049632
0x0804840e <main+10>: push $0x804962f
0x08048413 <main+15>: call 0x8048330 <printf@plt>
0x08048418 <main+20>: add $0x8,%esp
0x0804841b <main+23>: push $0x804962c
0x08048420 <main+28>: call 0x8048320 <scanf@plt>
0x08048425 <main+33>: add $0x8,%esp
0x08048428 <main+36>: addl $0x1,0x8049624

получается 36 байт, правильно?

316
30 июля 2011 года
Alm3n
889 / / 29.05.2009
правильно.
5
07 августа 2011 года
hardcase
4.5K / / 09.08.2005
Нормальный, человекочитаемый и наверно даже полезный самомодифицирующийся (если это действительно самоцель) код стоит писать либо на LISP либо на Fort. Использование языков отличных от перечисленных приведут к очередному доказательству десятого правила Гринспена.
41K
23 августа 2011 года
kisssko
108 / / 28.10.2010
Вот рабочий пример кода:
Код:
#include "stdafx.h"
#include <windows.h>

typedef unsigned char u8;

// ================ PRECOMPILED ================
// This code:
// __declspec(dllexport) int sum2(int v1, int v2){int v0; v0=v1+v2; return v0;}
u8 mycode[]="\x8B\x44\x24\x08\x8B\x4C\x24\x04\x03\xC8\x89\x4C\x24\x08\x8B\x44\x24\x08\xC3\x00";
// =============================================

int  result=0;

int _tmain(int argc, _TCHAR* argv[])
{
 result=((int(*)(int,int))(void*)mycode)(123,321);
 printf("123+321=%d\n", result);
 return 0;
}
5
23 августа 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: kisssko
Вот рабочий пример кода:



А теперь включи в системе DEP для всех процессов. ;)

7
23 августа 2011 года
@pixo $oft
3.4K / / 20.09.2006
В таком случае можно просто данные размещать в секции .text.На асме я так и делал для экономии:)
41K
24 августа 2011 года
kisssko
108 / / 28.10.2010
Цитата: hardcase
А теперь включи в системе DEP для всех процессов. ;)



В таком можно выделить память функцией VirtualAlloc с правами на исполнение, и перекопировать туда код.

Вот примерно так:

 
Код:
codeData=VirtualAlloc(NULL, 65536, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
79K
13 января 2012 года
ejm23
2 / / 12.01.2012
по поводу самомодифицирующегося кода на C++ советую прочитать http://tips.efmsoft.com/main/entry.php?index=0
там и проект для VC2010 можно скачать
316
15 января 2012 года
Alm3n
889 / / 29.05.2009
Цитата:
Писать самомодифицируемый код на языках высокого уровня.


[ATTACH=CONFIG]5562[/ATTACH]
Но Lisp, да, он просто создан для самомодификации, только не создан для программирования.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог