середу, 12 червня 2013 р.

Спроба аналізу SYS.COM з DOS 2.11

Версія 2.11 була гібридом IBM-івської 2.10 (2.1) та Мікрософтівської 2.01, з її підтримкою інтернаціоналізації та всілякими багфіксами. Випущена вона Microsoft і призначалася для OEM, відмінних від IBM. Тому присутня в дуже багатьох варіантах. 

Скачав я "Microsoft DOS 2.11 (5.25).7z", дістав SYS.COM, почав колупатися. І дуже здивувався --- код навіть не схожий на попередні варіанти. Нічим. Ні стилем, ні підходом, ні будовою.  Перевірка показала, що цей архів, насправді, лише копія іншого, "Microsoft DOS 2.11 [AT&T OEM] (5.25).7z". Точніше, бінарно і архіви і образи в них --- різні. Але файли у них -- однакові. Тобто, якщо я чогось жорстоко не плутаю, "vanilla" MS-DOS 2.11 мені знайти не вдалося.Якщо хтось має -- діліться!


В процесі пошуків, правда, натрапив на архів "Microsoft DOS 2.12 [Compaq OEM] (5.25).7z", який містить SYS.COM, дуже схожий на оригінальний, з однією важливою відмінністю -- в ньому пише "Vers 1.81", тобто, ймовірно, він містить попередню до розглянутої в аналізі SYS.COM з PC-DOS 2.10, версію. Про неї детальніше --- наступним постом, а зараз декілька слів про AT&T-шний SYS.COM. 

"Розколупати" повністю я її не зміг, та й лінь стало, якщо чесно. Справа в тому, що це зовсім інша програмка --- DOS постачався OEM у вигляді OAK, комплектів, що містили джерельні тексти IO.SYS та деяких утиліт, включаючи SYS.COM, щоб виробники могли підігнати під свої потреби і свою апаратуру. Очевидно, фірма вирішила, що написати свою буде кращою ідеєю, ніж  використати готову. З того що побачив у коді, не впевнений, чи це було правильним рішенням :-)

На початку коду копірайт: "SYS utility Copywrite 1984 Phoenix Software Associates, Ltd", точніше, "Copywrite" :-). Далі йде ім'я автора: "written by Alan Jay Weiner". На весь Інтернет знайшлася лише одна людина із таким іменем, програміст, віком 58 років, який колись (може і зараз, звичайно), багато програмував на системному рівні. Тобто, ймовірно він і є автором. Я написав, запитався, чи не захоче він розповісти щось про історію тієї програмки. Поки не відповів. 

Код --- негарний. Складний, плутаний, з явними помилками. Детально розбирати не буду, лише пара прикладів. 

1. Друк на екран здійснюється громіздкою процедурою, з якою я повністю так і не справився. Вона вміє друкувати як на екран, так і на принтер, хоча викликається (здається), тільки для екрану. Завантажує символи по одному, кожен "детально розглядає", літери з кодом, більшим за 20h, просто друкує. Із меншим -- якось хитро обробляє, кожен по своєму. Ну, тобто, зрозуміло, що це --- спеціальні символи і все таке, (див. таблицю ASCII-кодів), вони вимагають уваги. Однак, з одного боку --- навіщо їх обробляти, виводячи прості, тривіальні, стрічки з невеликої самописної програми, коли чітко відомо, які ті стрічки будуть? З іншого --- обробка якась дуже хитра... Скажімо, якщо я правильно зрозумів (не впевнений), то для деяких спец-символів наступні два байти стрічки служать адресою, з якої береться символ для друку. 

Підозрюю, це просто підключена якась телетайпівська бібліотека... Але нафігасічки?!

2. Підпрограма, яка, здається, читає boot-сектор цільового диску, початок:

push    ds              ; Save DS - next call spoils it
  mov     dl, ds:5Ch      ; Target disk from PSP FCB1
  mov     ah, 32h
  int     21h             ; DOS - 2+ internal - GET DRIVE PARAMETER BLOCK
; На цей момент DS вказує на сегмент з rive Parameter Block (DPB), 
; десь в нутрощах DOS.
  
  ; Змінюємо поле в DPB
  mov     byte ptr [bx+17h], 0FFh ; "Disk not accessed"
  ; і зразу після цього:
  mov     dl, ds:5Ch      ; DS --- somewhere in DOS Data...
  mov     ah, 32h
  int     21h             ; DOS - 2+ internal - GET DRIVE PARAMETER BLOCK
  ; Тобто явно надлишковий, некоректний код. Ймовірно, забута копі-паста.
  
  pop     ds
  push    cs
  pop     es

Тобто, явна груба помилка, хоча, в даному випадку, здається --- безобідна.

На загал, весь код громіздкий, "важковаговий", ймовірно --- з купою багів (хоча точно не скажу, недорозколупав). Тобто, можливо, по функціональності та надійності вона навіть краща, за оригінальну --- не розібравшись повністю, сказати складно. Але виглядає сумно.

Розбиратися глибше не став, як кому цікаво --- відповідний файл IDA Free 5.0, де є мої попередні "наробітки", можна скачати тут.

Немає коментарів:

Дописати коментар