Top.Mail.Ru
? ?



Image

Не собирался смотреть этот фильм, но надысь Баженов выложил на него обзор, и на одном из кадров мелькнул фрагмент, по очертаниям очень похожий на ассемблерный код. Пришлось ознакомиться.

Весь фильм, то тут, то там показывают разного рода мониторы, но ничего конкретного на них не разобрать. Жуткое мыло.

Но в конце, в ключевой сцене таки случилось интересное.

Сцена запуска мандулы "супер-оружия":
Image

Внизу чётко виден ассемблерный код. Это фрагмент из учебника по программированию. Рисуем на экране девять звёздочек в ряд.

   mov	edx,9    ;message length
   mov	ecx,s2   ;message to write
   mov	ebx,1    ;file descriptor (stdout)
   mov	eax,4    ;system call number (sys_write)
   int	0x80     ;call kernel

   mov	eax,1    ;system call number (sys_exit)
   int	0x80     ;call kernel

section	.data
msg db 'Displaying 9 stars',0xa ;a message
len equ $ - msg  ;length of message
s2 times 9 db '*'

После такой годной зацепки становится возможным разобрать мыльные фрагменты.

Сцена с таймером самоуничтожения:
Image

Фрагмент с кодом очень размытый:
Image

но, благодаря подсказке в предыдущей сцене, его получается идентифицировать. Слева код из того же учебника, вычисляет и выводит на экран сумму чисел 3 и 4. А справа код чуть сложнее: вычисляется сумма чисел 12345 и 23456 в двоично-десятичном представлении.

section	.text
   global _start    ;must be declared for using gcc

_start:             ;tell linker entry point
   mov	eax,'3'
   sub     eax, '0'

   mov 	ebx, '4'
   sub     ebx, '0'
   add 	eax, ebx
   add	eax, '0'

   mov 	[sum], eax
   mov	ecx,msg
   mov	edx, len
   mov	ebx,1	;file descriptor (stdout)
   mov	eax,4	;system call number (sys_write)
   int	0x80	;call kernel

   mov	ecx,sum
   mov	edx, 1
   mov	ebx,1	;file descriptor (stdout)
   mov	eax,4	;system call number (sys_write)
   int	0x80	;call kernel

   mov	eax,1	;system call number (sys_exit)
   int	0x80	;call kernel

section .data
   msg db "The sum is:", 0xA,0xD
   len equ $ - msg
   segment .bss
   sum resb 1
section	.text
   global _start        ;must be declared for using gcc

_start:	                ;tell linker entry point

   mov     esi, 4       ;pointing to the rightmost digit
   mov     ecx, 5       ;num of digits
   clc
add_loop:
   mov 	al, [num1 + esi]
   adc 	al, [num2 + esi]
   aaa
   pushf
   or 	al, 30h
   popf

   mov	[sum + esi], al
   dec	esi
   loop	add_loop

   mov	edx,len	        ;message length
   mov	ecx,msg	        ;message to write
   mov	ebx,1	        ;file descriptor (stdout)
   mov	eax,4	        ;system call number (sys_write)
   int	0x80	        ;call kernel

   mov	edx,5	        ;message length
   mov	ecx,sum	        ;message to write
   mov	ebx,1	        ;file descriptor (stdout)
   mov	eax,4	        ;system call number (sys_write)
   int	0x80	        ;call kernel

   mov	eax,1	        ;system call number (sys_exit)
   int	0x80	        ;call kernel

section	.data
msg db 'The Sum is:',0xa
len equ $ - msg
num1 db '12345'
num2 db '23456'
sum db '     '

Теперь можно попробовать по смутным очертаниям догадаться, что там было в середине фильма, в сцене, где герои пытались деактивировать своё “супер-оружие”:
Image

Тут сложнее! Так просто не деактивировать! Слева вычисляем факториал числа 3. А в правом фрагменте - пример модификации строк в памяти на примере замены имени: “Zara” -> “Nuha”. Программа выводит “Zara Ali Nuha Ali”.
Да, авторы учебника - индусы.

section	.text
   global _start         ;must be declared for using gcc

_start:                  ;tell linker entry point

   mov bx, 3             ;for calculating factorial 3
   call  proc_fact
   add   ax, 30h
   mov  [fact], ax

   mov	  edx,len        ;message length
   mov	  ecx,msg        ;message to write
   mov	  ebx,1          ;file descriptor (stdout)
   mov	  eax,4          ;system call number (sys_write)
   int	  0x80           ;call kernel

   mov   edx,1            ;message length
   mov	  ecx,fact       ;message to write
   mov	  ebx,1          ;file descriptor (stdout)
   mov	  eax,4          ;system call number (sys_write)
   int	  0x80           ;call kernel

   mov	  eax,1          ;system call number (sys_exit)
   int	  0x80           ;call kernel

proc_fact:
   cmp   bl, 1
   jg    do_calculation
   mov   ax, 1
   ret

do_calculation:
   dec   bl
   call  proc_fact
   inc   bl
   mul   bl        ;ax = al * bl
   ret

section	.data
msg db 'Factorial 3 is:',0xa
len equ $ - msg

section .bss
fact resb 1
section	.text
   global _start     ;must be declared for linker (ld)
_start:             ;tell linker entry point

   ;writing the name 'Zara Ali'
   mov	edx,9       ;message length
   mov	ecx, name   ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel

   mov	[name],  dword 'Nuha'    ; Changed the name to Nuha Ali

   ;writing the name 'Nuha Ali'
   mov	edx,8       ;message length
   mov	ecx,name    ;message to write
   mov	ebx,1       ;file descriptor (stdout)
   mov	eax,4       ;system call number (sys_write)
   int	0x80        ;call kernel

   mov	eax,1       ;system call number (sys_exit)
   int	0x80        ;call kernel

section	.data
name db 'Zara Ali '

А в сцене стрельбы из этого оружия теперь становится понятно, что вычисления нужны те же, что и для самоуничтожения: посчитать сумму 3 и 4. И сложить 12345 с 23456.
Image


Код в фильмах: Кракен 2025
read more at deadem // Dead Emotion




Image

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

В самом начале сцена, где Тони тюнит двигатель:

Image

Слева внизу нечёткие, но явные фрагменты x86-ассемблера:

Image

Это фрагмент программы, реализующей протокол последовательной передачи данных. Тони через компьютер настраивает режимы работы двигателя?

        SEND_CHAR SLIP_END
        jcxz @@bailout
@@nextchar:
        lodsb
        cmp al,SLIP_END
        jne @@check_esc
        SEND_CHAR SLIP_ESC
        mov al,SLIP_ESC_END
        jmp @@ordinary

Во второй половине фильма тоже есть фрагмент с ассемблером.

Image

Когда Пеппер листает документы в секретной папке “SECTOR_16”, слева на некоторых изображениях костюма есть панель ASSEMBLER DECODING, где действительно отображён листинг ассемблерных команд. На первой картинке вместо операндов написано “N/A

Image

а затем операнды проявляются по мере отображения надписи “File Access...

Image

В итоге это какой-то RISC, но последовательность команд бестолковая. Тупой рандом или отсылка к чему-то?

Image

LW    Z1,W2(Z0)
LW    Z2,W3(Z0)
NOP
NOP
ADD   &3,&1,&2
SUB   #4,Q1,Q2
SLL   &5,*1,1&
SRL   -06,+2,16
CMPL  -7,+3
OR    -11,+5,=2
SW    ++1,W4(=0)
ADDI  [8,W1]
NOP
NOP
LW    &9,4(&8)
ADDI  &10,8(&8)
NOP
NOP
SW    Q3,0(Q10)

WORD  0x11111111
WORD  0x22222222
WORD  0x33333333
WORD  0x44444444

Но самое интересное происходит в начале фильма, между этими сценами. Когда Тони попадает в плен, он собирает первый прототип робота. В момент первого запуска на экране чётко виден код на C, который и на самом деле является кодом для управления роботами. Вот только роботы эти небольшие. Это код для управления деталями конструкторов LEGO Technic (Mindstorms).

Image

На скриншоте - фрагмент функции image_dl, которая, собственно, и заливает программы в Лего-контроллер роботов.

Image

А тут, в числах, которые отображаются слева, закодирована небольшая прошивка лего-робота с текстом “Do you byte, when I knock?” - это такой интересный способ проверить работоспособность интерфейса: увидев эту команду, контроллер Лего должен ответить “Just a bit off the block!”.

Костюм “Железного человека” работает на LEGO. Забавно.


Код в фильмах: Железный человек (Iron Man) 2008
read more at deadem // Dead Emotion




Image

Сомнительного качества фильм, по духу напоминающий “Куб”. Код мелькает всего в двух сценах.

В самом начале Тим пишет код. Он же работает программистом игр, поэтому, наверное, какое-то отношение к играм должно быть?

Image

Но нет. Это часть ядра Линукса. Файл groups.c: код для поддержки групп в правах доступа. Не удивлюсь, если в этом фрагменте отсылка к hackertyper.com - сайту, где каждый может почувствовать себя “элитным хакером”. Нужно просто изо всех сил долбить по клавиатуре и на экране будет появляться код из того самого groups.c. Это не первый фильм, где я его встречаю.

Та же сцена, следующий кадр: онлайн-конференция с коллегами. Обсуждение рабочих процессов. А на фоне два фрагмента кода.

Image

Маленький кусочек сверху:

Image

Это цитата со StackOverflow. Ответ на вопрос “Как написать класс на языке C”. На экране учебный пример организации классов на языке C (это нетривиально, т.к. в этом языке нет встроенного механизма работы с классами).

/// Object.h
typedef struct Object {
    uuid_t uuid;
} Object;

int Object_init(Object *self);
uuid_t Object_get_uuid(Object *self);
int Object_clean(Object *self);

/// Person.h
typedef struct Person {
    Object obj;
    char *name;
} Person;

Слева внизу занятный франкенштейн:

Image

Командная строка Windows, которая имитирует работу в Linux: C:\root\system\. Далее фрагмент команды подключения к сети, правда, с ошибкой: пропущен атрибут name. А затем фрагмент профиля для подключения к Wi-Fi, только почему-то замаскированный под локальное подключение: WLANProfile заменён на LAN-Profile. И в версии xml какая-то самодеятельность: 3,1 вместо 1.0.

Этот фрагмент кто-то перепечатывал вручную? В слове keyType пропущена p. И адрес неймспейса вместо microsoft.com указывает на aeseacont.biz. Домен ничейный, можно зарегистрировать.

Возможно, что этот фрагмент кода тоже взяли со StackOverflow: “Как подключиться к Wi-Fi из командной строки”. Очень уж сильно он повторяет киношный фрагмент.

Вторая сцена с кодом ближе к концу фильма. Тим опять печатает на клавиатуре:

Image

По центру, в редакторе, появляются по одному символы. Ничего не напоминает?

Image

Да. Это в точности тот же самый кусочек кода, который был показан в начале фильма. Из руководства о написании классов на языке C. Отличается только передвинутой вверх пустой строкой. Зачем Тиму этот код писать ещё раз, интересно?

Слева экрана - фрагмент из ядра Линукса, файл timer.h. Вероятно, он набран вручную, т.к. в нём есть опечатки. Причём, версия файла не свежая, а редакция 2016-2017 года.

Image

  • strings вместо sticks
  • пропущено подчёркивание и появилась лишняя скобочка в void *private_data;
  • пропущена u, подчёркивание, точка с запятой в строке struct snd_timer_hardware hw;
  • задвоилась n и подчёркивание вместо пробела spinlock_t lock;
  • подчёркивание вместо пробела struct list_head open_list_head;
  • struct tasklist_struct вместо struct tasklet_struct. Интересно, что точно такая же опечатка была в первом издании книги “Linux Kernel Development”. Отсылка к этому факту или просто аналогичная опечатка?

Код в фильмах: Кирпич (Brick) 2025
read more at deadem // Dead Emotion

МГУ - школе. Сисечное




Image

Готовился ребёнок поступать в ВУЗ, одним из вариантов рассматривал ВМК МГУ. И для самостоятельной подготовки приобрели книжку для подготовки к ЕГЭ, собственного мгушного производства.

Книжка как книжка, правда, все задачи и примеры на Паскале. Как оказалось, и неудивительно - на ВМК до сих пор преподают программирование на Паскале. В 21 веке. Караул!

Листая эту книжку, наткнулся на занятную задачку: сама по себе она довольно простая, и, вроде бы, ничем не примечательная:

  1. Вводится основание системы счисления (переменная Sis), допустим, ввели 17
  2. Вводится количество цифр в числе (переменная K), допустим, 4

А далее выглядит так, как будто программа должна предложить ввести “Цифры числа в 17-ичной системе счисления”.

Но на самом деле, вокруг переменной Sis стоят кавычки, так что получается: “Цифры числа в Sis-ичной системе счисления”.

Гыгы. Она сказала: “В сисечной”, Бивис!

Больше похоже на пасхалку, чем на случайную опечатку.

Image


МГУ - школе. Сисечное
read more at deadem // Dead Emotion




Image

В этом фильме мало прямых заимствований. Весь код и его подобие, похоже, создавались специально для фильма. Одни и те же фрагменты кода повторяются в разных сценах. Такие повторы буду пропускать.

05:08 (здесь и далее - время от начала фильма)

В сцене разглядывания спутниковых снимков слева виден интерфес с именами программных файлов:

Image

Editor 01
- exe_VideoComm...
- FindOptionsWid...
- Contribution.md
- DDI_usr.txt
- Package.json

Editor 02
- DDI_Compiler.js
- .metntion.bot
- .travis.yml
- .yarnrc
- Licence Plate Te...
- Contribution.md
- DDI_usr.md
- video_fileSource...
- .gulpfile.js
- package.json
- contentmenu.ts
- FindOptionsWid...
- Contribution.md
- Developer.txt
- dddos.Tools.ys

Выглядит, как какой-то проект на Тайпскрипте. Но ничего конкретного тут нет, и, вероятно, допущены опечатки: должно быть package.json, а не Package.json, опечатка в слове metntion (mention?), и расширение файла, вероятно, должно быть не .ys, а скорее .ts (клавиша t находится рядом с y).

Вот это сокращение “DDI” в начале файлов дальше будет мелькать весь фильм. Какого-то внятного объяснения, что это может значить, нет. Инициалы технического консультанта?

05:11

А тут вполне понятные команды установки связи. С логичным отображением процесса.

Image

# Initializing Secure Satellite Network Connection...

$ ./initiate_secure_link.sh --satellite SAT-47 --encryption AES-256

# Authentication Required
Enter Access Key: ************
Enter Biometric Verification: [Verified]

Access Granted
Secure Uplink Established
Connected to CIA-SAT-47 at Lat: 34.0535° N, Long: -118.2449° W

Initializing Encrypted Communication Channels...
Encryption Protocol: AES-256-GCM
Session ID: 8FA79C90-20BE-4A38-AF18-349C12A6F4A7
Handshake Successful

# Loading Satellite Control Interface...

05:16

Фрагмент кода, вычисляющий орбитальный период спутника Земли, в секундах, по формулам Ньютона и Кеплера. Уж не знаю, зачем такое может понадобиться рядовому работнику, который смотрит на спутниковые картинки, но код рабочий. Image

import numpy as np
def orbital_period(a):
    G = 6.67430e-11
    M = 5.972e24
    mu = G * M

    T = 2 * np.pi * np.sqrt(a**3 / mu)
    return T

И сразу же пример вызова этого кода. Видимо, тестировали корректность его работы:

a = 7000000
period = orbital_period(a)

06:27

По сюжету Чарльз пытается открыть зашифрованный файл, который ну никак не хочет открываться. Но картинка выглядит так, как будто открыли самый обычный вордовый “.doc” в текстовом редакторе, типа блокнота.

Image

07:37

Только что у нас были зашифрованные документы, а теперь мы почему-то пытаемся расшифровать outright-libdes-dev-1_1-s_rh.bin. Интересно, откуда он взялся? В изначальном листинге файлов такого нет.

Image

08:56

Но, видимо, мощности ноутбука не хватает, и Чарльз идёт в бункер к мощному компьютеру.

Запускает его и появляется код. Странный:

Image

Тут намешан синтаксис нескольких языков программирования: Java (System.out.println), JavaScript (document.write), макрос или прагма (#execute), Windows-путь? (E:admin 851212118/bin.files), строчка Linux-шелла? ({ (VAULT_user_851212518@DDI_terminal):~$)

Никакого смысла в этом фрагменте нет. Просто наброс команд.

09:25

И вот пароль подобран, файлы расшифрованы, и в мелькающих фрагментах мешанины из разных языков добавляются фрагменты на C:

Image

В них содержатся намёки на софт для камер наблюдения (CONFIG_CCTV), фрагменты из кода ядра Линукса, из подсистемы работы с таймерами для чипов picoXcell, предназначенных для использования в небольших и компактных устройствах (dw_apb_timer_of.c)

Этот фрагмент далее будет мелькать в разных сценах и окошках.

19:44

Чарльз не доверяет никому и начинает самостоятельное расследование. Опять какая-то мешанина из Java с непонятно чем:

Image

20:49

А тут пошёл креатив. Взяли фрагмент кода из упомянутого выше ядра Линукса dw_apb_timer_of.c и перемешали строки с JavaScript-примером из совета на StackOverflow

Image

    goto try_clock_freq;
switch (num_called) {
for (let i = 0, k; i < str.length; i++) {
    h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
    function cyrb128(str) {

for (let i = 0, k; i < str.length; i++) {
    pr_debug("%s: found clockevent timer\n", __func__);

21:27

Когда Чарльз готовит для демонстрации начальству 3D-модель уличной сцены, кто-то (он сам?) пишет код на Three.js - JavaScript-библиотеке для создания 3D-графики в браузере.

Он что, в браузере делает презентацию?

Image

if (j > 0) geometry.faces.push(new THREE.Face3(0, j, j + 1));

const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

{
    import_3D MODELER
    media_source == collate_media_sources

И тут не обошлось тут без включения абсолютно чужеродного фрагмента про import_3D_MODELER.

Вот такое он в браузере намоделировал, получается:

Image Неплохо!

26:34

Опять мелькают два якобы редактора кода, но на этот раз на экране код на C под Windows, который является фрагментом драйвера, который скрывает рабочие процессы в Windows. В основном этот трюк используется вирусами и прочими малварями. Но и без творческого исправления тут не обошлось: в коде системные префиксы заменены на те самые “DDI”.

И оно вполне соответствует сюжету: в этой сцене Чарльз готовит разные отвлекающие штуки для слежения за коллегами и маскировки.

Image

27:16

Фрагмент редактирования файла DDI_buildfile.py. Тут небольшой скрипт, которые использует библиотеку OpenCV для распознавания объектов на видео. Видимо, проиллюстрирован процесс отладки программы, которая будет следить за коллегами.

Image

cap = cv2.VideoCapture('object_tracking_video.mp4')

tracker = cv2.TrackerKCF_create()

success, frame = cap.read()
bbox = cv2.selectROI(frame, False)
tracker.init(frame, bbox)

while cap.isOpened():
    ret, frame = cap.read()

1:27:08

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

Image

Повторения приводить не буду, перечислю только уникальные строчки:

  • Удалим записи из логов, но почему-то только устаревшие. Свежие оставим
    DELETE FROM system_logs WHERE timestamp < 2023-02-12;
    
  • Удаляем всю директорию логов
    rm -rf /var/logs/*
    
  • И безопасно удалим какой-то один очень-очень важный файлик
    shred -u /path/to/sensitive_file
    
  • Удаляем записи из логов ошибок, но только записи с низким приоритетом. Всё важное оставляем
    DELETE FROM error_logs WHERE severity = 'low';
    
  • И грохнем таблицу с записями об активных сессиях пользователей
    TRUNCATE TABLE user_sessions;
    
  • И что-то удаляем кодом (на Java? JavaScript?)
    db.systemData.remove({ ... });
    
  • И удаляем кеш скачанных deb-пакетов
    sudo apt-get clean
    
  • И удаляем файлики логов через поиск
    find /path/to/directory -type f -name "*.log" -exec rm -f {}
    
  • И удаляем таблицу со старыми бэкапами
    DROP TABLE IF EXISTS old)_backup_data;
    
  • А! Так это PostgreSQL тут у вас
    VACUUM FULL;
    
  • Затираем записи в syslog
    echo "" > /var/log/syslog
    
  • А теперь удалим из базы временные файлы, причём, только обработанные
    DELETE FROM temp_files WHERE status = 'processed';
    
  • И очередь отправки писем почистим. Удалим из очереди те, что уже были отправлены. Неотправленные оставим
    DELETE FROM email_queue WHERE sent = true;
    
  • И, традиционно, микс из разных языков, SQL+JavaScript
    DELETE FROM db.temporary.remove({});
    
  • И SQL+shell
    LOG ROTATE --delete-system-files
    
  • Удалим информацию о временных файлах
    TRUNCATE TABLE temporary_files;
    
  • И сами временные файлы
    rm -rf /var/tmp/*
    

Очень похоже на то, что авторы загуглили как удалить информацию и нашли кучу примеров на разных языках об освобождении места на диске и в БД, и всё подряд добавили в фильм.

Почистили, смотрю, в основном только кеши, временные файлы и всё несерьёзное. Всю важную информацию при этом оставили нетронутой.

1:30:49

И, напоследок, сцена прошивки джейлбрейкнутого телефона, который за минуту до этого был куплен в уличной лавочке.

Image


Код в фильмах: Новичок (Amateur) 2025
read more at deadem // Dead Emotion

Tags:

Резюме разработчиков




Отбираю кандидатов в айтишечку, читаю резюме. Охреневаю. Кто ж, вас, блин, учил резюме составлять? И хорошо если в “обо мне” хоть что-то человеческое напишут…

Вы же все одинаковые!!! Всё по одному дурацкому шаблону: “разрабатывал…”, “оптимизировал…”, “поддерживал…”, “…и это привело к приросту количества посетителей”, “сборка теперь занимает минуту, а не две”. Это не твои заслуги! Это менеджмент или инструмент постарались. А ты - просто дал им возможность сделать свою работу.

Цитаты из достижений:

  • Разрабатывал интерфейс CRM-системы для обработки лидов, управления воронкой продаж и взаимодействия с потенциальными покупателями;
  • Реализовал интерфейсы для карточки клиента, ленты звонков, задач и напоминаний, фильтрации и поиска;
  • Использовал React и TypeScript для построения типобезопасных, масштабируемых компонентов и модулей;
  • Сократил количество ошибок при работе операторов за счёт улучшения UX и валидации форм;
  • Разрабатывал и поддерживал пользовательский ui для складских систем;
  • Отвечал за поддержку ключевых модулей UI, интеграцию REST API;
  • Внедрил новый функционал для отслеживания статуса заказов;
  • Оптимизировал процесс загрузки и кэширования данных;
  • Оптимизировал код основного проекта;
  • Взаимодействовал с заказчиками: презентовал проекты, оперативно принимал решения;
  • Провёл большой рефакторинг структуры;
  • Разработал модуль “График работ” с календарём расписания;
  • Реализовал систему уведомлений с real-time доставкой через socket.io;
  • Покрывал код unit-тестами;

И у всех такое. Хочется заорать: “и чоо?!” Это обычные типовые обязанности на нормальной работе. Что именно ты сделал и достиг? Где твои достижения? Чем ты отличаешься от другого кандидата, который тоже что-то “разработал”, “покрыл”, “сократил”?

Ссылки на Гитхаб, бывает, проскакивают, но он почти всегда или пуст, или в нём пара учебных проектов. Хорошо, если там окажется тестовое задание на какую-то соседнюю вакансию.

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

Из сотни только один выделился из толпы: написал, что пропатчил свой драйвер принтера, потому что производителем он был снят с поддержки и не работал в нужном режиме под Линуксом. Вот! Хочу таких!

Пишите, блин, в резюме о своих личных достижениях, а не о том, что вы как попка фигачили, потому, что менеджер задачу поставил, тимлид попросил, Дядя Боб написал в умной книжке.


Резюме разработчиков
read more at deadem // Dead Emotion




Image

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

Хотел было сразу про все сезоны написать, но, оказалось, что тут полно информации и тяжело разом всё подготовить, поэтому буду выкладывать посезонно.

Заимствований кода в этом сериале немного. Похоже, что довольно приличную часть фрагментов программ писали специально для фильма.

Сезон 1, Серия 1

“Большеголовый” показывает работу приложения NipAlert:

Image

На экране Visual Studio. Судя по именам и интерфейсам, написано оно на C# и сборка предназначается для Windows Phone: на экране горизонтально расположенный эмулятор телефона.

Image

Эта табличка с магическим числом не так проста, как кажется. Weissman score - реальная метрика для оценки качества алгоритмов сжатия без потерь. Была придумана в Стенфорде профессором Цахи Вайсманом и аспирантом Винитом Мисрой по заказу HBO специально для этого сериала. После телевизионного успеха эта метрика использовалась некоторыми учёными и в реальных проектах.

Серия 2

Ричард вымучивает бизнес-план, а на стене у него за спиной знаковые портреты:

Image

  • слева Лена Сёдерберг, основная заслуга которой - появление в 1972 году на развороте журнала Плейбой. Так получилось, что фрагмент этого разворота, как раз тот, что на картинке, был использован в научной работе по сжатию изображений в 1973 году. Требовался квадратный рисунок 512x512 пикселей, а под рукой был сканер на сотню DPI и журнал. С тех пор это изображение широко используется в качестве тестового для проверки качества работы алгоритмов компресии изображений.
  • справа Дэвид Хаффман, автор алгоритма кодирования данных, “код Хаффмана”, который применяется во многих алгоритмах сжатия: JPEG, ZIP и т.д.

Ещё одно демо проекта NipAlert:

Image

на этот раз на экране эмулятор iPhone. В качестве IDE используется IntelliJ IDEA. Постарались, сделали по версии под платформу. Вот только под Андроид версии так и не покажут, хотя в 2014 году он уже был пятой версии и занимал 80% рынка смартфонов.

Image

Код написан на Objective C, но по фрагменту назначение толком не понятно: тут только перевод секунд в минуты и проверка времени работы программы. Возможно, это код, отвечающий за показ сплеш-скрина при запуске приложения.

На пару секунд мелькает в кадре экран с кодом:

Image

Этот экран дальше будут часто издалека показывать в разных эпизодах, но тут удалось его более-менее разглядеть:

Image

В верхней части фрагмент на C. Похоже, что это часть некоторой программы по обработке звука, взаимодействующей с OpenAL (Open Audio Library), открытой звуковой библиотеке от Creative, авторов Саунд Бластера, что вполне укладывается в сюжет - в этих эпизодах серии вовсю разрабатывается аудио-кодек.

В нижней - минифицированный код на JavaScript от системы телеметрии для сайтов: “Foresee” (слежение за пользователями, встраивание голосовалок и т.п.) Конкретный источник этого фрагмента уже не определить, т.к. это общая библиотека и код раздавался всем желающим, а к сегодняшнему дню её код значительно поменялся.

Серия 6

Ричард пишет в BinTree.java код на Python для работы с деревом. На ноутбуке Sony под управлением OS X. Эээ…

Image

Следом - прогон автотестов в Jenkins:

Image

На фоне тот же файл, BinTree.java:

Image

…и снизу выглядывает он же:

Image

…но на этот раз код в этом файле написан на JavaScript: это модуль для работы с БД PostgreSQL.

А на правой панели выглядывает небольшой фрагмент из библиотечного кода: реализация алгоритма компрессии LZMA из JavaSDK:

Image

В сцене, где Джаред оказывается на корабле, виден QR-код:

Image

Это ссылка на сайт ravigacapital.com - фирму Питера Грегори, название которой мелькает в офисах в середине сезона. Однако, на этом сайте так ничего и не открыли - на момент выхода серии там висела заглушка. Возможно, на этот ресурс были какие-то планы, которые пришлось пересматривать в связи со внезапной смертью актёра, который играл Грегори. А потом домен перестали продлевать и его засквоттили всякие нехорошие люди.

Серия 8

Конференция ТехКранч:

Image

Опять Лена. На этот раз - в презентации Гэвина Белсона. Он тут рассказывает про алгоритмы компрессии, конечно.

И Ричард рассказывает про новый алгоритм сжатия изображений:

Image

В 2016 году, через два года после выхода в эфир сериала, Dropbox разработал алгоритм сжатия JPEG-картинок на 22% без потерь. Использовался факт, что в JPEG не бывает резких переходов и, разбив картинку на блоки 8x8 пикселей, можно сэкономить, вычисляя яркость блока относительно его соседей. Авторы его называют, с некоторой натяжкой, конечно, реализацией алгоритма “Изнутри наружу” (MIDDLE OUT!!), про который и рассказывал Ричард на ТехКранче.

Проект Lepton. В 2023 году он был закрыт в пользу более популярных Brotli и WebP.


Код в фильмах: Кремниевая долина, сезон 1 (Silicon Valley S01)
read more at deadem // Dead Emotion



Хоть я и ненавижу задачки на тему “поработайте компилятором языка программирования X”, эта понравилась.

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

x
= 1
x
--> 0

Результат, на самом деле, неожиданный.

Показать ответ 1




В чём же тут дело, давайте разбираться.

Приведённый фрагмент эквивалентен следующему фрагменту:

x = 1
x; // 0

Строка, начинающаяся с символов --> трактуется в JS как комментарий.

Но почему? А приветы следует направлять в начало девяностых, когда в Netscape Navigator 2 появился Javascript, и фрагменты кода следовало писать так:

<script>
<!--
alert("Hello!")
-->
</script>

Делалось это для других браузеров, которые ничего не знали про тег script, и, чтобы они не вываливали код на экран, внутренности полагалось завернуть в обычные html-комментарии <!-- ... -->, а в парсере JS, в свою очередь, был применён хак, чтобы строки <!-- и --> не вызывали ошибку скрипта и игнорировались.

К сегодняшнему дню почти не осталось бразуеров, которые не знают про тег script, но старые последовательности продолжают поддерживаться, так как в интернете полно страниц из девяностых, которые с тех пор не обновлялись. Выдавать JS-ошибку на таких страницах не хотелось бы. Вот и приходится до сих пор поддерживать такой необычный формат комментариев.

MDN


Задачка на парсинг Javascript
read more at deadem // Dead Emotion



Image

И снова про код. Сразу скажу, шифрования касаться не буду. Ибо герои фильма несут на эту тему какую-то лютую дичь, а на экране никакого шифрования/дешифрования не происходит. Но зато мелькают любопытные фрагменты кода.

Знаменитая эпичная сцена. “Взломать за 60 секунд”. Получить доступ к какому-то-там ресурсу минобороны. На экране мелко: DES 128 bit. (Алгоритмы шифрования будут упоминаться в том или ином виде весь фильм).

Image

Приступаем… На экране какой-то компилятор (не просто же так надпись Compiler в левом верхнем углу?), и, якобы пишем код.

На экране код из книги Cracking DES, 1998. Фрагмент из комплекта программ по демонстрации уязвимости алгоритма шифрования DES. Search Engine Controller Program, написана Полом Кохером.

Image

Правда, код в фильма набран такой гарнитурой, что на первый взгляд кажется, что это какая-то нерабочая ерунда. Но нет. Вот оригинал:

Image

Продолжаем ультра-взлом за 60 секунд. Теперь на экране список самых частоупотребляемых логинов и паролей из руководства по хакингу 1993 года: “THE NEOPHYTE'S GUIDE TO HACKING”.

Image

COMMON ACCOUNTS:
Username    Password
--------    --------
root
daemon
adm         admin, sysadm, sysadmin, operator, manager
uucp
bin
sys
123         lotus, lotus123
adduser
admin       adm,sysadm,sysadmin,operator,manager

Дальше на экране мелькают числа. К чему они относятся - непонятно. Возможно, стилизация, демонстрирующая процесс хеширования/шифрования пароля. Но, время вышло, а у героя всё получилось: ACCESS GRANTED. Ноутбук у него отнимают.

Image

Квалификация проверена, через какое-то время можно и выдать настоящий компьютер. Нечто крутое, семиэкранное, с декоративной подсветкой и всё такое. На котором нужно написать червя. Да не просто червя, а “многоголовую гидру”.

Image

Благо, писать придётся не с нуля: есть тайная заначка, оставленная в КалТехе на забытом в подвале PDP-10, который до сих пор подключён к сети. Кстати, прикольные там у них браузеры:

Image

Однако, требуется логин. Но, это, понятное дело, не проблема. Процесса не покажут, но зато похвастаются логотипом ещё одного алгоритма шифрования. На этот раз асимметричного: 128-битный RSA.

Image

Начинается работа над червём. На экране - листинг перлового исходника. Фрагмент cmount.pl из испанского гайда по хакингу: INTRODUCCION AL HACKING v2.0, 1998.

Небольшой скрипт для получения списка доступных точек доступа в NFS-серверах. Типа, сканируем сеть, ищем открытые пути. На экран исходник влез почти целиком:

Image

# Assign null list to @URLs which will be added to later.
my(@result) = ();
my(@domains) = ();
my($program) = "showmount -e ";

# Pull off filename from commandline. If it isn't defined, then assign default.
my($DomainFilename) = shift;
$DomainFilename = "domains" if !defined($DomainFilename);

# Do checking on input.
die("mountDomains: $DomainFilename is a directory.\n") if (-d $DomainFilename);

# Open $DomainFilename.
open(DOMAINFILE, $DomainFilename) or
  die("mountDomains: Cannot open $DomainFilename for input.\n");

while (<DOMAINFILE>) {
  chomp($_);
  print "Now checking: $_";

  # Note difference in program output capture from "geturl.pl".
  open (EXECFILE, "$program $_ |");
  @execResult = <EXECFILE>;
  next if (!defined($execResult[0]));
  if ($execResult[0] =~ /^Export/) {
    print " - Export list saved.";
    open (OUTFILE, ">$_.export");
    foreach (@execResult) {
        print OUTFILE;
    }
    close (OUTFILE);
  }
  close(EXECFILE);
  print "\n";
}

# We are done. Close all files and end the program.
close (DOMAINFILE);
0;

А следом за ним экран “Connection routing”. Герою обещали, что “можно одновременно подключиться к семи разным сетям”. Вот. На выбор. Это перепечатка таблицы региональных X.25 подсетей из “The Hackers' Handbook”, 1985, Хьюго Корнуолл, стр. 71. Точнее, первые её 18 строк.

Image

А, это, видимо, рабочий интерфейс. С копирайтом, как полагается: Worm generator tool v.1.2 (Jobson, S.).

Занятная опечатка в команде. Интересно, специально? cat /ect/passwrd (должно быть cat /etc/passwd)

Справа фрагмент кода на чём-то перлоподобном, которым разбираются строки: пропускаем # (видимо, комментарии), и бьём на фрагменты по точке или ~. А судя по тому, что код с теми же переменными встречается и в куске листинга слева и перемешан с дампом passwd, этот экран, похоже, иллюстрирует работу сетевого сниффера: слушаем сетевую активность и следим за ней, вываливая на экраны пакеты в порядке захвата:

Image

Запускаем сборку:

Image

Ещё один фрагмент из уже упоминавшейся INTRODUCCION AL HACKING v2.0, 1998. Теперь это - листинг утилиты getdomain.pl: парсинг списка записей о доменах с rs.internic.net. Да, в те времена можно было скачать всю базу доменов одним архивом. (В наши дни доменами теперь занимается ICANN) Список записей затем скармливается сканеру cmount.pl. Помните скриншот первого листинга с сервера КалТеха? Вот ему.

Image

#!/usr/bin/perl
# GetDomain By Nfin8 / Invisible Evil
# Questions /msg i-e or /msg i^e
#
# Retrieve command line arguments.
my($inputfile, $domain) = @ARGV;
usage() if (!defined($inputfile) || !defined($domain));

# Open and preprocess the input file.
open(INFILE, "<$inputfile") or die("Cannot open file $inputfile for reading!\n");
my(@lines) = <INFILE>;

# Initialize main data structure.
my(%hash) = {};
my($key) = "";

foreach (@lines) {
$key = (split(/\ /))[0];
chop($key);
next if ((($key =~ tr/.//) < 1) ||
...

Ещё немного красочного сканирования:

Image

Ещё один листинг. И опять из книги “Cracking DES”, теперь это исходник на VHDL, языке моделирования электронных схем, для реализации алгоритма в железе на ASIC и прочих FPGA.

Image

addr_key.vhd, за авторством Тома Ву. На листинге часть аппаратной системы для взлома алгоритма DES, на то время основной американской системы шифрования. Image

Ещё чуть-чуть… Готово!

Image

Дальше запускают червя, он гоняет деньги по миру туда-сюда… В общем, все счастливы, а больше никакого кода не покажут.

Image

Конец.


Код в фильмах: Пароль «Рыба-меч» (Swordfish)
read more at deadem // Dead Emotion



Поучаствовал в ЛШПИ ВШЭ 2024 в качестве, скажем так, стороннего наблюдателя. Настолько оно всё впечатлило, что пришлось брать паузу в несколько месяцев перед тем как поделиться. Если в двух словах: Организация - дно!

Начать с самого механизма поступления: школа бесплатная, поэтому проводится входной отбор в виде тестирования онлайн. Думается, что это из-за того, что в рекламу они не вкладываются вообще, и поэтому про мероприятие знает крайне ограниченное количество людей, чисто интересующиеся “вышкой”. Я случайно увидел мелькнувший анонс в одном из каналов ВШЭ, а через неделю уже было проблемой вспомнить, как эта штука вообще называется, и где же я её видел…

Как следствие: если делать школу платной в неё тупо никто не запишется, ибо никто про неё не знает, а если бесплатной - налетят совсем нубы и будет бардак. В результате участие бесплатное, но есть предварительный отбор. Но, видимо, был такой слабый конкурс, что зачислили кого попало: две трети поступивших на трек про програмиирование игр видели Анрил/Юнити в первый раз, и ждали, что их всему научат в процессе.

После прохождения вступительного теста, школа затаилась на две недели на обработку результатов, а окончательные итоги разослали меньше чем за семь дней до официального старта, чем выключили из участия часть людей, которые планировали добираться в Москву на самолётах.

После прохождения отбора, вплоть до дня, предшествующему началу занятий, никто не знал, что вообще делать, куда ехать, что с собой брать, какой график, план и т.п. В этот самый последний день, меньше чем за сутки до начала, собрали телеграм-чаты из зачисленных студентов, и в двух предложениях написали адрес и время. Почему было не выложить всё это заранее, на сайте, как делали в предыдущие годы - непонятно. Тем более, что это никак не зависит от того, какие люди прошли, а какие - нет. Ну, разве что это требует чуть больше усилий и организованности.

Занятия проходят очно. Иногда читают лекции, но цельной системы нет. На половине направлений преподаватели делились записью лекций и конспектов, на других - нет: после прочтения лекции нельзя было получить её материал вообще никак. Записей не ведётся, в паблик презентация не выкладывается. Можно было бы назвать всё это чисто развлекательным контентом, если бы это было весело. Но и весело тоже не было.

Программ обучения тоже нет. В предыдущие годы планы публиковали заранее на сайте “вышки”, и можно было по ним ориентироваться и понимать, куда стоит идти и для чего. Сейчас же - полный ахтунг. О важном завтрашнем событии расскажут только сегодня.

Участникам игрового направления было предложено придумать для реализации на двухнедельном джеме сюжет игры. Учащиеся устроили брейншторм и поделились на команды. Однако, вся рецензия выбранных проектов преподавателями свелась к “это сложно” и “это не сложно”. Всё, больше ничего о последствиях принятых решений учителя не сказали. За что некоторые команды впоследствии получили по жопе от суровой реальности - далеко не все хотелки было возможно заджемить в такой срок рандомно собранной командой. Хотя, казалось бы: в преподавательский состав специально пригласили людей с опытом, чтобы они поделились и предостерегли, но нет. Всем пофиг.

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

Наконец, добрались до финального демо.

Тут тоже весело: не все направления получили список критериев, по которым будет оценен результат. В день защиты проектов о них, конечно, объявили, но некоторые люди, при подготовке проекта и презентации, просто не знали, как их будут оценивать.

Организаторы обещали, что будет проведена оценка по нескольким критериям и по сумме набранных баллов выбран победитель. Оценивать будут сложность, использованные фичи, завершённость проекта, и т.п.

По факту, объявление результатов свелось к простому перечислению победителей. При этом ни о каких баллах речи уже не было. А в ответ на просьбу озвучить хотя бы итоговые набранные суммы, студенты услышали: “Это не соревнование, а школа”.

Так если это, блин, не соревнование, какого чёрта вы раздаёте призовые места?.. И раз так, то получается, что никаких баллов и оценок не было? И выбирали лучших совсем не по ним?

Заявлялось, что первым местом будет отмечен лучший проект каждого направления и лучший проект всей школы 2024 года. В итоге в направлении Анрила, где участвовали только две команды, первые места и наградки дали всем. Первой команде - потому, что их проект объявили абсолютным победителем, лучшим не только в направлении, но и в рамках всей школы. А оставшейся дали первое место в направлении Анрил. Потому, что больше-то команд и не осталось. Я вообще охреневаю, как так возможно награждать и почему. Видимо, сделали специально для разжигания жоп у команд других специализаций, которые не получили ничего. Вообще ничего. Даже бумажки никакой.

Оглядываясь на то, как проводилось первоначальное рецензирование при выборе ребятами проекта: преподаватели же знали, как они будут оценивать, и сразу же понимали, кто точно не победит, а у кого есть шанс. Почему бы тогда с самого начала и не объяснить ученикам, что “если они выберут именно эту тему, то призовых мест за такое точно не будет, и её можно пилить только для собственного удовольствия?” Ах, ну да. “Это же не соревнование”.

Победителям раздали дипломы о первых местах, а всем остальным участникам просто сказали: “Спасибо! До свидания!” И на этом всё закончилось.

Что в итоге:

Реальных знаний тут не дадут. Люди пилили так, как они уже умели до “школы”. Те, у кого не было опыта, были “балластом” и, хотя, в теории, могли поучиться у более скилловых чуваков, но это же дети… С самоорганизацией у них ещё не очень, поэтому слабые, бывало, мешали лидерам тащить проект.

Опыт кранча и упихивания проекта в дедлайн - полезный. Хотя гораздо проще его получить в онлайн-джемах. Тут же была надежда, что окажется полезен опыт офлайновой работы, но - увы. Из-за плохой организации не могу рекомендовать эту школу никому. Разве что любителям потусоваться в своё удовольствие две недели, и, если повезёт, задружиться-зазнакомиться с единомышленниками. Тем более, что отбор очень мягкий.

Хрен пойми что, короче говоря!

PS:

Вот это ниже - “абсолютный победитель”. А некоторые студенты неделю убили только на рисование-выдрачивание-анимацию моделей, персонажей и графики. Кто же знал, что это вообще никак не будет оценено?..

Image


Летняя школа по программной инженерии ВШЭ (ФКН) 2024
read more at deadem // Dead Emotion

Profile

Image
Imagedeadem
Dead Emotion

Latest Month

December 2025
S M T W T F S
 123456
78910111213
14151617181920
21222324252627
28293031   

Syndicate

RSS Atom

Comments

Powered by LiveJournal.com
Designed by Lilia Ahner
Image