Просмотр полной версии : Есть ли способ программе определить на z80 она выполняется или на его эмуляторе?
Есть ли способ программе определить на z80 она выполняется или на его эмуляторе?
NEO SPECTRUMAN
12.01.2021, 04:27
можно определить по некоторым неточностям\ошибкам эмуляции
но никто не гарантирует что защита от эмулятора потом не сработает на каком нибудь железном кривом клоне с железным кривым клоном z80
а эмуляторы потом вскоре пофиксят
и будет несколько обидно :)
в придачу в процессе определения что мы на эмуляторе
можно повесить как кривой эмулятор так и кривое железо...
можно ловить на хитрых командах, но результаты различаются на реальных NMOS/CMOS
применительно к спеку можно устроить порчу ячеек памяти манипулируя с R (эмули на такое не способны)
А если дополнительно установить на плату чип, который невозможно сэмулировать? Есть идея майнить на спектрумах специальную криптовалюту, чтобы ее невозможно было майнить на эмулях. Иначе на мощных компах процесс пойдет в сотни раз быстрее и она обесценится. Ее же ( эту крипту) использовать в целях расчета между спектрумистами. Заодно будет и дополнительный стимул железом с z80 обзаводиться.
Evgeny Muchkin
12.01.2021, 13:14
можно ловить на хитрых командах, но результаты различаются на реальных NMOS/CMOS
применительно к спеку можно устроить порчу ячеек памяти манипулируя с R (эмули на такое не способны)
Где можно про такую порчу поподробнее почитать?
применительно к спеку можно устроить порчу ячеек памяти манипулируя с R (эмули на такое не способны)
память может быть статическая
Error404
12.01.2021, 13:39
как вариант - посмотреть как это делают для FUZIX:
https://github.com/EtchedPixels/FUZIX/blob/master/Applications/util/cpuinfo.c
если честно, разбираться самому - лень (ввиду сомнительной полезности данных знаний), но чототам следующее из LD A,R и подобного
- - - Добавлено - - -
Ахах, там по тексту "вот тут должны быть пустые строки и процедура строго раньше вызова because of bug in {лучшем компиляторе} SDCC" :)))
Есть, и достаточно нехитрый способ. Причём тип процессора вообще не важен (речь про детект работы ПО под эмулятором, а не на реале). Но свою "находку" пока не могу рассказать :) В своём ПО активно использую, достоверность 146% !
- - - Добавлено - - -
Есть идея майнить на спектрумах специальную криптовалюту, чтобы ее невозможно было майнить на эмулях. Иначе на мощных компах процесс пойдет в сотни раз быстрее и она обесценится.
Найти и обезвредить причинный участок кода никакая не проблема.
- - - Добавлено - - -
А если дополнительно установить на плату чип, который невозможно сэмулировать?
Всё равно финал всех заморочек будет в виде: "if <чего-то там> then <туда-то> else <досвидос>"
В отладчике эмулятора это ловится на раз-два, вместо "if" записывается "goto" и gotoво дело :)
финал всех заморочек будет в виде: "if <чего-то там> then <туда-то> else <досвидос>"
В отладчике эмулятора это ловится на раз-два, вместо "if" записывается "goto" и gotoво дело
программно это можно запутать - компиляция/байткод - вычислить будет очень сложно.
..................
Denn, вот простой пример - адвентюра для +3 http://www.tzxvault.org/Spectrum/Disks/Myth.zip
попробуй обойти запрос на рег.данные
вычислить будет очень сложно.
Сложно - не значит невозможно.
То, что зашифровал один, потенциально может быть расшифровано другим)
А если дополнительно установить на плату чип, который невозможно сэмулировать? Есть идея майнить на спектрумах специальную криптовалют
Вот прямо этим чипом и надо майнить, тогда сработает. И прошивку никому не давать.
Вот только это будет не криптовалюта, а ерунда. Создатель будет знать алгоритм и иметь теоретическую возможность сделать себе в 1000 раз более быстрый майнер, чем у остальных.
вычислить будет очень сложно
Вопрос востребованности конкретного ПО и степени заинтересованности хакеров.
попробуй обойти запрос на рег.данные
Мои интересы только в плоскости ПРК "Орион", причём сугубо реалов. Ради спора изучать другую платформу и среду отладки для неё не готов.
Запутывание кода сам практикую, но прекрасно понимаю, что все эти защиты - на тему разнообразия инструментария и порога терпения взломщика, ничего невозможного там нет в принципе.
NEO SPECTRUMAN
12.01.2021, 15:06
сделать себе в 1000 раз более быстрый майнер, чем у остальных.
а почему просто нельзя приравнять майнеров к фальшивомонетчикам
и не жечь их на костре?
и проблемы нет :)
Сравниться по производительности с видеокартами и процессорами PC на Спектруме невозможно. Следовательно нужен какой-то другой подход. Сбор каких-то характеристик реального железа и маловероятные события при его функционировании. Программа же должна вносить нечто, чтобы требуемое для регистрации новой монеты случалось все же с ненулевой вероятностью после N<100 часов работы "реального железа"(при этом если на компьютере не происходило нечто осмысленное и он был просто включен, время возрастало непропорционально) Центральный сервер же должен, проанализировав блок данных, присланных регистрирующим, выносить вердикт и подтверждать регистрацию.
Цели такой "валюты" не инвестиционные и не анонимайзерские, а иные:
1) усилить интерес к реальному железу на z80;
2) к работе на этом реальном железе( следовательно и в новом софте);
3) дать людям средство для расчетов в своей среде, минуя деньги( хотя, если сделать это товаром<-> обмен на обычные деньги или обычную крипту, то первые два пункта уже не работают в полной мере.
А алгоритм и подход должен быть всем понятен в общих чертах. Внешний чип, если и нужен, то только чтобы сильно не отвлекать все остальное от их функций. Симитировать столь полно реальное железо в эмуляторах должно быть весьма трудозатратно.
- - - Добавлено - - -
Мои интересы только в плоскости ПРК "Орион", причём сугубо реалов.
видимо и эмуляторы там пока не столь изощренные как на Спектрумах, но при замене проца на z80 появляются и точки соприкосновения. Правда не в курсе, есть ли такая замена на ПРК "Орион"
- - - Добавлено - - -
Вот прямо этим чипом и надо майнить, тогда сработает
уже объяснился. Чтобы только не грузить основную систему не свойственными ей до этого задачами. Потом это по желанию владельца, как необязательная опция.
SoftLight
12.01.2021, 16:15
Где можно про такую порчу поподробнее почитать?
На оригинальном спектруме с раздельными полями памяти можно легко затестить:
ORG 32768
DI
LD B,0
L1: XOR A
LD R,A
DEC HL
LD A,H
OR L
JR NZ,L1
DJNZ L1
EI
RET
Ждем минуты три. Проверяем верхние 32 Кб памяти, например, графику UDG. Заряд из ячеек будет утекать и байты превращаться в $ff. Только первые несколько байтов для каждого блока в 256 байт остануться в нуле, потому, что рефреш для них выполнялся во время выполнения цикла. А нижние 16 Кб будут штатно зарефрешены ULA. Опыт не будет работать на эмуляторе.
Сбор каких-то характеристик реального железа
самое простое, что приходит в голову, это фиксировать время между запросом на прерывание и выходом из него
самое простое, что приходит в голову, это фиксировать время между запросом на прерывание и выходом из него
А как фиксировать время? Нужна временнάя "точка опоры".
Spectramine
12.01.2021, 17:46
На оригинальном спектруме с раздельными полями памяти можно легко затестить:
Только на 48к, на 128х вся память рефрешится юлой.
Ну и нет проблем заэмулить это. Только временные и качественные параметры порчи содержимого ячеек снять нужно тестовой программой, чтобы точнее было. Эмуль ZEsarUX даже эмулит, опция такая есть, но, судя по моим тестам, вообще от фонаря. Портится одна ячейка в начале верхней памяти)
Вообще - нет проблем заэмулить любые такие фичи, главное знать о них, ну и тесты провести, чтобы эмулировать поточнее. Так что любая такая защита - до первого пытливого эмуляторщика.
CityAceE
12.01.2021, 17:55
Лет 20 назад тема определения эмуляторов была весьма популярна. Находили всё новые и новые особенности Z80, которые в мирной жизни были не нужны, а для отлова эмуляторов хорошо подходили. Проверки такого поведения некоторые программисты включали в свои игры и журналы, чтобы они могли запускаться только на реалах. Но со временем все эти штучки благополучно добавлялись в эмуляторы. Сейчас таких неописанных особенностей скорее всего и не осталось уже - всё давно копано-перекопано вдоль и поперёк. А даже если кто-то что-то подобное и найдёт, то, зная правильное поведение, добавить его в эмулятор большого труда не составит.
А как фиксировать время? Нужна временнάя "точка опоры"
внешняя схема может быть высокоточным таймером, где вывод прерывания zx заведен на старт или еще куда-то. Но просто четко выдерживать в секундах, минутах или еще чем-то наверное не совсем правильно(это надо моделировать). Пользователя можно попросить ввести датакод ряда его компонентов, обычно это номер недели в году и год.
На процессоре он точно стоит, на памяти вроде тоже. Для fpga наверное придется вводить ее датакод и еще у jtag микросхем вроде есть уникальный идентификатор чипа( но может я путаю, тогда придется просить их заводить регистр для идентификации изделия, чтобы быть участниками программы "zx012021-майнинга"). И идентификатор запрашивать у сервера регистрации.
Вероятность того, что на разных платах это совпадет довольно низкая. Эта инфа может быть передана программой в чип и на основе этой последовательности чип выберет свое локальное время. А редкое событие, которое будет равно 1 монете можно построить, пропуская n-ное кол-во прерываний, а далее зафиксировав время обработки очередного прерывания и соотнося его с текущим локальным временем этого чипа. Только формулу надо так построить, чтобы за 100 часов нажатия на клавиши клавиатуры, джойстика или кликанья мышью вероятность этого не была нулевой.
Этим мы зададим и масштаб валюты, поощряя реальную работу на реальном железе. Ну а курс с рублем может быть плавающим и отображаемым на этом же сервере( если все сделки этой крипты с рублем будут только на нем).
- - - Добавлено - - -
зная правильное поведение, добавить его в эмулятор большого труда не составит
но тогда придется моделировать случайные процессы. Ведь не все в z80 регламентировано с точностью до микросекунды( единицы микросекунды). На совсем уж худой конец и при подозрении на мошенничество, придется запрашивать фото платы( вернее определенных чипов, вводить датакоды и проверять, правда пока неясно как, прогоняя на большой скорости). Правда это ПО придется держать в большом-большом секрете тому, кто возьмется заниматься сервером регистрации. Интересы эмуляторщиков этой технологией ущемлены не будут. Так как это не защита программ, а приятный бонус( если конечно 1 монета не станет когда-нибудь стоить 10 000 руб :) )
сейчас можно более менее защитить что то только если приличная часть этого чего то расположена на территории разработчика например в его облаке
SoftLight
12.01.2021, 18:34
А даже если кто-то что-то подобное и найдёт, то, зная правильное поведение, добавить его в эмулятор большого труда не составит.
По Z80 и правда перекопано многое, но явно еще не все. До сих пор не знаю ни одного эмулятора, который проходил бы все тесты в zexall (https://ru.wikipedia.org/wiki/ZEXALL). Если нужно отличать выполнение на реале и на эмуляторе, нужно смотреть на эффекты флага CCF. Аналогично, это касается реализаций z80 на fpga. Как раз в конце минувшего лета в софтовом ядре T80 Miguel Angel Rodríguez Jódar нашел и исправил кривую реализацию инструкции IM 2: ED 7E, которая сидела в исходниках годами.
сейчас можно более менее защитить что то только если приличная часть этого чего то расположена на территории разработчика например в его облаке
Никому не возбраняется разрабатывать свою систему. Главное потом нести за нее ответственность.
Тут просто все носятся с "цифровым рублем", а я предположил, что скорее востребован "бартерный рубль", но чтобы не быть связанным c российским законом, надо назвать это как-то по другому, типа "zxbon" или как-то еще.
Spectramine
12.01.2021, 19:23
По Z80 и правда перекопано многое, но явно еще не все. До сих пор не знаю ни одного эмулятора, который проходил бы все тесты в zexall (https://ru.wikipedia.org/wiki/ZEXALL). Если нужно отличать выполнение на реале и на эмуляторе, нужно смотреть на эффекты флага CCF.
SpecEmu проходит все тесты zexall2, включая команды SCF/CCF. Запускать надо строго на 48к модели.
Никому не возбраняется разрабатывать свою систему. Главное потом нести за нее ответственность.
Тут просто все носятся с "цифровым рублем", а я предположил, что скорее востребован "бартерный рубль", но чтобы не быть связанным c российским законом, надо назвать это как-то по другому, типа "zxbon" или как-то еще.
ух сколько у тебя уже скопилось идей, скоро можно книгу будет выпустить "идеи до которых так и не дошли руки" ))
- - - Добавлено - - -
SpecEmu проходит все тесты zexall2, включая команды SCF/CCF. Запускать надо строго на 48к модели.
там вроде есть тесты с учетом недокументируемых флагов и без учета, но в принципе можно стопудово сказать что невозможно сделать гарантированное определение эмулятора спека если автор эмуля положит неочень большие силы чтобы это было невозможно
Spectramine
12.01.2021, 19:47
там вроде есть тесты с учетом недокументируемых флагов и без учета,
Ну zexall тестирует с учетом недокументированных флагов, zexdoc - без учета. zexall2 включает тесты влияния команд SCF/CCF на флаги F3 и F5, не так давно открытую и исследованную особенность Z80.
ух сколько у тебя уже скопилось идей
у Леонардо Да Винчи было еще больше(нереализованных). Я же их не патентую. Если кому-то интересно, делайте. А чтобы мне делать надо реальный Спектрум, я пока не выбрал какой. Внутрисхемный эмулятор( его надо купить или разработать). Анализатор и осциллоскоп современный( тоже надо приобретать). Человек с паяльником( желательно с авто, так как неудобно к нам ехать, и приезжающий иногда с посуточной оплатой, что мало кого сейчас устроит). Ну и многое другое. Планы есть, но реальный бизнес в другой сфере и пока не позволяющий отвлекать больше 50 тыс. рублей в год на иные цели.
Так что пока есть только обустроенный офис и ключи от него. А занимаемся пока поставками всякой всячины, но бизнес-партнер пока не против моих самых безумных идей. Баллон с гелием два года уже стоит( состава для резины так и не нашли, периодически покупаю шарики детям, очередной висит в воздухе и не падает на пол почти месяц, если провисит еще месяц - пойду выпытывать состав у продавцов. Хотя конечно фиг скажут, но хотя бы будем знать, что есть). Низколетающие дирижабли для посетителей болот( чтобы ягоды не на своем горбу с болота нести) и фермерского хозяйства это пока самый крупный мой замысел.
Teensy и micro:bit можем конечно поставлять, но есть раскрученная Амперка. Пока вот ковыряюсь с их софтом, так как партнер вообще далеко-далеко от всех этих технологий. Была бы техподдержка и софт можно бы было заняться.
До сих пор не знаю ни одного эмулятора, который проходил бы все тесты в zexall (https://ru.wikipedia.org/wiki/ZEXALL).
ZXMAK2 очень давно проходит все тесты zexall, помоему еще со времен, когда эмуляция регистра MW была добавлена
SoftLight
27.01.2021, 13:37
ZXMAK2 очень давно проходит все тесты zexall (https://github.com/next-dev/nx/blob/master/etc/zexall.tap), помоему еще со времен, когда эмуляция регистра MW была добавлена
Скачал сорцы, собрал, затестил, и правда все тесты ok! Только выполняется даже на Maximum Speed в несколько раз дольше чем в Unreal, но это как раз норм.
Можно попробовать изменять данные или программный код, которые уже зашли на конвейер хоста. На Z80 такое будет работать, на эмуляторе нет.
SoftLight
27.01.2021, 18:21
На самом деле есть более злой тест z80full (https://www.dropbox.com/s/33he0chzu6v7xym/z80test-1.0.zip?dl=0). Вот его только JSpeccy и SpecEmu без ошибок выполняет. Была раньше на форуме тема, посвященная тестам эмуляторов.
Вот я для примера запустил его на последнем Unreal и ZXMAK2 и видим, что примерно одинаковый печальный результат, причем, на разных тестах разное: где-то фейлится Unreal а где-то ZXMAK2:
https://i.imgur.com/mXukaKM.jpg
А у Spectaculator всего 2, вот тебе и "коммерческая поделка".
Можно попробовать изменять данные или программный код, которые уже зашли на конвейер хоста. На Z80 такое будет работать, на эмуляторе нет.
Вы тогда детали никому пожалуйста не раскрывайте. А вдруг это действительно единственный способ различить живой z80 проц и эмулятор.
Вы тогда детали никому пожалуйста не раскрывайте. Хорошо, но птичка уже вылетела...
Black Cat / Era CG
27.01.2021, 23:31
А реальный проц на Эве проходит не все)))
реальный проц на Эве проходит не все
там для некоторых команд важно содержимое ПЗУ (100раз уже рассказывали что нужна прошивка 1982)
NEO SPECTRUMAN
27.01.2021, 23:39
А реальный проц на Эве проходит не все)))
ну это тест кривой
не знает про цмосные процы
или жестко завязан на 48-х времянках...
Вот я для примера запустил его на последнем Unreal и ZXMAK2 и видим, что примерно одинаковый печальный результат, причем, на разных тестах разное: где-то фейлится Unreal а где-то ZXMAK2:
в ZXMAK2 опкоды IN*/OUT* фейлятся потому что особенность гальванической связи выхода магнитофонного порта со входом не эмулируется. Но это фейл не эмуляции Z80, а эмуляции магнитофонного входа. Просто руки так и не дошли прикрутить полноценную эмуляцию обратной связи для магнитофонного порта. На разных моделях поведение порта немного отличается, поэтому нужно разбираться.
По поводу SCF/ССF подозреваю, что с такими-же кодами будет фейлится и на реальном Z80, т.е. это видимо фейл самого теста.
Помню были старые тесты в которых неправильный CRC был задан для SCF/CCF и они фейлились на реальном Z80, тест делали на эмуляторе и проверить на риале у автора возможности не было. В этом тесте видимо просто скопировали без исправлений CRC.
Если тест SCF/CCF на реальном Z80 проходит, тогда действительно ошибка эмуляции, это можно исправить. Но подозреваю дело в том, что тест ошибочно показывает фейл для корректного результата.
И да - этот тест чувствителен к содержимому ПЗУ, поэтому прошивка ПЗУ должна байт в байт соответствовать той, под которую в тесте контрольные суммы забиты.
- - - Добавлено - - -
Вы тогда детали никому пожалуйста не раскрывайте. А вдруг это действительно единственный способ различить живой z80 проц и эмулятор.
нету способа, все можно эмулировать :)
В некоторых эмуляторах при пошаговой отладке кода часто происходит сбой числа тактов на кадр, например в spectaculator. Это впринципе можно отлавливать, правда работать такая защита будет только если попытаться пошагово отлаживать код. ZXMAK2 этим не проведешь, он корректно отрабатывает даже если в отладчике при пошаговой отладке на лету установить любой номер такта.
Визуальные эффекты с точностью до пиксела для модели Pentagon эмулировать проблематично. Помоему пока ни один эмулятор точно Pentagon не эмулирует. ZXMAK2 наиболее близко эмулирует, но особенность смены последовательности выборки ATTR/SCRN не эмулируется. Эта особенность помоему нигде не эмулируется. Но разница будет видна только визуально, программно разницу не заметить.
Spectramine
28.01.2021, 13:04
По поводу SCF/ССF подозреваю, что с такими-же кодами будет фейлится и на реальном Z80, т.е. это видимо фейл самого теста.
Помню были старые тесты в которых неправильный CRC был задан для SCF/CCF и они фейлились на реальном Z80, тест делали на эмуляторе и проверить на риале у автора возможности не было. В этом тесте видимо просто скопировали без исправлений CRC.
Если тест SCF/CCF на реальном Z80 проходит, тогда действительно ошибка эмуляции, это можно исправить. Но подозреваю дело в том, что тест ошибочно показывает фейл для корректного результата.
Нет, просто ZXMAK не эмулирует правильное поведение флагов F3 и F5 для команд SCF/CCF, эту особенность открыли и изучили не так давно. Где-то на вос-форуме была тема по этому поводу.
- - - Добавлено - - -
Кстати, есть тест zexall2, и на нем ZXMAK точно также фейлит проверку команд SCF/CCF.
нету способа, все можно эмулировать
понятно, если раскрыть детали алгоритма. Если проц на Alter-а там есть особенности, которые эмулятороваятелям могут быть неизвестны. То есть прочитать о них можно, но если не раскрыть какие именно будут использованы в алгоритме. Там и допкоманды легко подсунуть. Но тогда пострадают держатели обычных z80. Если вводить в программу защиты датакоды процессора и памяти, чтобы он вычислял по ним временной интервал каких-то прерываний или получал дополнительно некие данные от поставщика программы защиты
Black Cat / Era CG
28.01.2021, 17:09
Эва на фирменном 48 пзу. Запорото 7 из 152. И да. Это не тест cpu, если он критичен к пзу.
https://pic.maxiol.com/images2/1611842886.2989615885.screenshot17testz8.png
Эва на фирменном 48 пзу. Запорото 7 из 152. И да. Это не тест cpu, если он критичен к пзу.
для проверки команд чтения из порта выбран порт #FE, он (практически на всех) наших клонах реализован не совсем корректно.
кстати если на `фирме` во время теста именно этих команд нажать любую клавишу - будет сбой.
что покажет PRINT IN 254 ?
........
наберётся с десяток игрушек в которых (из-за неправильно выставленного бита) не работает опрос клавы.
например (скорее всего) на Evo в этой игре https://vtrd.in/gamez/s/SMU128_.ZIP нельзя будет выбрать пункты в меню.
это именно фирменная версия, в других опрос клавы уже исправлен
Spectramine
28.01.2021, 17:36
Это не тест cpu, если он критичен к пзу.
Он не только к ПЗУ (он его использует как данные), он ещё и к аппаратным особенностям компа критичен. Ну логично, если он проверяет команды IN/OUT, он будет критичен к аппаратным особенностям.
Кстати, есть тест zexall2, и на нем ZXMAK точно также фейлит проверку команд SCF/CCF.
Может ошибаюсь, но на реальном железе он вроде должен фейлить проверку с точно такими-же CRC. Может там от типа процессора зависит?
Сейчас уже нет ссылки на оригинальную страницу с тестом, много лет прошло, но там было указано что тест писался на эмуляторе и когда потом был запущен другим чуваком на реальном железе оказалось, что он фейлится на SCF/CCF. При этом прогон на реальном Z80 должен давал такие CRC:
SCF: 9e4dbc94
CCF: 363b6874
У меня проверить возможности нет - нет железа. Точнее сам процессор может еще где-то лежит, если не потерялся. Есть мысли попробовать подключить его к отладочному модулю STM32 и подебажить его работу. Но не уверен что Z80 понравятся уровни 3.2V логики. Но в любом случае прогнать тест будет проблематично, т.к. прийдется эмулировать всю остальную обвязку.
Black Cat / Era CG
31.01.2021, 13:11
Может ошибаюсь, но на реальном железе он вроде должен фейлить проверку с точно такими-же CRC. Может там от типа процессора зависит?
Может, на моей Эве только 7 штук фейлит, картинка выше. Но проц не виноват, как мне объяснили :)
Barmaley_m
31.01.2021, 15:40
Всякие тесты магнитофонного входа - они и на многих реалах (клонах) не пройдут. То же касается и порчи памяти от отсутствия регенерации. Подавляющее большинство советских клонов 48К делалось на одной линейке 565РУ5. Соответственно, регенерация шла от видеоконтроллера, а не от процессора, и остановить её программно невозможно.
А ограничивать работоспособность программы только на фирменных реалах - какой смысл?
Bedazzle
01.02.2021, 13:15
у Леонардо Да Винчи было еще больше(нереализованных).
У Леонардо кроме идей немалая пачка вполне себе завершённых проектов.
- - - Добавлено - - -
понятно, если раскрыть детали алгоритма.
Security through obscurity - очень плохой подход при защите чего-либо.
Пытливая душа с достаточным количеством свободного времени расковыряет что угодно.
Амигу 68000 ловят элементарно
*******************************************
*** EMULATOR CHECK ***
*******************************************
; checks if running on an emulator like WinUAE and displays a
; warning requester if an emulator is detected
CheckUAE
lea .mod(pc),a0
move.w #$7001,(a0)
.mod moveq #0,d0
beq.b .amiga
; emulator detected, display warning requester
lea .txt(pc),a0
lea .but(pc),a1
lea .ttl(pc),a2
bsr Requester
rts
.amiga moveq #1,d0
rts
.ttl dc.b "Attention!",0
.txt dc.b "Emulator detected! Proceed at your own risk!",0
.but dc.b "Understood|QUIT",0
CNOP 0,4
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot