Понадобилось узнать алгоритм, реализуемый маленькой софтиной. Программка состояла из исполняемого файла весом 35 КБ и файла драйвера, который меня не интересовал. Об алгоритме было известно, что он реализует обмен данными с несколькими разновидностями криптозащищённой памяти через обычный комовский JDM-совместимый программатор. Опыта работы с дизассемблерами у меня, можно сказать, не было, но ассемблер немного знал, поэтому решил попробовать.
Загрузил экзешник в IDA, он вроде как нормально распотрошился в автоматическом режиме. Поначалу всё оказалось просто: получение дескрипторов консольного ввода/вывода, определение режима работы по ключу запуска, загрузка драйвера программатора, проверка подключения. В конце концов дело дошло до самого криптоалгоритма, а именно до формирования открытого ключа. В его состав входили как константы, так и параметры, получаемые в ходе выполнения программы (например, дата и время). Всё это набивалось в стек для передачи в качестве параметров процедуре, которая должна была сварганить готовый ключ. Вот как раз на передаче такого большого числа разнотипных параметров меня и заклинило: я понял, что окончательно запутался, что, где и откуда берётся. Так как дело было в субботу, решил на работе не засиживаться и пошёл домой.
Вечер пролетел в обычных домашних заботах. Перед тем как укладываться спать, жена сменила весь комплект постельного белья. Отличительной особенностью нового комплекта было то, что по периметру подушки шёл узор из абсолютно одинаковых фигурок, напоминающих прямоугольники.
Утром воскресенья я понял, что почти не выспался. Жена смотрела на меня как-то странно и после некоторых колебаний всё же рассказала, что происходило ночью. Оказывается, я почти не спал. Проснувшись, она увидела, что я вожу пальцем по подушке и что-то бормочу. На вопрос, что я делаю, ответил, что прямоугольники на подушке — это на самом деле байты, которые нужно засунуть в стек в нужном порядке. Несмотря на отсутствие технического образования, жена поняла, что это полный абзац, и до утра меня лучше не трогать.
По всей видимости, такому необычному поведению во сне способствовало ещё то, что на работе ко мне на тестирование после ремонта попал 24-дюймовый сенсорный монитор, на котором оказалось очень удобно двигать элементы блок-схемы, составленной IDA.
Криптоалгоритм я так и не срисовал, так как через пару дней нашёлся более простой способ решить поставленную задачу.