Симулируем сцену подбора PIN из «Терминатора 2»

Автор оригинала: Bertrand Fan
  • Перевод
В начале фильма «Терминатор 2: Судный день» Джон Коннор использует лэптоп для подбора PIN украденной дебетовой карты.


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


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


Чёрный ящик из «Тихушников» (1992 год)

Недавно я вспомнил эту сцену из «Терминатора 2», поэтому начал гуглить «лэптоп из Терминатора 2».

Оказалось, что это Atari Portfolio — первый в мире палмтоп-компьютер («наладонный» компьютер). Он был выпущен в июне 1989 года.


Компьютер имел монохромный ЖК-дисплей с разрешением 240x64 пикселей или 40 символов x 8 строк и работал от трёх батареек AA.

Потом я задумался, насколько трудно будет написать такую программу. Не программу, которая на самом деле взламывает PIN дебетовых карт (не думаю, что это на самом деле возможно при помощи последовательного кабеля и алюминиевой фольги, намотанной на карту), а программу, которая сможет симулировать вывод на экран палмтопа в этой сцене.

Для начала изучим нужные технические требования!

Если посмотреть видео внимательно, то видно, что первым делом отображается баннер программы.

banner

Изображение достаточно чёткое, чтобы мы могли с лёгкостью скопировать баннер.

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

turbo pascal install

turbo pascal install

turbo pascal install

turbo pascal install

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

turbo pascal install

Это можно сделать, выбрав в 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 используется для манипулирования экраном.
  • := это синтаксис присвоения значения переменной, чтобы можно было сравнивать при помощи = и отличать их друг от друга.
  • Если блоки длиннее одной строки, их нужно оборачивать в begin and end, а не в фигурные скобки или пробелы.
  • Если в начале скрипта не выполнить randomize, то создаваемые случайные числа всегда будут одинаковыми, как и выходные строки.
  • WRITE выводит строку, WRITELN выводит строку с переводом строки. READLN получает ввод до получения перевода строки.

Работает ли код? Вот запущенная в DOSBox-X программа:


Чтобы не покупать лишних вещей, я проделал мысленное упражнение, представив, что нужно для дальнейшей реализации проекта:

  1. Купить на Ebay Atari Portfolio.
  2. Купить параллельный интерфейс Atari Portfolio и, вероятно, новую переднюю панель, потому что старая наверняка поцарапана.
  3. Найти в моей коробке с кабелями параллельный кабель.
  4. Найти PC или лэптоп с параллельным портом, установить на него MS-DOS v6.22.
  5. Скачать FT.COM и установить его на PC.
  6. Собрать EXE в Dosbox-X и передать его на Atari Portfolio.
  7. Украсть дебетовую карту.
  8. Обернуть часть карты алюминиевой фольгой, купить последовательный интерфейс Atari Portfolio, подключить кабель к карте.
  9. Запустить программу.
  10. «Лёгкие деньги!»



На правах рекламы


Закажи и сразу работай! Создание VDS любой конфигурации и с любой операционной системой в течение минуты. Максимальная конфигурация позволит оторваться на полную — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe. Эпичненько :)

VDSina.ru — хостинг серверов
Серверы в Москве и Амстердаме

Комментарии 31

    +3
    Когда я писал свой первый кодовый замок для атмеги8 на ассемблере, делал в качестве защиты от брутфорса:
    1. Пауза после подачи питания
    2. Пауза после 3 неправильных попыток ввода.
    Поэтому меня эта сцена всегда напрягала в плане реалистичности. Ну, неужели создатели систем защиты и контроля доступа что в банке, что в скайнет тупее меня и не сделали такую защиту?
      +1
      Смогли, карта как правило блокируется после N неправильных попыток.
        +1
        «Это одноразовый телефон, его не отследить!» (с)
          0
          раньше банкоматы были без прямого подключения? а в таком случае сделать блокировку заведомо зловредной «карты» вряд ли возможно
          0
          Рельсы сценариста) Однако мы ведь ничего не знаем о таком тонком техпроцессе, может там как-то все эти защиты обходились?
            +6

            Где-то на Хабре была статья, что на заре пластиковых карт там был разброд и шатание в плане безопасности. И пин на некоторых картах хранился в открытом виде и чипов не было. Так что, взлом, проделанный Коннором, вполне правдоподобен.

              +1
              Сюжет выглядит иначе.
              вставляется некая карта, которая ВНУТРИ аппарата подбирает пин-код. (как именно не спрашивайте)
              а уже потом, найденный пинкод вводится с клавиатуры.
                0
                Вставляется не некая, а именно что краденная, Коннор на этом акцентировал внимание.
                +3
                Пин проверяется не банкоматом, а авторизующей системой в банке-эмитенте (в большинстве случаев, по факту оффлайн проверка возможна для чиповых карт при соблюдении ряда условий, но в фильме была просто магнитная полоса). При этом часть данных, необходимых для проверки, хранится только в банке. Результат — подобрать пин в банкомате(оффлайн) нельзя, недостаточно данных. Банк-эмитент же считает количество неуспешных попыток и после какого-то их числа (обычно от трех до шести) дает банкомату команду не возвращать карту. Она останется внутри банкомата до следующей инкассации.
                  0
                  Ну многие наверное помнят посимвольный подбор пароля к ресурсам windows 9x :)) Из-за чего даже на диалапе взлом был достаточно быстрым. Так что да иногда бывают и тупые.
                    0

                    Именно для этого и нужен данный программно-аппаратный комплекс, чтобы Джон ввёл пин-код один раз.

                    +1

                    Может хотели показать что то типо последовательности де Брёйна? Но не получилось...

                      +2

                      var не нужен перед каждой объявляемой переменной, вместо writeln(''); можно писать просто written;

                        +1
                        О, Atari Protfolio… До сих пор мечтаю раздобыть эту машинку, даже больше чем Псион. Теплый ламповый Дос в наладоннике, мммм…
                        Кстати, никто не знает, есть ли какие-либо одноплатники размером с кредитку или чуть больше, x86 совместимые, что бы можно было Dos запустить?
                          0

                          В подобных габаритах были защищённые Itronix ix750 и GD2000. Чуть потолще и потяжелее, но зато почти современные машинки. Да, мелких ноутов полно, но эти и по цвету похожи, и по краям выемки под палец такие же.

                          0

                          Atari Portfolio.
                          Я даже его в руках держал, но не впечатлило. Там был некий MSDOS, некоторый редактор, электронная таблица, ещё какая-то хрень и микрософтовский Basic (который с нумерованием строк)

                            0
                            Было бы хорошо, если бы такие штуки как Atari Portfolio (или скажем Samsung Q1 Ultra, мне больше нравится его концепция клавиатуры для ультрапортативного использования, т.е. «на ходу») производили на современном железе и современных ОС.
                            Но вот нет.
                            Я не так давно озадачился гораздо более простой штукой: смартфоном с торцевой камерой (т.е. с дополнительной камерой, расположенной на переднем торце, как ИК-светодиод у пульта ДУ). И даже этого нет.
                            Фантазия у разработчиков железа совсем иссякла.
                              +1
                              В реальных сценариях использования (а не в фантазиях) что-либо мельче 12" экрана уже не удобно. Поднимал как то упавший кластер vmWare c 10-дюймового планшета, ничего другого под руками не было, было так себе, еще не садо-мазо, но уже близко. На телефоне же вообще RDP-сессия на рабочий комп это анекдот и годится только показать «смотрите как я умею».
                                0
                                Добавьте нормальную клавиатуру и даже 4-5" вполне себе можно использовать.
                                  0
                                  А, ну ну. Одно дело через ssh пару команд набрать, другое — когда окно интерфейса на таком экране целиком не влезает.
                                    –1
                                    Э? У кучи 5" телефонов экран FullHD или ещё круче, как там в RDP что-то не влезет — я хз, 2012 сервер я вполне себе настраивал через IP-KVM, который 1280х1024 только умел, и всё влезало. Плюс сейчас я спокойно по RDP «админю» с Unihertz Titan, а там вообще экран квадратный и 1400х1400. Вот с ssh как раз проблем больше и вылезает — не всё удобно и клиент не очень дружит со встроенной клавиатурой в плане русского языка.
                                      +2
                                      Я как то не фанат с лупой разглядывать
                                      что-то типа этого
                                      image
                                  0
                                  Я не против чтобы было и 12 дюймов. Такой планшет с «альбомным» захватом и небольшой клавиатурой по бокам экрана, для набора преимущественно большими пальцами рук. Но вполне можно и меньше чем 12. Если ОС специальная (тот же Андроид), то и софт для такой железки специальный. Полноценную винду или линукс никто запускать там не собирается.
                                  Реальные сценарии использования для меня — это главным образом чтение и редактирование текстов.
                                    0

                                    Вообще что понимать под реальными условиями. У меня есть нетбук с экраном 9.7" и на нём я много и играл и работал. Экрану не хватало разрешения (600 по высоте маловато), а размер вполне ничего.

                                    +1
                                    Asus ZenFone 6 или 7 ближе всего — блок камер поворотный, от «строго назад» до «для селфи», с возможностью снимать в любом промежуточном варианте.
                                      +2
                                      Что-то вроде такого?
                                      GPD Micro PC-Mini Industry Laptop
                                      image

                                      Микроноутбуков довольно много. В том, что на картинке, даже есть COM и Ethernet полноценные.
                                        0
                                        У меня есть portfolio. Клава там даже менее удобная, чем экранная телефона.
                                        +2
                                        О, теперь я знаю что я сегодня буду смотреть)))
                                          +1
                                          А если действительно взять свою карту, поставить на ней пин 9003 и идея для пранка готова:)
                                            0
                                            В том далеком году возможно подобные вещи и работали, там и банкомат возможно был автономным без связи с банком и шифрования не было как класса.
                                            В 2015 заключал договор с банком на эквайринг, в том договоре половина текста была про работу с пластиковыми картами без терминала и подробно описывался порядок снятия отпечатка номера карты на лист бумаги выдавливанием (даже термин какой-то есть и устройство описывалось).
                                            За смотрел на LaserDisc — переводчик не смог синонима подобрать?
                                              0
                                              Как давно я не видел экран Турбо-паскаля! Ностальгия…
                                              И основные сочетания клавиш редактора, наверное, не забуду до глубокой старости )
                                              Может вордстаровский редактор сейчас и покажется чем-то неудобным, но я хорошо помню как скучал по нему, пытаясь освоить vi

                                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                              Самое читаемое