PDA

Просмотр полной версии : Возможна ли детекция факта эмулирования из эмулянта?



TomCaT
19.06.2007, 22:15
Сабж.

В смысле, может ли программа определить исполняющий ее эмулятор благодаря некоторым его особенностям, отличающим эмулятор от оригинала?

Понятно, что таких монстров, как UnReal, отследить невозможно с шансами, думаю, %99. Но все-таки...:v2_conf2:

GriV
19.06.2007, 22:47
только сейчас это всё сложнее и сложнее, в связи с тем, что эмуляторы закрывают последние "дыры".
Например можно определить по скорости чтения с TR-DOS и с ленты - обычно там срабатывают "трапы", которые позволяют значительно ускорить ход загрузки. Т.е. если сектор 256 байт положено считывать около 30000 тактов, а фактически они - секторы - прилетают чуть не махом. Однако эмуляторы часто имеют возможность отключения "трапов" тырдоса. Аналогично с лентой. Уже указывалась не раз работа с регистром R - на реале им манипулируя можно вроде как "стереть" часть программы. Но сам я так не пробовал, видел такой метод в ZX-Ревю. Ещё возможно некоторые недокументированные (внутренние) регистры Z80, которые в эмуле не отловлены (далеко ходить не надо, заглянуть в программирование и регистр флагов), но которые как то можно прочитать на реальном железе. Но: это будет работать до тех пор, пока программу, которая отличает эмулятор от реала, не сломают и не вытащат её код.
Практически считаю подобные попытки (отличение одного от другого) ненужным делом. Если это связано с обработкой экрана и т.п., то лучше сделать в программе чтото вроде сетапа, где спрашивается что используется - эмуль или реал.

Shadow Maker
19.06.2007, 22:47
Старые можно было отследить, по таймингу/командам некоторые криво эмулились. Сейчас все эмуляторы фактически 100% эмулируют оригинал, отследить нельзя.

Вопрос - зачем это нужно????

ps - Грив опередил... :)

alone
20.06.2007, 00:30
ускорение ленты в Unreal тайминг учитывает.
В принципе, не нужно издеваться над пользователями эмуляторов.

Sinus
20.06.2007, 00:45
насколько я помню, с последними доработками boo_boo его либа эмулит z80 на 100%.
ВГ-шка тоже вроде как 100% в анриле эмулится.



GriV, Уже указывалась не раз работа с регистром R - на реале им манипулируя можно вроде как "стереть" часть программы. Но сам я так не пробовал, видел такой метод в ZX-Ревю
я пробовал. работает.
но только двухполевиках и только на тех, где для регенерации верхней части ОЗУ используется стандартный механизм z80

но и это можно эмульнуть.
вопрос к автору темы - а это вообще зачем???

Adramelek
20.06.2007, 02:18
Была статья каком-то Deja Vu, то ли 0А, то ли ХХ. Там и про регистр R было.

TomCaT
20.06.2007, 07:45
Ответ всем отписавшим: спасибо, уяснил, хотя ответ был заподозрен с самого начала. Однако хотя бы некоторые все-таки можно отследить ;)

А вообще -- низачем, любопытно. Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)" Даже если фактически она на это и не отреагирует.

И ловушки у пользователей (не у мэйкеров) вкл. почти всегда -- по ним, наверное, лучше всего...

И интересная вещь с этим регистром регенерации, его тему в "Как написать игру..." обошли, но из другой литературы понятно, что служит он для регенерации памяти. Видимо, задача защит в том, чтобы не давать ему переполняться в интервал необходимости обновления нужного куска памяти. Но это, конечно, не по теме...

Alexandr Medvedev
20.06.2007, 11:10
Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)"И ещё версию эмулятора вывести. Это серьёзно, т.к. в старых версиях UnrealSpeccy было даже небольшое API для эмулируемых программ.
Можно было например узнать версию эмулятора или даже закрыть окно.
Про детект СТАРЫХ эмуляторов можно прочитать здесь: http://zxdn.narod.ru/coding/bd05emud.txt .

psb
20.06.2007, 18:07
ВГ-шка тоже вроде как 100% в анриле эмулится.
че-т я сомневаюсь;)

alone
20.06.2007, 18:18
что точно не эмулится - при обработке команды сброса регистр дорожки на реале обнуляется не сразу, а по битикам (что, кстати, забавно).

Добавлено через 1 минуту
API, возможно, верну - например, можно использовать для открытия урлов из прессы или для ведения логов при отладке прог

Shadow Maker
20.06.2007, 20:44
Сделай тогда его включение опциональным, а то мало ли чего Феде Сумкину в голову стукнет...

Vitamin
21.06.2007, 00:00
А еще лучше разработать единый стандарт на это API чтоб в других эмуляторах можно было поддерживать и не изобретать велосипеды со своим API и с адаптацией программ под него.

Alexandr Medvedev
21.06.2007, 11:07
А еще лучше разработать единый стандарт на это API чтоб в других эмуляторах можно было поддерживать и не изобретать велосипеды со своим API и с адаптацией программ под него.Насколько я знаю API есть только у старых версий UnrealSpeccy и Z80Stealth, но у последнего всего пара функций предназначеных для вытаскивания мызыки.

TomCaT
21.06.2007, 19:19
Интересно было бы стандартизировать этот API, тут все в руках авторов эмуляторов. Хочешь -- включаешь его в свои наработки, хочешь -- не поддерживаешь. На то и стандарт.

GriV
23.06.2007, 20:15
А вообще -- низачем, любопытно. Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)" Даже если фактически она на это и не отреагирует.


А ты сразу выводи "у тебя Unreal" авось прогадаешь %)
Только сразу добавь какою нить возможность апдейта... чтобы всегда самая последняя версия эмуля выводилась %)

Типа "у тебя US 0.3.3.6" а если новая версия выйдет, чтобы писала "у тебя US 0.3.3.7". Можно ещё сделать сетап. В нём пользователь сам будет вводить версию своего эмулятора, и возможно название.
Тогда программа используя эти данные сможет точно указать из под чего она запускается :v2_lol: А если серьёзно то фигня всё это %) хотя пища для ума интересная конечно :-)

TomCaT
24.06.2007, 08:47
:) мдя :)