![]() |
eXeL@B —› Программирование —› Написание виртуальной машины |
. 1 . 2 . 3 . >> |
Посл.ответ | Сообщение |
|
Создано: 25 июля 2006 12:46 · Личное сообщение · #1 |
|
Создано: 25 июля 2006 13:36 · Личное сообщение · #2 |
|
Создано: 25 июля 2006 14:34 · Личное сообщение · #3 |
|
Создано: 25 июля 2006 14:52 · Личное сообщение · #4 |
|
Создано: 25 июля 2006 14:54 · Личное сообщение · #5 |
|
Создано: 25 июля 2006 14:56 · Личное сообщение · #6 |
|
Создано: 25 июля 2006 15:00 · Личное сообщение · #7 |
|
Создано: 25 июля 2006 15:03 · Личное сообщение · #8 |
|
Создано: 25 июля 2006 15:31 · Личное сообщение · #9 net3ton Нету помойму нигде нормального описания какой либо VM, все пишут свои VM'ы самостоятельно (я в т.ч.) ![]() Короч или разбирай чужие вм и пиши свою на их основе, или пиши сам, предварительно разработав схему и алгоритм работы (входные и выходные данные). ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 25 июля 2006 19:17 · Поправил: Rascal · Личное сообщение · #10 был же кракми от рема, там как раз вм была, на автоматтьюринга построена. В поисковике пишите автомат тьюринга и радуйтесь ![]() [ADDED] Что-то не найти мне сайтик прикольный, на котором был пример работы автомата тьюринга графический такой, красивый-красивый ![]() ![]() [ADDED2] www.softcraft.ru/auto.shtml - ещё хороший способ наваять ВМ - использовать SWITCH-автомат. Много примеров, например калькулятор очень понравился. Качественно всё описывается и сорсы в комплекте ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 25 июля 2006 21:06 · Личное сообщение · #11 net3ton Увидеть как работает ВМ это первое, что ты должен сделать, потом подумать, а каким образом получен такой результат? Ответом на него даст, как организована данная ВМ и что в ней должно находиться, чтобы ты до сих пор был в неведении, это уже посылка к реализации. Необязательно, как я уже понял, писать ее на подобии абстрактных математических машинах, а-ля Тьюринг, но можно применить совершенно другой метод. Я вот увидел, через код Ms-Rem, то чего мне не хватало для долнейшего толчка в развитии. Советую поковырять кейгенми от этого товарища, и хоть ты не сломаешь, но многое увидишь! ----- My love is very cool girl. ![]() |
|
Создано: 25 июля 2006 21:40 · Поправил: Rascal · Личное сообщение · #12 theCollision Ну и что он там увидит? Тот же автомат тьюринга. Надо смотреть ТЕОРИЮ, а не реверсить ВМ готовую. Теория в данном вопросе превышего всего. Не путай людей, сначала надо почитать литературу, а потом делать выбор относительно реализации. theCollision пишет: Необязательно, как я уже понял, писать ее на подобии абстрактных математических машинах, а-ля Тьюринг Если хочешь гемор на ![]() theCollision пишет: Я вот увидел, через код Ms-Rem, то чего мне не хватало для долнейшего толчка в развитии Небось увидел, что байткод служит как индекс для перехода на функцию ВМ ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 25 июля 2006 21:57 · Личное сообщение · #13 Rascal Нет! ![]() +На мысль навела интересная статейка на uinc.ru, Многочисленные пинки многих людей, которые пнули в нужном на правлении. но switch-case это одна из многих реализаций, ![]() Фантазия, фантазия, сколько сенсеев меня этим словом пинают! ![]() ----- My love is very cool girl. ![]() |
|
Создано: 25 июля 2006 22:04 · Личное сообщение · #14 Приведу пример как можно писать грубый дизассемблер: попался 1 байт опкода - Opcode: switch(Opcode) { case 1: обработка case 2: обработка ... case n: обработка } но можно и так: typedef struct _HOPCODE .... }HOPCODE, *POPCODE; POPCODE TableOpcode[ЭН ШТУК] = { ТУТ задать че надо! } POPCODE = TableOpcode[Opcode]; и тебе уже не надо ни каких switch-case зачем они, ты уже получил описатель опкода и с нужной тебе информацией! На базе этого примера уже можно говорить, что switch-case не король всем алгоритмам! ----- My love is very cool girl. ![]() |
|
Создано: 25 июля 2006 22:14 · Личное сообщение · #15 theCollision пишет: дизассемблер тада уж компилятор Если switch таблица удачно скомпилена, то ты и получишь обращение по таблице идентификаторов, единственное, что добавится - придётся написать обработчик, а у тя сразу записан псевдокод. Это удобно, но.Свич нагляднее будет, плюс использование массива уместно только для записи байткода например, а вот если встретися опкод с двумя оперндами, то придётся их обрабтывать, простым typedef'ом не отмажешься. Так что лучше комбинировать, ибо такое представление псевдокодов конечно удобнее ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 25 июля 2006 22:22 · Личное сообщение · #16 >простым typedef'ом не отмажешься. Хорошо, к примеру в структуре: byte option; dword addr; если в оптион 1, то смотрим на addr как на адрес в следующую таблицу, а если 0 то читаем мнемонику! В других таблицах задать новые мнемоники и ссылки на другие таблицы если требуется! > но.Свич нагляднее будет Я не понял, а с каких пор защита ПО должна подсказывать, как хакать надо? ----- My love is very cool girl. ![]() |
|
Создано: 25 июля 2006 22:48 · Личное сообщение · #17 theCollision пишет: если в оптион 1, то смотрим на addr как на адрес в следующую таблицу Тьфу мля, ты назвал дизасмом, я и подумал, что это преобразование истинной программы в P-CODE ![]() ![]() ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 26 июля 2006 08:14 · Поправил: cleric · Личное сообщение · #18 theCollision пишет: Я вот увидел, через код Ms-Rem, то чего мне не хватало для долнейшего толчка в развитии. Советую поковырять кейгенми от этого товарища, и хоть ты не сломаешь, но многое увидишь! Фантазия, фантазия, сколько сенсеев меня этим словом пинают! theCollision - EvilsInterrupt???? ![]() ![]() сходил на сайт, ну вы крутые перцы! ![]() ![]() |
|
Создано: 26 июля 2006 10:29 · Личное сообщение · #19 cleric Зачем статья-то ? Все итак написано!!! Даже более чем!!! Сиди да пиши, на uinc.ru "эмуляция кода" на сайте GpCH есть статья, дающая полное представление, что можно наворотить! Но ведь хорошая вм это та, работу которой в идеале никтон незнает и скажи накой икс писать еще одноу статью? ----- My love is very cool girl. ![]() |
|
Создано: 26 июля 2006 10:46 · Личное сообщение · #20 theCollision пишет: хорошая вм это та, работу которой ВМ как чёрный ящик - не спрятать входные данные и выходные (правильнее здесь писать "действия", ибо ВМ всё таки выполняет код). Их вполне достаточно для разбора работы. Всё зависит от сложности ВМ, а от этогго зависит лишь время её разбора. Статья гпч больше напоминает написание простейшего скриптового языка, но не ВМ, как её понимают на портале кряклаб На уинке в конце статьи действительно есть более интересные данные, это стоит почитать. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 26 июля 2006 11:20 · Личное сообщение · #21 |
|
Создано: 26 июля 2006 13:36 · Личное сообщение · #22 |
|
Создано: 26 июля 2006 16:20 · Личное сообщение · #23 [norwed] Можно выдвинуть требования?! : 1. Эмуляция call CCCC, jnCCC , jmp CCCC, jCCCC 2. Если смещение для перехода вычесляется в программе , то как его можно эмулить, желательно примеры от простого (2 штуки) и сложных (3 штуки) 3. Обфускация не кода x86, что мы привыкли видеть в обычном и привычном x86 коде благодаря которому работают все программы под винды, а кода вм-машины, не сама реализация интерпретатора, а код который она должен выполняться уже должен быть обфусцированным! ----- My love is very cool girl. ![]() |
|
Создано: 26 июля 2006 16:40 · Личное сообщение · #24 theCollision Вот тебе нормальные требования: 1) Эмуляция всех инструкций. 2) Псевдокод находится в шифрованном виде, причём для расшифровки применяются различные мат. преобразования. 3) Исполнитель потоковый, циклический. 4) Для каждой программы создаётся своя вм с новым псевдокодом. 5) Проверка целостности исполнителя. В принципе vmProtect подходит под все эти требования и является истинной вм, в отличие от всяких скриптовых языков ![]() ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 26 июля 2006 17:30 · Личное сообщение · #25 |
|
Создано: 26 июля 2006 18:28 · Личное сообщение · #26 Эх, если б не работа збацал что-нить, ну а так не раньше чем через неделю. theCollision пишет: я писал, что мне надо, а не то что нужно выдвинуть чтобы каждому понравилось! Нах, неудобно, когда много команд не поддерживается. Вообще из требований ещё можно ввести наличие своих регистров, и пусть их будет побольше, тогда можно ещё объеденять набор команд асма интела в один опкод. Типа push ebp mov ebp, esp, хотя реализовать сложнее ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 26 июля 2006 18:59 · Личное сообщение · #27 |
|
Создано: 26 июля 2006 19:15 · Личное сообщение · #28 |
|
Создано: 26 июля 2006 20:02 · Личное сообщение · #29 |
|
Создано: 26 июля 2006 20:17 · Личное сообщение · #30 |
. 1 . 2 . 3 . >> |
![]() |
eXeL@B —› Программирование —› Написание виртуальной машины |