Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Как я был лаборантом (про программирование)

В разделе «обо мне» написано, что я работал лаборантом при кафедре ВМК. Иногда меня спрашивают — чем же я там занимался. Отвечаю: в основном, программно решал возникающие задачи, программировал я тогда, по большей части, на ассемблере x86. Поясню на примере.

В зоне отвественности кафедры было тогда (1996-97 гг.) четыре комьютерных класса. Везде, в основном, DOS. Типовое ПО (MS-DOS 6.22, Norton Commander, TurboC, TurboPascal и т. п.), непрерывный поток студентов. Из этого проистекают две проблемы: во-первых, студенты пишут файлы на диск, во-вторых, студенты удаляют и модифицируют уже существующие на диске файлы.

Первая проблема приводила к тому, что дисковое место быстро исчерповалось (а определить куда студент положил свою россыпь файлов и не стереть лишнего — та ещё задача), второя — к тому, что в середине дня приходилось (с дискет!) переставлять, например, TurboPascal или что-то даже ещё более тяжёлое (типа матстатистики).

Вот такую проблему требовалось решить.

В DOS было (и есть) API — множество фукнций, вызываемых через так называемое прерывание №21 (были и другие прерывания, обслуживаемые DOS, но это — основное). Когда программы под DOS работали с файлами они использовали это API.

Придумал я, в итоге, следующее. Винт форматируется, туда ставится DOS, Norton Commander и другое типовое ПО. Все файлы этого ПО помечаются атрибутом ReadOnly (это стандартный атрибут). Я написал программу, которая подменяет собой функции DOS для работы с файлом, которая запрещает модифицировать этот атрибут и делать что-то с этим файлом (точнее, в этом случае я возвращал код успешного завершения, но с файлом ничего не делал).

Свою программу я добавил в autoexec.bat, запретил остановку загрузки DOS (клавиши F5, F8), boot с дискеты и поставил пароль на BIOS.

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

Для специалистов: int 25/26/13 я никак не подменял, но квалификации студентов тогда не хватало, чтобы обойти защиту.

22 комментария
recoder.ya.ru 2008

Ох и слабоваты у вас студенты были... Мы, первокурсники, в 1991 году ручками ADM с дисков удаляли, чтобы можно было нормально компилироваться в любимой среде.

zencd.livejournal.com 2008

Неудобная архитектура сподвигает на геройства :-)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для recoder.ya.ru:

Были бы сильнее, не прокатило бы (вектора прерывайни ведь можно и восстановить, даже если как-то это не позволять делать, то всегда есть DMA).

Ассемблер (плюс API DOS) на моём уровне знали единицы, лучше — никто. Просто потому что ВМК в КГУ — это всё-таки не программисты (ну и не математики, если на то пошло, а какое-то нерыбное немясо).

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zencd.livejournal.com:

А альтернативы где? В то время в одном из четырёх классов стояли компы на 8086, в другом — на 80286. Линукс без защищённого режима? :) Есть, конечно, такие, но это же игрушка.

Да, в общем-то, все рассуждения о Линуксе неактуальны, пока эта платформа так не любит пользователя.

Sergey Gladilin (www.westra.ru/club/person/gladilin/) 2008

Думаю, не хватало не квалификации, а желания. У нас в СУНЦ МГУ (школе им. Колмогорова) легко нашлись бы те, у кого квалификации бы хватило. А из СУНЦ МГУ многие попадают на ВМиК.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для www.westra.ru/club/person/gladilin/:

Ещё раз: К-Г-У В-М-К.

Не М-Г-У В-М-и-К.

Квалификации не хватало, я там учился 5 лет, знаю какая квалификация по ассемблеру была у людей. Единицы были способны разобраться в том, что я написал и те большинство на 1-2 курса старше.

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

а зачем для всего этого вообще ассемблер?

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Что бы вы предложили для этого использовать?

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

прогу можно на turboc написать.
сломать — debug.exe в dos 6.22 входил.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Зачем? На ассемблере проще. Нужно перехватить вектор и корректно его отдать, если это «не наше».

debug.exe даже не вспоминайте, то еще гавно (и оно всё ещё есть в винде, кстати). Можно было поставить любой нормальный дизассемблер, но я же говорю: у людей не хватало знаний.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Кстати, прежде чем запускать debug надо иметь хотя бы пару идей как такая защита может быть устроена. А знаний об этом было у людей ещё меньше, чем об ассемблере.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Хороший debug.exe был в Novell DOS (DR-DOS в девичестве), вот это была хорошая утилита!

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

На ассемблере проще.

спорно, ну да ладно — пусть будет проще.

debug.exe даже не вспоминайте, то еще гавно

debug — инструмент, позволяющий решать определённый круг задач. откуда такая агрессия?

надо иметь хотя бы пару идей как такая защита может быть устроена.

вообще-то перехват 21h-го прерывания самый простой способ. никаких идей не надо. сразу debug.exe.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Спорно? Чего уж спорного? Я программировал тогда и на ассемблере и на Сях. На ассемблере проще, вопрос в том насколько хорошо знать то и другое. Я знал очень хорошо.

Debug — инструмент позволяющих плохо решать определённый круг задач. Было множество инструментов, делающих это лучше.

Способ кажется простым, как только я его вам рассказал. Это из разряда идей с ложным ощущением «до этого бы каждый додумался», на деле — почти никто.

Если уж говорить о debug.exe из DOS, то была парочка способов защиты от отладки этим деббагером.

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

Спорно? Чего уж спорного?

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

Debug — инструмент позволяющих плохо решать определённый круг задач. Было множество инструментов, делающих это лучше.

возможно плохо. но для решения описанной задачи достаточно ввести три комманды d/u/e. в чём-то другом сильно быстрее и удобнее вряд ли получилось. да и это другое где-то взять надо — дополнительная потеря скорости и удобства.

Способ кажется простым, как только я его вам рассказал.

вариантов ограничения доступа к файлам всего 2 плюс один чисто теоретический:

  1. перехват прерывания 21h
  2. перехват прерывания 2fh
  3. ну и чисто теоретически можно перехватывать 13h/25h/26h — но это из пушки по воробъям. второй adinf вряд ли кто бы написал.
    если есть что-то проще для ограничения доступа к файлам, чем перехват прерывания 21h — расскажите, интересно.

была парочка способов защиты от отладки этим деббагером.

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

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Совершенно не спорно :) Мы как-то вдвоём с братишкой писали набор утилит. Там пара сотен килобайт ассемблерного кода, проблем не было.

Способ решения данной проблемы именно так как я вам рассказал кажется простым, но до него надо ещё додуматься. Файлы могут не удаляться по любой причине. Например, я мог подпадчить Norton Commander (условно), с чего вдруг вы решили смотреть на 21-е прерывание? Я даже мог залезть глубже и пропатчить саму DOS, ничего особо страшного в этом нет. Тогда ходи про прерываниям, не ходи.

Ваша ошибка в том, что вы исходите из того, что вам известно как я это сделал. А обычному студенту это не известно.

Az (shitdesign.ru) 2008

у нас была вечная развлекуха — обмани факультетского сисадмина. закончилось это тем, что один из студентов таки стал этим сисадмином :)

Евгений Степанищев (bolknote.ru) 2008

Комментарий для shitdesign.ru:

Самый правильный путь :)

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

с чего вдруг вы решили смотреть на 21-е прерывание?

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

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

Хорошо. Предположим, я модифицировал DOS, вместо того, чтобы заменять прерывание. Что дальше?

В любом случае. О чём мы спорим? Что вы мне хотите доказать?

zg.livejournal.com 2008

Комментарий для Евгения Степанищева:

Предположим, я модифицировал DOS, вместо того, чтобы заменять прерывание. Что дальше?

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

Что вы мне хотите доказать?

что я хочу вам доказать? я лишь мимолётно заметил о возможности алтернативной реализации описанной защиты и простоте её слома.

Евгений Степанищев (bolknote.ru) 2008

Комментарий для zg.livejournal.com:

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

Знаете, есть. Я могу быстро увидеть, что то, куда ведёт вектор 21 не DOS, а какой-то левый сегмент, но вот быстро понять где в DOS встроен чужой код — это оно вряд ли. Это уже надо идти по командам и смотреть.

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

И я не ошибся, это показал опыт. Я не сделал сложнее, чем нужно и не сделал проще опасного порога. Так что спорить не о чем, история уже нас рассудила.