Hacker Magazine

Page 1

Кодинг

106

ХАКЕР 12 /191/ 2014

Задачи на собеседованиях Задачи от компании Parallels и решение crackme от Dr.Web

Офис Parallels имеет все признаки «офиса мечты», тем более что именно там работают такие крутые специалисты, как технический советник Linux Foundation и мейнтейнер ядра Linux Джеймс Боттомли, создатель 90% стека TCP/IP в Linux Алексей Кузнецов, самый известный хакер 2000-х Алексей Смирнов, создатель Windows NT Марк Збиковски (кстати, сигнатура exe-файла, MZ, — это его инициалы. — Прим. ред.) и автор проекта CRIU Павел Емельянов. Если хочешь влиться в их стройные ряды — решай наши задачки! Между прочим, некоторые из них предлагают на собеседовании прямо сейчас :).

Сейчас команда разработчиков активно расширяется (а все продукты с мировой известностью делают исключительно в России) — только в московском офисе открыто более 40 вакансий, причем практически во все команды. Больше всего нужны мобильные разработчики (iOS, Android), те, кто будет писать для ядра Linux, а также разработчики в команду облачной платформы Parallels Automation. Собеседования в Parallels редко длятся меньше часа (если меньше, можешь собраться и уйти — пазл не сошелся). Чтобы не терять этот час жизни, попробуй решить сначала их задачи. Все, кто пришлет правильные ответы, получат лицензии на Parallels Desktop для Mac 10 и Parallels Access, а также, как предупреждают в компании, горячий интерес ее эйчаров и тимлидов. Хотя там смотрят прежде всего на логику решающих и опыт и могут нанять даже тех, кто задачи не решил, но чей ход мысли понравился.

Задачи на логику С задачами на логику любят работать практически во всех командах — и тех, что работают с десктопной виртуализацией для конечных пользователей, и тех, что пишут коммиты для ядра Linux и решают задачи серверной виртуализации, и тех, что создают облачные платформы для сервис-провайдеров. Мы описали здесь только свои самые любимые.

Человек хочет пройти через туннель для поездов. Он начинает свой путь в начале туннеля и, когда проходит четверть пути, слышит, что сзади приближается поезд. Неизвестно, как быстро поезд едет и насколько он далеко. Известно только вот что: • Если человек развернется и побежит назад, то он достигнет начала туннеля одновременно с поездом. • Если человек побежит вперед, то конца туннеля он также достигнет одновременно с поездом Считай, что человек ускоряется мгновенно и бегает с постоянной и одинаковой скоростью в обе стороны туннеля, поезд также едет с постоянной скоростью. Вопрос: насколько быстрее движется поезд по сравнению с человеком?

Задача 2 Крестьянину нужно перевезти через реку волка, козу и капусту. Но лодка такова, что в ней может поместиться только крестьянин, а с ним или один волк, или одна коза, или одна капуста. Но если оставить волка с козой, то волк съест козу, а если оставить козу с капустой, то коза съест капусту. Сколько решений имеет эта задача (нет, не одно ;). — Прим. ред.)?

Какие вакансии есть в Parallels?

Александр Лозовский lozovsky@glc.ru

Задачи от Parallels

Задача 1

Парни из Parallels не зря пользуются уважением среди нашего брата программиста. Именно в этой компании придумали контейнерную виртуализацию (и уже реализовали возможность живой миграции контейнеров), сделали такой крутой и всемирно известный продукт, как Parallels Desktop для Mac, и научили смартфоны и планшеты под iOS и Android удаленно воспринимать десктопные приложения с Mac и ПК как нативные (Parallels Access).

На собеседованиях в Parallels предпочитают задавать задачи как логико-алгоритмические, так и предполагающие знание конкретных механизмов и протоколов (назовем их «программными»).

107

Задачи на собеседованиях

ХАКЕР 12 /191/ 2014

ЧИТАТЕЛИ, ШЛИТЕ НАМ свои РЕШЕНИЯ! Правильные ответы присылай или мне, или сразу представителю компании, Ольге Русаковой, на orusakova@parallels.com.

Взлом crackme от Dr.Web: решение читателя Кракми запакован UPX’ом, внутри сначала идет проверка серийника на допустимые символы и длину (должна равняться 16). Потом выделяется буфер 4 Кб, в начало копируется байт-код, и с определенными смещениями копируются длина имени, имя, матрица 4*4, состоящая из единиц и нулей, и расширенный пароль. Далее начинает работать встроенный интерпретатор. По имени берется crc32, матрица перемножается на пароль. Полученные значения сравниваются. То есть, чтобы найти серийник, надо узнать контрольную сумму имени и решить систему линейных уравнений. На картинке ты можешь видеть разобранный байт-код, который исполняется интерпретатором. Здесь Hash4 — массив из 10 uint32, [n] означает обращение к четырехкилобайтному массиву со смещением n. Таким образом, решение: Name: Rumata888 Password: FFD3011A00A2FFDF

Разобранный байткод кракми


Кодинг

108

ХАКЕР 12 /191/ 2014

Программные задачи Задачи 3 и 4 проверяют знание POSIX-подсистем и то, как человек думает в ситуации, когда на кажущийся ему очевидным ответ собеседующий говорит, что этот ответ неверен.

Задача 4 Программа запускается в обычном терминале, без перенаправления потоков ввода/вывода.

#include <stdio.h> #include <unistd.h> #include <signal.h>

Задача 3 Программа запускается в обычном терминале, без перенаправления потоков ввода/вывода.

#include <unistd.h> #include <stdio.h> int main() { printf("Hello"); fork(); return 0; } Вопрос: что будет напечатано?

int pid; void handler() { printf("%d\n", pid); exit(0); } int main() { signal(SIGCHLD, handler); pid = fork(); wait(NULL); return 0; } Вопрос: что будет напечатано?

IT-КОМПАНИИ, ШЛИТЕ НАМ СВОИ ЗАДАЧКИ! Миссия этой мини-рубрики — образовательная, поэтому мы бесплатно публикуем качественные задачки, которые различные компании предлагают соискателям. Вы шлете задачки на lozovsky@ glc.ru — мы их публикуем. Никаких актов, договоров, экспертиз и отчетностей. Читателям — задачки, решателям — подарки, вам — респект от нашей многосоттысячной аудитории, пиарщикам — строчки отчетности по публикациям в топовом компьютерном журнале.

Задача 5 Сколько памяти занимает такая структура?

Задача 6

struct xx {

Примечание: вопросы типа «Какие функции для аллокации памяти вы знаете в ядре Linux?» или «Какие примитивы синхронизации в ядре Linux доступны для программиста?» не задает только ленивый. Их касаться даже неинтересно. Гораздо интереснее попросить человека построить уже известный примитив, не сказав о том, что он уже известен. У вас есть некоторая система, которая должна обновлять некоторый счетчик (64-битный на 32-битной архитектуре) и технически не может выполнить операцию атомарно. Это обновление происходит очень часто и должно выполняться очень быстро, например в обработчике прерывания от устройства. Также известно, что это обновление может быть вызвано только на одном процессоре, то есть синхронизировать обновления между собой не надо. Использоваint main() { ние стандартного спинлока int i; реально замедляет систему for (i = 0; i < 3; i++) и не подходит. Нужно развя{ зать это изменение счетчика printf("."); с его чтением, которое происfork(); ходит а) редко, б) из контекста } пользовательского процесса } и может происходить относительно медленно. Вопрос: сколько точек будет выведено в терминале?

uint8_t a; uint16_t b; uint32_t c; uint64_t d;

};

Славим читателей-решателей Иннокентий Сенновский. Этого парня пора уже принимать в штат журнала :), поскольку он уже третий раз (с небольшими перерывами) становится чемпионом рубрики. Именно его решение мы сегодня публикуем. На этот раз он получает в подарок лицензию Dr.Web Security Space на один ПК на три года, бейсболку и футболку с логотипом. Prober. Известно, что ему за 40 и что он айтишник из Сибири, но работа его с реверсом напрямую не связана. Реверс — его хобби. Хорошее хобби! Пришел вторым, за что получает виртуальную серебряную медаль и Dr.Web Security Space 1 ПК / 1 год. vladimir okob. Пришел третьим, получает Dr.Web Security Space 1 ПК / 1 год.

Задача 7


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.