언데드라인의 프로텍트 타입에 관해서
그럼 우선 언데드라인의 프로텍트에 대해서 살펴봅시다. 프로텍트가 걸려있는 트랙은 8입니다.
Drive 1 Track 8
Track Lenght = 28E4(10468)
Number of Preamble = 0092 Bytes
MFM C H R N BYTES STATUS
1 04 00 F7 02 0059 DATA CRC
2 04 00 09 01 015C
3 04 00 01 03 04BC
4 04 00 02 03 04BC
5 04 00 03 03 04C7
6 04 00 04 03 04BB
7 04 00 05 03 04BA
8 04 00 06 03 04BD
9 04 00 07 03 04BA
10 04 00 08 03 04BA
11 04 00 0A 02 014B DATA CRC
이 프로텍트는 “Ys-3”, “Xak”, “Lagoon”등에도 이 타입의 포맷이 걸려있습니다.
그러므로, 이 타입의 프로텍트의 체커에서는 1, 2, 11 번째의 비정상 섹터를 제대로 읽어서 에러가 나오는가(2번째는 나오지 않는다)라는 것과 데이터의 체크섬이 있는가 아닌가라는 것을 조사하는 것입니다.
그런데, 이 체커 말인데, 어느 소프트웨어도 샘플 체커를 그대로 사용하고 있는듯 프로그램은 거의 똑같습니다. 그렇다는 것은 하나를 제거할 수 있다면 모두를 제거할 수 있게 되어버리는 것입니다. 실제로는 그렇게 간단하지는 않지만, 걸려있을 때와 OK일 때의 차이와 뒤의 체크에 주의하면 기본적으로는 같은 것이라고 할 수 있습니다.
그리고 이 타입의 체커의 특징으로
and.l #$FAFFFF00,D0 (C0BC FAFF FF00)
이라는 명령이 반드시 나옵니다. 그러므로, 이 데이터를 서치하면 암호등이 걸려 있지 않은 한 찾을 수 있습니다. 이것을 기억해두면 꽤 편리하겠지요.
우선은 평범히 백업해서 기동해봅시다. 그러면, 어드레스 에러가 발생하면서 보기 좋게 멈춰버리고 맙니다. 또, 디스크의 디렉터리를 살펴봐도 아무것도 나오지 않지만, 이것은 파일의 속성이 바뀌어져 있는 것뿐으로 attrib.x를 사용해서 속성을 되돌려둡시다.
A:¥>attrib -H -R B:*.*
그러면, 다음으로 CONFIG.SYS를 살펴보면 LOADER.X를 실행하고 있으므로, 여기부터 추적하면 됩니다만, 앞에서 서치 데이터를 소개했으므로 그것을 찾아봅시다.
디스크 서치The Surgeon-68K등에 포함되어있는 파일 유틸리티로
COBC FAFF FF00
을 서치합니다. 그러면
《 Track 11 》 3/376 3/398 3/3BA
《 Track 31 》 7/198 7/1BA 7/1DC
인 부분이 있는 것을 할 수 있습니다.
PEC나 백업활용 테크닉 12권부터 소개하는 The Surgeon-68K의 코드를 입력하거나, Super Surgeon-68K등을 구해서 실행할 수 있다. 여기서는 Super Surgeon-68K를 이용한다. Tool Box의 ディスク・エディター(디스크 에디터)를 선택한 뒤 [F1]키로 서치할 디스크 드라이브를 지정하고, [F6]키를 누른 뒤 위의 데이터를 입력하면 결과를 얻을 수 있다.

“C0BC FAFF FF00″은 Track 11의 3 섹터 376, 398, 3BA번지에 있음을 확인할 수 있다.(붉은색으로 표시)

다음으로 파일 체커를 사용해서 이 데이터가 어떤 파일 속에 있는지를 살펴봅시다.
⁞
A----- WINDOW.M 8/1 ~ 11/6
⁞
A----- OPENING.M 31/4 ~ 34/6
⁞
그러면, 위의 두개의 파일 속에 포함되어있는 것을 알았으므로, 이것들의 파일을 살펴보면 되는 것입니다. 다음으로 디버거에서 읽어봅시다.
마찬가지로Super Surgeon-68K의 디스크에디터에서 [F10]키를 누르면 해당 파일이 어떤 트랙/섹터에 걸쳐있는지 알 수 있다. WINDOW.M의 경우 8트랙 1섹터에서 11트랙 6섹터에 걸쳐 기록되어있다.

A:¥>DB
-R B:¥WINDOW.M, 70000
실행형식이 아니므로 어드레스를 지정해서 읽어들입니다. 다음으로 아까전의 데이터를 서치합니다.
-S.A0 .A1 COBC FAFF FF00
00076B76 00076B98 00076BBA
주위를 살펴보면 체커를 찾을 수 있습니다.
-L76B70
00076B70 moveq #$01,D7 *리트라이 횟수 2
00076B72 bsr.w $00076D08 *읽기 서브
00076B76 and.l #$FAFFFF00,D0
00076B7C bne.s $00076B8C *에러가 나오면 안됨
00076B7E lea %00076D5C,A3 *썸 데이터
00076B84 move.w #$00FF,D5 *썸을 취하는 갯수
00076B88 bsr.s $00076BF6 *체크썸 계산
00076B8A beq.s $00076B92 *같다면 다음으로
00076B8C dbf D7,$00076B72
00076B90 bra.s $00076BDA *걸렸다!로
00076B92 moveq #$01,D7 *위와 같다
00076B94 bsr.w $00076D24
00076B98 and.l #$FAFFFF00,D0
00076B9E bne.s $00076BAE
00076BA0 lea %00076D5D,A3
00076BA6 move.w #$01BF,D5
00076BAA bsr.s $00076BF6
00076BAC beq.s $00076BB4
00076BAE dbf D7,$00076B94
00076BB2 bra.s $00076BDA *걸렸다!로
00076BB4 moveq #$02,D7 *역시 같다
00076BB6 bsr.w $00076D40
00076BBA and.l #$FAFFFF00,D0
00076BC0 beq.s $00076BD6
00076BC2 lea $00076D5E,A3
00076BC8 move.w #$004F,D5
00076BCC bsr.s $00076BF6
00076BCE bne.s $00076BD6
00076BD0 bsr.s $00076C0A *읽은 데이터의 체크
00076BD2 bne.s $00076BD6 *다르다면 아웃
00076BD4 rts
00076BD6 dbf D7,$00076BB6
00076BDA lea $0007693C,A0 *걸렸다!
00076BE0 lea $0007000E,A1
00076BE6 move.w #$8000,D0
00076BEA move.l (A1)+,(A0)+
00076BEC def D0,$00076BEA
00076BF0 jmp $00000000
D0 레지스터에 0을 넣고 돌아오면 99%는 OK가 되는 것입니다. (위의 경우는 되돌아가는 것으로 괜찮습니다)
-L76B70
00076B70 moveq #$01,D7 (7E01)
00076B72 bsr.w $00076D08 (6100 0194)
00076B76 and.l #$FAFFFF00,D0 (C0BC FAFF FF00)
↓
00076B70 rts (4E75)
이것으로, 이 체커는 무용지물이 되어버렸습니다. 다음으로 혹시 모르니 나머지 파일도 살펴봅시다.
A:¥>DB
-R B:¥OPENING.M, 70000
-S.A0 .A1 C0BC FAFF FF00
00070D98 00070DBA 00070DDC
-L70D92
00070D92 moveq #$01,D7
00070d94 bsr.w $0070f18
00070D98 and.l #$FAFFFF00,D0
00070D9E bne.s $00070DAE
00070DA0 lea $00070F6C,D5
00070DA6 move.w #$00FF,D5
⁞
(중간 생략)
⁞
00070DF4 bne.s $00070DFC
00070DF6 clr.l D0
00070DF8 bra.w $00070F72 *OK!
00070DFC dbf D7,$00070DD8
00070E00 moveq #$FF,D0
00070E02 bra.w $00070F74 *걸렸다!
⁞
이것도 앞의 체커와 같습니다.
00070D92 moveq #$01,D7 (7E01)
00070D94 bsr.w $00070F18 (6100 0182)
00070D98 and.l #$FAFFFF00,D0 (C0BC FAFF FF00)
↓
00070D92 moveq #$00,D0 (7000)
00070D94 rts (4E75)
선두를 이렇게 바꾸는 것으로도 이미 제거되어버렸습니다. 그러면 마지막으로 모아봅시다. 우선, 프로그램 디스크에서
7E01 6100 0194
를 서치합니다. 그러면,
《 Track 11 》 3/370
이 되므로, 여기를 디스크 에디터로
4E75
로 바꿔줍니다. 다음으로
7E01 6100 0182
를 서치합니다. 그러면,
《 Track 31 》 7/192
이 되므로, 여기를 디스크 에디터로
7000 4E75
로 바꿔주면 OK입니다.







댓글 남기기