Чем эмулировать серийник винта?

Тема в разделе "WASM.RESEARCH", создана пользователем hello_world, 16 июл 2005.

  1. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    Всем привет.

    У меня есть прога для досовского foxpro 2.6, которая привязывается к серийнику винта, и мне надо перенести ее на другой винт. Есть какая-нибудь простенькая тулза, чтобы можно было проэмулировать серийник винта в юзермоде на win2k?
     
  2. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    А почему-бы просто не установить обработчик прерывания и на запрос серийника выдавать то что понравиться программе?
     
  3. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    Обработчик писать надо, а мне лень. Наверняка уже все готовое есть.
     
  4. aSL

    aSL New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2003
    Сообщения:
    43
    Адрес:
    Russia
    Ну во-первых серийник винта легко ставится и руками (точнее, серийник раздела). Это раз.



    А во-вторых, если она привязывается, значит, как-то проверяет. Почему бы ее не декомпилировать в исходники, откусить проверку и собрать снова?
     
  5. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Хм, по-моему, серийник раздела(вернее сказать метка) и серийнк винта это не совсем одно и тоже...

    А насчет декомпиляции - написать обработчик полюбому будет легче
     
  6. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    Нашел тулзу VolumeID от руссиновича и поменял id'шник логического диска, но это не помогло. Насколько я понимаю, еще есть серийник харда?
     
  7. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    Есть серийник и самого харда, но средствами int 13h его уже не прочитаешь. Неужели на фоксе можно делать ассемблерные вставки? ;) Тебе надо перехватить ATA-команду IDENTIFY DEVICE.
     
  8. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Проще всётаки Refox-ом по проге пройтись, если конечно знаешь FoxPro. Либо просто поставь для начала бряк на int 13h и посмотри юзает ли его фокс.
     
  9. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    Всем спасибо.

    Расковырял прогу рефоксом, защиту снял,

    но так и не понял как она работает :)



    Вот собственно сама защита:
    Код (Text):
    1.  
    2. PUBLIC dfnc
    3. dfnc = 'A'
    4. IF FILE('sprcalc.fox')
    5.      LOAD sprcalc.fox
    6.      CALL sprcalc WITH dfnc
    7.      RELEASE MODULE sprcalc
    8. ENDIF
    9. IF dfnc = 'Y'
    10.  
    11. ..дальше идет текст программы
    12.  


    Файл sprcalc.fox - это обычный комушник.

    Вот его код:
    Код (Text):
    1.  
    2. 000000B0: 1E                           push      ds
    3. 000000B1: 53                           push      bx
    4. 000000B2: B42F                         mov       ah,02F ;"/"
    5. 000000B4: CD21                         int       021
    6. 000000B6: 53                           push      bx
    7. 000000B7: 06                           push      es
    8. 000000B8: 8CC8                         mov       ax,cs
    9. 000000BA: 8ED8                         mov       ds,ax
    10. 000000BC: BA3800                       mov       dx,00038 ;" 8"
    11. 000000BF: B41A                         mov       ah,01A ;]"
    12. 000000C1: CD21                         int       021
    13. 000000C3: 8CC8                         mov       ax,cs
    14. 000000C5: 8ED8                         mov       ds,ax
    15. 000000C7: BB0900                       mov       bx,00009 ;" 0"
    16. 000000CA: B000                         mov       al,000 ;" "
    17. 000000CC: 2E8807                       mov       cs:[bx],al
    18. 000000CF: B001                         mov       al,001 ;"O"
    19. 000000D1: 2E004701                     add       cs:[bx][00001],al
    20. 000000D5: 2E004702                     add       cs:[bx][00002],al
    21. 000000D9: 2E004703                     add       cs:[bx][00003],al
    22. 000000DD: 2E004704                     add       cs:[bx][00004],al
    23. 000000E1: 2E004705                     add       cs:[bx][00005],al
    24. 000000E5: 2E004706                     add       cs:[bx][00006],al
    25. 000000E9: 2E004707                     add       cs:[bx][00007],al
    26. 000000ED: 2E004708                     add       cs:[bx][00008],al
    27. 000000F1: 2E004709                     add       cs:[bx][00009],al
    28. 000000F5: 2E00470A                     add       cs:[bx][0000A],al
    29. 000000F9: 2E00470B                     add       cs:[bx][0000B],al
    30. 000000FD: BA0900                       mov       dx,00009 ;" 0"
    31. 00000100: B411                         mov       ah,011 ;"<"
    32. 00000102: CD21                         int       021
    33. 00000104: B42F                         mov       ah,02F ;"/"
    34. 00000106: CD21                         int       021
    35. 00000108: 268B471B                     mov       ax,es:[bx][0001B]
    36. 0000010C: 1F                           pop       ds
    37. 0000010D: 5A                           pop       dx
    38. 0000010E: 50                           push      ax
    39. 0000010F: B41A                         mov       ah,01A ;]"
    40. 00000111: CD21                         int       021
    41. 00000113: 58                           pop       ax
    42. 00000114: 5B                           pop       bx
    43. 00000115: 1F                           pop       ds
    44. 00000116: 2E3B062F00                   cmp       ax,cs:[0002F]   ; Здесь проверка на защиту
    45. 0000011B: 7507                         jne       000000124   -------- (1)
    46. 0000011D: B059                         mov       al,059 ;"Y"
    47. 0000011F: 8807                         mov       [bx],al
    48. 00000121: EB01                         jmps      000000124   -------- (2)
    49. 00000123: 90                           nop
    50. 00000124: CB                           retf
    51.  


    Я дос вообще не знаю, и поэтому не догоняю

    что этот код делает. Чтение мануалов не помогло.

    Например, непонятно, зачем забивать FCB единицами.

    Если кто помнит дос, обьясните пожалуйста в двух

    словах, что этот код делает.

    Комушник положил в аттач.





    [​IMG] _1174649162__SPRCALC.FOX
     
  10. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    hello_world

    пожалуйста в двух словах, что этот код делает

    На текущем диске ищет файл ZPLCALC.FOX и проверяет равен ли номер его первого кластера заданному.



    Например, непонятно, зачем забивать FCB единицами.

    Не забивает, а превращает
    Код (Text):
    1. 0000000009 FF 79 6F 6B 62 60 6B 62 1F 65 6E 77
    2.            00 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1
    3. 0000000009 00 7A 70 6C 63 61 6C 63 20 66 6F 78
    4.                z  p  l  c  a  l  c     f  o  x
     
  11. hello_world

    hello_world New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2003
    Сообщения:
    55
    Адрес:
    москва
    q_q

    Спасибо, теперь все ясно.