Как я был лаборантом (про программирование)
В разделе «обо мне» написано, что я работал лаборантом при кафедре ВМК. Иногда меня спрашивают — чем же я там занимался. Отвечаю: в основном, программно решал возникающие задачи, программировал я тогда, по большей части, на ассемблере x86. Поясню на примере.
В зоне отвественности кафедры было тогда
Первая проблема приводила к тому, что дисковое место быстро исчерповалось (а определить куда студент положил свою россыпь файлов и не стереть лишнего — та ещё задача), второя — к тому, что в середине дня приходилось (с дискет!) переставлять, например, TurboPascal
Вот такую проблему требовалось решить.
В DOS было (и есть) API — множество фукнций, вызываемых через так называемое прерывание №21 (были и другие прерывания, обслуживаемые DOS, но это — основное). Когда программы под DOS работали с файлами они использовали это API.
Придумал я, в итоге, следующее. Винт форматируется, туда ставится DOS, Norton Commander и другое типовое ПО. Все файлы этого ПО помечаются атрибутом ReadOnly (это стандартный атрибут). Я написал программу, которая подменяет собой функции DOS для работы с файлом, которая запрещает модифицировать этот атрибут и делать
Свою программу я добавил в autoexec.bat, запретил остановку загрузки DOS (клавиши F5, F8), boot с дискеты и поставил пароль на BIOS.
В результате первая проблема решается так: после окончания занятия студентов лаборант запускает стирание всех файлов на винте, защищённые не удаляются, вторая проблема так же решается: защищенные файлы модифицировать, в итоге, не получается.
Для специалистов: int 25/26/13 я никак не подменял, но квалификации студентов тогда не хватало, чтобы обойти защиту.
Комментарии 22
Ассемблер (плюс API DOS) на моём уровне знали единицы, лучше — никто. Просто потому что ВМК в КГУ — это
Да, в
Не
Квалификации не хватало, я там учился 5 лет, знаю какая квалификация по ассемблеру была у людей. Единицы были способны разобраться в том, что я написал и те большинство на
а зачем для всего этого вообще ассемблер?
прогу можно на turboc написать.
сломать — debug.exe в dos 6.22 входил.
Зачем? На ассемблере проще. Нужно перехватить вектор и корректно его отдать, если это «не наше».
debug.exe даже не вспоминайте, то еще гавно (и оно всё ещё есть в винде, кстати). Можно было поставить любой нормальный дизассемблер, но я же говорю: у людей не хватало знаний.
Кстати, прежде чем запускать debug надо иметь хотя бы пару идей как такая защита может быть устроена. А знаний об этом было у людей ещё меньше, чем об ассемблере.
Хороший debug.exe был в Novell DOS
Комментарий для Евгения Степанищева:
спорно, ну да ладно — пусть будет проще.
debug — инструмент, позволяющий решать определённый круг задач. откуда такая агрессия?
Спорно? Чего уж спорного? Я программировал тогда и на ассемблере и на Сях. На ассемблере проще, вопрос в том насколько хорошо знать то и другое. Я знал очень хорошо.
Debug — инструмент позволяющих плохо решать определённый круг задач. Было множество инструментов, делающих это лучше.
Способ кажется простым, как только я его вам рассказал. Это из разряда идей с ложным ощущением «до этого бы каждый додумался», на деле — почти никто.
Если уж говорить о debug.exe из DOS, то была парочка способов защиты от отладки этим деббагером.
Комментарий для Евгения Степанищева:
что понимать под словом проще. проще написать и забыть. безусловно. если надо сопровождать — уже спорно. я не против ассемблера, я за адекватность средств. ассемлер знаю прекрасно и не на одной архитиектуре.
возможно плохо. но для решения описанной задачи достаточно ввести три комманды d/u/e. вчём-то другом сильно быстрее и удобнее вряд ли получилось. да и это другое где-то взять надо — дополнительная потеря скорости и удобства.
вариантов ограничения доступа к файлам всего 2 плюс один чисто теоретический:что-то проще для ограничения доступа к файлам, чем перехват прерывания 21h — расскажите, интересно.
1. перехват прерывания 21h
2. перехват прерывания 2fh
3. ну и чисто теоретически можно перехватывать 13h/25h/26h — но это из пушки по воробъям. второй adinf вряд ли кто бы написал.
если есть
а причём тут отладка вообще. достаточно поглядеть обработчик и либо сходу занопить проверки на обрабатываемые прерывания, либо если адрес оригинального обработчика не запрятан — записать его в таблицу векторов.
Совершенно не спорно :) Мы
Способ решения данной проблемы именно так как я вам рассказал кажется простым, но до него надо ещё додуматься. Файлы могут не удаляться по любой причине. Например, я мог подпадчить Norton Commander (условно), с чего вдруг вы решили смотреть на
Ваша ошибка в том, что вы исходите из того, что вам известно как я это сделал. А обычному студенту это не известно.
Комментарий для Евгения Степанищева:
ну да, с файламичто-то не так, но куда указывает прерывание, предоставляющее в том числе и сервис по работе с файлами я не буду. вместого этого я пойду посмотрю куда указывает прерывание 10h, ведь файлы, они на мониторе отображатся.
Хорошо. Предположим, я модифицировал DOS, вместо того, чтобы заменять прерывание. Что дальше?
В любом случае. О чём мы спорим? Что вы мне хотите доказать?
Комментарий для Евгения Степанищева:
т.е. для вас есть разница, между обходом подобного рода защиты в виде отдельного резидента и в виде, вживлённом в непосредственно в дос?
что я хочу вам доказать? я лишь мимолётно заметил о возможности алтернативной реализации описанной защиты и простоте её слома.
Комментарий для zg.livejournal.com:
Знаете, есть. Я могу быстро увидеть, что то, куда ведёт вектор 21 не DOS, акакой-то левый сегмент, но вот быстро понять где в DOS встроен чужой код — это оно вряд ли. Это уже надо идти по командам и смотреть.
Вы думаете тогда, много лет назад, я не рассмотрел все возможности, не перебрал в уме всех, кто может её поломать и не понял, что те, кто хотел бы, не смогут, а те, кто мог бы, не станут?
И я не ошибся, это показал опыт. Я не сделал сложнее, чем нужно и не сделал проще опасного порога. Так что спорить не о чем, история уже нас рассудила.