Кажется, я не смотрел «Терминатор 2» в кинотеатре. Вероятно, я посмотрел его несколько лет спустя на LaserDisc, но эта сцена произвела довольно сильное впечатление. Похожую реакцию вызвали номеронабиратель из «Военных игр» и чёрный ящик из «Тихушников».

Номеронабиратель (War Dialer) из «Военных игр» (1983 год)

Чёрный ящик из «Тихушников» (1992 год)
Недавно я вспомнил эту сцену из «Терминатора 2», поэтому начал гуглить «лэптоп из Терминатора 2».
Оказалось, что это Atari Portfolio — первый в мире палмтоп-компьютер («наладонный» компьютер). Он был выпущен в июне 1989 года.

Компьютер имел монохромный ЖК-дисплей с разрешением 240×64 пикселей или 40 символов x 8 строк и работал от трёх батареек AA.
Потом я задумался, насколько трудно будет написать такую программу. Не программу, которая на самом деле взламывает PIN дебетовых карт (не думаю, что это на самом деле возможно при помощи последовательного кабеля и алюминиевой фольги, намотанной на карту), а программу, которая сможет симулировать вывод на экран палмтопа в этой сцене.
Для начала изучим нужные технические требования!
Если посмотреть видео внимательно, то видно, что первым делом отображается баннер программы.

Изображение достаточно чёткое, чтобы мы могли с лёгкостью скопировать баннер.
PPPPP IIIIIII N N P PP I NN N IDENTIFICATION P PP I N N N PPPPP I N N N PROGRAM P I N NN P IIIIIII N N Strike a key when ready ...
После этого Джон нажимает на Enter и на экране начинают прокручиваться числа. Если посмотреть спустя несколько кадров:

то мы увидим, что первая строка чисел выглядит так:
12345678901234567890123457890123456780
Можно было бы предположить, что это просто повторяющиеся четыре раза цифры с 1 по 0, но при внимательном изучении выясняется, что строка длиной всего 38 символов. В третьем повторе пропущена цифра 6, а в последнем — цифра 9.
Принцип уменьшения чисел тоже неочевиден, но похоже, что программа выводит примерно по 5 строк определённой длины, а затем уменьшает длину на 1, однако после следующего набора она уменьшает длину на 2, а затем попеременно использует уменьшение на 1 и 2, пока не определит PIN из четырёх цифр, который выводит в командную строку.
Ну, всё выглядит довольно просто. Я осваивал Python, поэтому написал скрипт на Python 3:
#!/usr/bin/env python3 import time import random delay = 0.025 print("PPPPP IIIIIII N N") time.sleep(delay) print("P PP I NN N IDENTIFICATION") time.sleep(delay) print("P PP I N N N") time.sleep(delay) print("PPPPP I N N N PROGRAM") time.sleep(delay) print("P I N NN") time.sleep(delay) print("P IIIIIII N N") time.sleep(delay) print('') input("Strike a key when ready ...") print("\n\n12345678901234567890123457890123456780") lines = 1 length = 38 decrease = 1 while True: for i in range(0, length): print(random.randint(0,9), end='') print('') time.sleep(delay) lines += 1 if (lines == 5): lines = 0 length -= decrease if (decrease == 1): decrease = 2 else: decrease = 1 if (length <= 4): break for i in range(0, 10): print("9003") print("\nPIN IDENTIFICATION NUMBER: 9003") print("\na>", end='')
Скрипт выполняется очень быстро, поэтому я добавил задержку между строками, чтобы скорость была такая же, как в отрывке из фильма. Я уверен, что код можно ещё оптимизировать, но если бы я рассматривал это как задачу написания плохого кода на техническом собеседовании, то считал бы, что справился с заданием.
При помощи поиска Google по картинкам я нашёл сайт, продающий пластмассовые панели для Atari Portfolio с нанесённой на экран красивой графикой:

Немного поэкспериментировав с termtosvg, в частности, с функцией SVG-шаблонов, я смог создать этот безумный SVG:

Несмотря на то, что я уже больше десяти лет поддерживаю html5zombo.com, до создания этого SVG я не ценил всех их возможностей. Они могут встраивать изображения? CSS? Javascript? Любой сайт, позволяющий пользователям загружать произвольные SVG и рендерить их, теперь получил моё величайшее уважение.
Пока я развлекался созданием своего небольшого автономного SVG, меня не покидала мысль о том, что мой код на Python на самом деле никогда бы не запустился на Atari Portfolio. В Atari Portfolio установлена «DIP Operating System 2.11» (DIP DOS), «по большей части совместимая» с MS-DOS.
В первых классах старшей школы, ещё до того, как мне начали платить за профессиональное написание ПО, я писал софт для BBS, моды и игры на смеси Turbo Pascal и скриптового языка PCBoard Programming Language, напоминавшего BASIC. Проведя минимальные исследования, я выяснил, что если смогу написать программу на Turbo Pascal и скомпилировать её, то она, вероятно, будет работать на Atari Portfolio.
Я не писал на Turbo Pascal почти 25 лет, но ведь такое не забывается?
Мне нравится форк DOSBox под названием DOSBox-X, поэтому я скачал и установил самую последнюю SDL2-версию для OS X. Затем я нашёл Borland Turbo Pascal 7.0, который помещу сюда, потому что искать его было настоящим мучением.
В этом ZIP вы найдёте четыре файла, которые являются образами гибких дисков. Если поместить их в папку, например, ~/tp, после запуска DOSBox-X и монтирования диска C вы сможете смонтировать их как диск A следующим образом:
imgmount a ~/tp/Disk01.img ~/tp/Disk02.img ~/tp/Disk03.img ~/tp/Disk04.img -floppy
после чего переключиться на диск A: и запустить INSTALL:
A: INSTALL




Время от времени придётся заменять гибкие диски, ведь это был 1992 год.

Это можно сделать, выбрав в DOSBox-X Drive -> A -> Swap disk. Выполнится переход с Disk 1 на Disk 2. Затем просто продолжайте повторять процесс и нажимать на «Ввод», пока не установятся все четыре диска.
После завершения установки она попросить настроить CONFIG.SYS и AUTOEXEC.BAT (не забывайте, это 1992 год).

Ни то, ни другое необязательно. DOSBox-X и так задаёт значение FILES выше необходимого, а добавление к путям просто позволяет запускать TURBO из любого места. После завершения можно выполнить следующую команду:
C: cd tp\bin TURBO


В детстве я провёл столько времени с этим IDE, что теперь испытал своего рода ностальгию. Но потом я начал портировать свой скрипт Python на Pascal и ностальгия быстро рассеялась. Хотел бы я сказать, что написал всё целиком в IDE, но в какой-то момент мне пришлось перейти в VSCode, а потом скопировать файл обратно в папку DOS. Люди, которые до сих пор работают в WordPerfect for DOS, я вас и понимаю, и не понимаю.
Вот скрипт, который я получил, потратив много времени на этот туториал по Pascal:
program pinid; uses crt; var i: byte; var pos: byte; var lines: byte; var length: byte; var decrease: byte; var delay_amount: integer; begin randomize; delay_amount := 25; clrscr; writeln('PPPPP IIIIIII N N'); delay(delay_amount); writeln('P PP I NN N IDENTIFICATION'); delay(delay_amount); writeln('P PP I N N N'); delay(delay_amount); writeln('PPPPP I N N N PROGRAM'); delay(delay_amount); writeln('P I N NN'); delay(delay_amount); writeln('P IIIIIII N N'); delay(delay_amount); writeln(''); write('Strike a key when ready ...'); readln; writeln(''); writeln(''); writeln('12345678901234567890123457890123456780'); pos := 0; lines := 1; length := 38; decrease := 1; while true do begin for i:= 1 to length do write(random(9)); writeln(''); delay(delay_amount); lines := lines + 1; if (lines = 5) then begin lines := 0; length := length - decrease; if (decrease = 1) then decrease := 2 else decrease := 1; end; if (length <= 4) then break; end; for i:= 1 to 10 do begin writeln('9003'); delay(delay_amount); end; writeln(''); writeln('PIN IDENTIFICATION NUMBER: 9003'); writeln(''); end.
Краткие объяснения:
- В Pascal есть объявления типов. Тип byte может быть числом в интервале 0-255.
- Файлы начинаются с
programи названия программы, вероятно потому, что все модули имеют общее пространство имён, но имя файла не важно. - Модули импортируются словом
uses. Модульcrtиспользуется для манипулирования экраном. - := это синтаксис присвоения значения переменной, чтобы можно было сравнивать при помощи = и отличать их друг от друга.
- Если блоки длиннее одной строки, их нужно оборачивать в
beginandend, а не в фигурные скобки или пробелы. - Если в начале скрипта не выполнить
randomize, то создаваемые случайные числа всегда будут одинаковыми, как и выходные строки. - WRITE выводит строку, WRITELN выводит строку с переводом строки. READLN получает ввод до получения перевода строки.
Работает ли код? Вот запущенная в DOSBox-X программа:

Чтобы не покупать лишних вещей, я проделал мысленное упражнение, представив, что нужно для дальнейшей реализации проекта:
- Купить на Ebay Atari Portfolio.
- Купить параллельный интерфейс Atari Portfolio и, вероятно, новую переднюю панель, потому что старая наверняка поцарапана.
- Найти в моей коробке с кабелями параллельный кабель.
- Найти PC или лэптоп с параллельным портом, установить на него MS-DOS v6.22.
- Скачать FT.COM и установить его на PC.
- Собрать EXE в Dosbox-X и передать его на Atari Portfolio.
- Украсть дебетовую карту.
- Обернуть часть карты алюминиевой фольгой, купить последовательный интерфейс Atari Portfolio, подключить кабель к карте.
- Запустить программу.
- «Лёгкие деньги!»
На правах рекламы
Закажи и сразу работай! Создание VDS любой конфигурации и с любой операционной системой в течение минуты. Максимальная конфигурация позволит оторваться на полную — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Эпичненько 🙂
ссылка на оригинал статьи https://habr.com/ru/company/vdsina/blog/536396/

Добавить комментарий