| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Флейм > Ваd сектор |
| Автор: vernon 28.11.2002, 21:40 |
| Мне необходимо, чтобы система ( MS-DOS и Windы) не могла бы читать определенный сектор на дискете. Как это можно сделать, подскажите пожалуйста? |
| Автор: Vit 28.11.2002, 23:49 |
| Дыроколом, шилом и т.п. инструментами |
| Автор: MuToGeN 29.11.2002, 00:04 |
| уж не вирус ли пишешь?? нехорошо... программно можно вообще убить весь винт... но работает только с очень старыми винтами. делается методом опускания гололвок на блины, когда те вертятся. |
| Автор: vernon 29.11.2002, 19:19 | ||
Нет не вирус, мне просто нужно создать КОПИЮ ЛИЦЕНЗИОННОЙ ДИСКЕТЫ. А у оригинала один сектор не читается. Повторяю нужно создать bad сектор у ДИСКЕТЫ, а не ЖЕСТКОГО ДИСКА |
| Автор: MuToGeN 29.11.2002, 22:29 |
| с дискетой такого не сделаешь |
| Автор: Vit 29.11.2002, 23:46 |
| Без специального оборудования такое не сделаешь. |
| Автор: Sun 30.11.2002, 01:55 |
| Можно пометить сектора как BAD при помощи Norton Disk Doctor (или Edit?). Но в качестве защиты дискеты это слишком наивный способ. Существует куча утилит - потрековых копировщиков, которые создают точный образ диска. Так что не советую даже тратить свое время на защиту такого рода. Придумай что-то оригинальнее. |
| Автор: NightGoblin 4.12.2002, 11:18 |
| Да почему не сделать - можно, в FAT'е помечается соответствующий сектор как 0FF7h - и DOS в него лазить не будет. Только это действительно хиловатая защита |
| Автор: Vit 5.12.2002, 00:52 | ||
Это только если кретины защиту делали такое пройдёт, обычно в этих случаях читают не через int21, а через int13 и ему по фиг что там в FAT написано, он конкретный сектор читает. Я когда-то очень давно (лет 10 назад) делал защиту - форматировал дискетту обычным форматом, затем дыроколом делал дырку, затем делал карту чтения диска и находил сектор который читался на "половину" - первые например 100 байт всегда читаются, а последние 100 байт сектора никогда не читаются, а между ними - чтение не устойчивое. Теперь в проге сначала прописываем сектор какими-нибудь значениями, затем читаем их, если например 5й байт читается правильно, а 500й неправильно - то всё в порядке, а если читаются оба или не читаются оба то ключ не подходит. Скопировать такую дискетту очень сложно - проверял, ни одна программа не в состоянии сделать дубликат такой дискетты, так как надо физически нарушить чтение половины сектора, а это нельзя сделать ввиду того что сектор BIOS всегда читается целиком. Сама дискетта не содержит никакой записанной ключевой информации, так что никакое даже самое точное копирование не помогает. Обычно такого типа защиты снимаются 2мя способами: 1) Специальным дисководом, который может прожигать лазером метки на диске (раньше я слышал о существовании таких) 2) Изменение кода программы для обхода проверки ключа - и это самый простой метод. |
| Автор: NightGoblin 5.12.2002, 13:58 | ||
Да уж, пожалуй что |
| Автор: MuToGeN 5.12.2002, 15:12 | ||
а такое разве реально? |
| Автор: NightGoblin 5.12.2002, 15:27 | ||||
дык, делают же вроде |
| Автор: NightGoblin 5.12.2002, 15:29 |
| Токо все равно, конечно, рано или поздно сломают... Если не средние хацкеры, так спецы займутся |
| Автор: MuToGeN 5.12.2002, 15:39 | ||
а как именно делают - не в курсе? ИМХО от дезассембляции защититься - какой-то UNREAL |
| Автор: NightGoblin 5.12.2002, 15:56 |
| Ну, в определенной степени, можно... Наворотить шифровщик там такой, что без трассировки не разобраться А про конкретные реализации - это лучше не ко мне %) |
| Автор: MuToGeN 5.12.2002, 16:02 | ||
OK, в целом понял |
| Автор: Chingachguk 5.12.2002, 18:09 | ||||
Ну я бы не назвал это "самым простым способом". Я бы просто подписал эмулятор такого чтения. Те резидент на int 13h (в принципе, его можно встроить в ломаемый экзешник) хватает это прерывание. Триггер такой: Если (Читаем_Дискету) и (Точка_Вызова(сегмент) in [Выше Дос, меньше 0A000h); Если записывается ОДИН сектор, то взводим флаг; Если читается ОДИН сектор, то эмулируем "дефект" - корректируем буфер по es:bx.
Есть много прикольных способов. Некоторые успешно работают против самых свежих отладчиков - таких, как Сайс. Например: ; Начало критичного кода mov ebx,esp mov esp,0 ; Критичный код, не использующий стек и ebx mov esp,ebx ; Конец критичного кода Зануляя стековый пойнтер, вводим в транс отладчик, который пытается работать на стеке приложения и не может ;) Эта фича срабатывает против очень многих ребят. |
| Автор: Vit 5.12.2002, 23:44 | ||||
А что с диском можно работать только через int13? А если используются другие пути? |
| Автор: Chingachguk 6.12.2002, 01:28 | ||
Ну так ты сам это написал. Я думаю, вопрос про то, что можно ли выяснить как ты работаешь с дискетой - это не вопрос ;) Далее. Какие пути есть еще (кроме int 13h, который, кстати, перестанет работать под nt) ? 1. int 25h/int 26h - досовые аналогичные функции, но они позволяют читать сектора активного раздела дос. Если сектор на дискете не из этого множества, то... Если да, то аналогично int 13h. 2. Вручную через порты контроллера. Я слышал много про такие проги, они все стали "не работать" под 98'ми, одну даже помогал править. Но не суть - речь о дос. Начиная с процов 386 в их есть так называемые аппаратные точки останова - DRx. Никто не помешает установить обработчик по доступу к порту ввода-вывода контроллера дискеты. Ничего не будет тормозить, ибо он будет активирован только на время со старта и до того момента, когда он сделает свое "черное дело". Есть и другой вариант, который будет работать и под 8086. Насколько я понимаю, в программе не была предусмотрена защита от трассировки ? ;) Тогда делаем вот что. Резидент сажаем уже на int 3 и включаем пошаговую трассировку, изучая команду за командой. Как только встречаем команды типа in/out, да еще в dx=адрес контроллера, то впадаем в глубокую неприязнь к их прямому назначению и подсовываем-таки опять то, что нужно ;) команды инициализации контроллера и чтения стандартизованы, так что проблем тута не будет. |
| Автор: NightGoblin 6.12.2002, 17:01 | ||
Гы, и все |