Просмотр полной версии : Возможна ли детекция факта эмулирования из эмулянта?
Сабж.
В смысле, может ли программа определить исполняющий ее эмулятор благодаря некоторым его особенностям, отличающим эмулятор от оригинала?
Понятно, что таких монстров, как UnReal, отследить невозможно с шансами, думаю, %99. Но все-таки...:v2_conf2:
только сейчас это всё сложнее и сложнее, в связи с тем, что эмуляторы закрывают последние "дыры".
Например можно определить по скорости чтения с TR-DOS и с ленты - обычно там срабатывают "трапы", которые позволяют значительно ускорить ход загрузки. Т.е. если сектор 256 байт положено считывать около 30000 тактов, а фактически они - секторы - прилетают чуть не махом. Однако эмуляторы часто имеют возможность отключения "трапов" тырдоса. Аналогично с лентой. Уже указывалась не раз работа с регистром R - на реале им манипулируя можно вроде как "стереть" часть программы. Но сам я так не пробовал, видел такой метод в ZX-Ревю. Ещё возможно некоторые недокументированные (внутренние) регистры Z80, которые в эмуле не отловлены (далеко ходить не надо, заглянуть в программирование и регистр флагов), но которые как то можно прочитать на реальном железе. Но: это будет работать до тех пор, пока программу, которая отличает эмулятор от реала, не сломают и не вытащат её код.
Практически считаю подобные попытки (отличение одного от другого) ненужным делом. Если это связано с обработкой экрана и т.п., то лучше сделать в программе чтото вроде сетапа, где спрашивается что используется - эмуль или реал.
Shadow Maker
19.06.2007, 22:47
Старые можно было отследить, по таймингу/командам некоторые криво эмулились. Сейчас все эмуляторы фактически 100% эмулируют оригинал, отследить нельзя.
Вопрос - зачем это нужно????
ps - Грив опередил... :)
ускорение ленты в Unreal тайминг учитывает.
В принципе, не нужно издеваться над пользователями эмуляторов.
насколько я помню, с последними доработками boo_boo его либа эмулит z80 на 100%.
ВГ-шка тоже вроде как 100% в анриле эмулится.
GriV, Уже указывалась не раз работа с регистром R - на реале им манипулируя можно вроде как "стереть" часть программы. Но сам я так не пробовал, видел такой метод в ZX-Ревю
я пробовал. работает.
но только двухполевиках и только на тех, где для регенерации верхней части ОЗУ используется стандартный механизм z80
но и это можно эмульнуть.
вопрос к автору темы - а это вообще зачем???
Adramelek
20.06.2007, 02:18
Была статья каком-то Deja Vu, то ли 0А, то ли ХХ. Там и про регистр R было.
Ответ всем отписавшим: спасибо, уяснил, хотя ответ был заподозрен с самого начала. Однако хотя бы некоторые все-таки можно отследить ;)
А вообще -- низачем, любопытно. Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)" Даже если фактически она на это и не отреагирует.
И ловушки у пользователей (не у мэйкеров) вкл. почти всегда -- по ним, наверное, лучше всего...
И интересная вещь с этим регистром регенерации, его тему в "Как написать игру..." обошли, но из другой литературы понятно, что служит он для регенерации памяти. Видимо, задача защит в том, чтобы не давать ему переполняться в интервал необходимости обновления нужного куска памяти. Но это, конечно, не по теме...
Alexandr Medvedev
20.06.2007, 11:10
Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)"И ещё версию эмулятора вывести. Это серьёзно, т.к. в старых версиях UnrealSpeccy было даже небольшое API для эмулируемых программ.
Можно было например узнать версию эмулятора или даже закрыть окно.
Про детект СТАРЫХ эмуляторов можно прочитать здесь: http://zxdn.narod.ru/coding/bd05emud.txt .
ВГ-шка тоже вроде как 100% в анриле эмулится.
че-т я сомневаюсь;)
что точно не эмулится - при обработке команды сброса регистр дорожки на реале обнуляется не сразу, а по битикам (что, кстати, забавно).
Добавлено через 1 минуту
API, возможно, верну - например, можно использовать для открытия урлов из прессы или для ведения логов при отладке прог
Shadow Maker
20.06.2007, 20:44
Сделай тогда его включение опциональным, а то мало ли чего Феде Сумкину в голову стукнет...
А еще лучше разработать единый стандарт на это API чтоб в других эмуляторах можно было поддерживать и не изобретать велосипеды со своим API и с адаптацией программ под него.
Alexandr Medvedev
21.06.2007, 11:07
А еще лучше разработать единый стандарт на это API чтоб в других эмуляторах можно было поддерживать и не изобретать велосипеды со своим API и с адаптацией программ под него.Насколько я знаю API есть только у старых версий UnrealSpeccy и Z80Stealth, но у последнего всего пара функций предназначеных для вытаскивания мызыки.
Интересно было бы стандартизировать этот API, тут все в руках авторов эмуляторов. Хочешь -- включаешь его в свои наработки, хочешь -- не поддерживаешь. На то и стандарт.
А вообще -- низачем, любопытно. Однако интересно было бы пустить программу в эмуле, а она пишет:"А я знаю, у тя UnReal.)" Даже если фактически она на это и не отреагирует.
А ты сразу выводи "у тебя Unreal" авось прогадаешь %)
Только сразу добавь какою нить возможность апдейта... чтобы всегда самая последняя версия эмуля выводилась %)
Типа "у тебя US 0.3.3.6" а если новая версия выйдет, чтобы писала "у тебя US 0.3.3.7". Можно ещё сделать сетап. В нём пользователь сам будет вводить версию своего эмулятора, и возможно название.
Тогда программа используя эти данные сможет точно указать из под чего она запускается :v2_lol: А если серьёзно то фигня всё это %) хотя пища для ума интересная конечно :-)
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot