Как я был лаборантом (про программирование)
В разделе «обо мне» написано, что я работал лаборантом при кафедре ВМК. Иногда меня спрашивают — чем же я там занимался. Отвечаю: в основном, программно решал возникающие задачи, программировал я тогда, по большей части, на ассемблере 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 я никак не подменял, но квалификации студентов тогда не хватало, чтобы обойти защиту.
Ох и слабоваты у вас студенты были... Мы, первокурсники, в 1991 году ручками ADM с дисков удаляли, чтобы можно было нормально компилироваться в любимой среде.
Неудобная архитектура сподвигает на геройства :-)
Комментарий для recoder.ya.ru:
Были бы сильнее, не прокатило бы (вектора прерывайни ведь можно и восстановить, даже если как-то это не позволять делать, то всегда есть DMA).
Ассемблер (плюс API DOS) на моём уровне знали единицы, лучше — никто. Просто потому что ВМК в КГУ — это всё-таки не программисты (ну и не математики, если на то пошло, а какое-то нерыбное немясо).
Комментарий для zencd.livejournal.com:
А альтернативы где? В то время в одном из четырёх классов стояли компы на 8086, в другом — на 80286. Линукс без защищённого режима? :) Есть, конечно, такие, но это же игрушка.
Да, в общем-то, все рассуждения о Линуксе неактуальны, пока эта платформа так не любит пользователя.
Думаю, не хватало не квалификации, а желания. У нас в СУНЦ МГУ (школе им. Колмогорова) легко нашлись бы те, у кого квалификации бы хватило. А из СУНЦ МГУ многие попадают на ВМиК.
Комментарий для www.westra.ru/club/person/gladilin/:
Ещё раз: К-Г-У В-М-К.
Не М-Г-У В-М-и-К.
Квалификации не хватало, я там учился 5 лет, знаю какая квалификация по ассемблеру была у людей. Единицы были способны разобраться в том, что я написал и те большинство на 1-2 курса старше.
Комментарий для Евгения Степанищева:
а зачем для всего этого вообще ассемблер?
Комментарий для zg.livejournal.com:
Что бы вы предложили для этого использовать?
Комментарий для Евгения Степанищева:
прогу можно на turboc написать.
сломать — debug.exe в dos 6.22 входил.
Комментарий для zg.livejournal.com:
Зачем? На ассемблере проще. Нужно перехватить вектор и корректно его отдать, если это «не наше».
debug.exe даже не вспоминайте, то еще гавно (и оно всё ещё есть в винде, кстати). Можно было поставить любой нормальный дизассемблер, но я же говорю: у людей не хватало знаний.
Комментарий для zg.livejournal.com:
Кстати, прежде чем запускать debug надо иметь хотя бы пару идей как такая защита может быть устроена. А знаний об этом было у людей ещё меньше, чем об ассемблере.
Комментарий для zg.livejournal.com:
Хороший debug.exe был в Novell DOS (DR-DOS в девичестве), вот это была хорошая утилита!
Комментарий для Евгения Степанищева:
спорно, ну да ладно — пусть будет проще.
debug — инструмент, позволяющий решать определённый круг задач. откуда такая агрессия?
вообще-то перехват 21h-го прерывания самый простой способ. никаких идей не надо. сразу debug.exe.
Комментарий для zg.livejournal.com:
Спорно? Чего уж спорного? Я программировал тогда и на ассемблере и на Сях. На ассемблере проще, вопрос в том насколько хорошо знать то и другое. Я знал очень хорошо.
Debug — инструмент позволяющих плохо решать определённый круг задач. Было множество инструментов, делающих это лучше.
Способ кажется простым, как только я его вам рассказал. Это из разряда идей с ложным ощущением «до этого бы каждый додумался», на деле — почти никто.
Если уж говорить о debug.exe из DOS, то была парочка способов защиты от отладки этим деббагером.
Комментарий для Евгения Степанищева:
что понимать под словом проще. проще написать и забыть. безусловно. если надо сопровождать — уже спорно. я не против ассемблера, я за адекватность средств. ассемлер знаю прекрасно и не на одной архитиектуре.
возможно плохо. но для решения описанной задачи достаточно ввести три комманды d/u/e. в чём-то другом сильно быстрее и удобнее вряд ли получилось. да и это другое где-то взять надо — дополнительная потеря скорости и удобства.
вариантов ограничения доступа к файлам всего 2 плюс один чисто теоретический:
если есть что-то проще для ограничения доступа к файлам, чем перехват прерывания 21h — расскажите, интересно.
а причём тут отладка вообще. достаточно поглядеть обработчик и либо сходу занопить проверки на обрабатываемые прерывания, либо если адрес оригинального обработчика не запрятан — записать его в таблицу векторов.
Комментарий для zg.livejournal.com:
Совершенно не спорно :) Мы как-то вдвоём с братишкой писали набор утилит. Там пара сотен килобайт ассемблерного кода, проблем не было.
Способ решения данной проблемы именно так как я вам рассказал кажется простым, но до него надо ещё додуматься. Файлы могут не удаляться по любой причине. Например, я мог подпадчить Norton Commander (условно), с чего вдруг вы решили смотреть на 21-е прерывание? Я даже мог залезть глубже и пропатчить саму DOS, ничего особо страшного в этом нет. Тогда ходи про прерываниям, не ходи.
Ваша ошибка в том, что вы исходите из того, что вам известно как я это сделал. А обычному студенту это не известно.
у нас была вечная развлекуха — обмани факультетского сисадмина. закончилось это тем, что один из студентов таки стал этим сисадмином :)
Комментарий для shitdesign.ru:
Самый правильный путь :)
Комментарий для Евгения Степанищева:
ну да, с файлами что-то не так, но куда указывает прерывание, предоставляющее в том числе и сервис по работе с файлами я не буду. вместого этого я пойду посмотрю куда указывает прерывание 10h, ведь файлы, они на мониторе отображатся.
Комментарий для zg.livejournal.com:
Хорошо. Предположим, я модифицировал DOS, вместо того, чтобы заменять прерывание. Что дальше?
В любом случае. О чём мы спорим? Что вы мне хотите доказать?
Комментарий для Евгения Степанищева:
т. е. для вас есть разница, между обходом подобного рода защиты в виде отдельного резидента и в виде, вживлённом в непосредственно в дос?
что я хочу вам доказать? я лишь мимолётно заметил о возможности алтернативной реализации описанной защиты и простоте её слома.
Комментарий для zg.livejournal.com:
Знаете, есть. Я могу быстро увидеть, что то, куда ведёт вектор 21 не DOS, а какой-то левый сегмент, но вот быстро понять где в DOS встроен чужой код — это оно вряд ли. Это уже надо идти по командам и смотреть.
Вы думаете тогда, много лет назад, я не рассмотрел все возможности, не перебрал в уме всех, кто может её поломать и не понял, что те, кто хотел бы, не смогут, а те, кто мог бы, не станут?
И я не ошибся, это показал опыт. Я не сделал сложнее, чем нужно и не сделал проще опасного порога. Так что спорить не о чем, история уже нас рассудила.