Всем привет. У меня есть прога для досовского foxpro 2.6, которая привязывается к серийнику винта, и мне надо перенести ее на другой винт. Есть какая-нибудь простенькая тулза, чтобы можно было проэмулировать серийник винта в юзермоде на win2k?
А почему-бы просто не установить обработчик прерывания и на запрос серийника выдавать то что понравиться программе?
Ну во-первых серийник винта легко ставится и руками (точнее, серийник раздела). Это раз. А во-вторых, если она привязывается, значит, как-то проверяет. Почему бы ее не декомпилировать в исходники, откусить проверку и собрать снова?
Хм, по-моему, серийник раздела(вернее сказать метка) и серийнк винта это не совсем одно и тоже... А насчет декомпиляции - написать обработчик полюбому будет легче
Нашел тулзу VolumeID от руссиновича и поменял id'шник логического диска, но это не помогло. Насколько я понимаю, еще есть серийник харда?
Есть серийник и самого харда, но средствами int 13h его уже не прочитаешь. Неужели на фоксе можно делать ассемблерные вставки? Тебе надо перехватить ATA-команду IDENTIFY DEVICE.
Проще всётаки Refox-ом по проге пройтись, если конечно знаешь FoxPro. Либо просто поставь для начала бряк на int 13h и посмотри юзает ли его фокс.
Всем спасибо. Расковырял прогу рефоксом, защиту снял, но так и не понял как она работает Вот собственно сама защита: Код (Text): PUBLIC dfnc dfnc = 'A' IF FILE('sprcalc.fox') LOAD sprcalc.fox CALL sprcalc WITH dfnc RELEASE MODULE sprcalc ENDIF IF dfnc = 'Y' ..дальше идет текст программы Файл sprcalc.fox - это обычный комушник. Вот его код: Код (Text): 000000B0: 1E push ds 000000B1: 53 push bx 000000B2: B42F mov ah,02F ;"/" 000000B4: CD21 int 021 000000B6: 53 push bx 000000B7: 06 push es 000000B8: 8CC8 mov ax,cs 000000BA: 8ED8 mov ds,ax 000000BC: BA3800 mov dx,00038 ;" 8" 000000BF: B41A mov ah,01A ;]" 000000C1: CD21 int 021 000000C3: 8CC8 mov ax,cs 000000C5: 8ED8 mov ds,ax 000000C7: BB0900 mov bx,00009 ;" 0" 000000CA: B000 mov al,000 ;" " 000000CC: 2E8807 mov cs:[bx],al 000000CF: B001 mov al,001 ;"O" 000000D1: 2E004701 add cs:[bx][00001],al 000000D5: 2E004702 add cs:[bx][00002],al 000000D9: 2E004703 add cs:[bx][00003],al 000000DD: 2E004704 add cs:[bx][00004],al 000000E1: 2E004705 add cs:[bx][00005],al 000000E5: 2E004706 add cs:[bx][00006],al 000000E9: 2E004707 add cs:[bx][00007],al 000000ED: 2E004708 add cs:[bx][00008],al 000000F1: 2E004709 add cs:[bx][00009],al 000000F5: 2E00470A add cs:[bx][0000A],al 000000F9: 2E00470B add cs:[bx][0000B],al 000000FD: BA0900 mov dx,00009 ;" 0" 00000100: B411 mov ah,011 ;"<" 00000102: CD21 int 021 00000104: B42F mov ah,02F ;"/" 00000106: CD21 int 021 00000108: 268B471B mov ax,es:[bx][0001B] 0000010C: 1F pop ds 0000010D: 5A pop dx 0000010E: 50 push ax 0000010F: B41A mov ah,01A ;]" 00000111: CD21 int 021 00000113: 58 pop ax 00000114: 5B pop bx 00000115: 1F pop ds 00000116: 2E3B062F00 cmp ax,cs:[0002F] ; Здесь проверка на защиту 0000011B: 7507 jne 000000124 -------- (1) 0000011D: B059 mov al,059 ;"Y" 0000011F: 8807 mov [bx],al 00000121: EB01 jmps 000000124 -------- (2) 00000123: 90 nop 00000124: CB retf Я дос вообще не знаю, и поэтому не догоняю что этот код делает. Чтение мануалов не помогло. Например, непонятно, зачем забивать FCB единицами. Если кто помнит дос, обьясните пожалуйста в двух словах, что этот код делает. Комушник положил в аттач. _1174649162__SPRCALC.FOX
hello_world пожалуйста в двух словах, что этот код делает На текущем диске ищет файл ZPLCALC.FOX и проверяет равен ли номер его первого кластера заданному. Например, непонятно, зачем забивать FCB единицами. Не забивает, а превращает Код (Text): 0000000009 FF 79 6F 6B 62 60 6B 62 1F 65 6E 77 00 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 0000000009 00 7A 70 6C 63 61 6C 63 20 66 6F 78 z p l c a l c f o x