SecondReality/FCP/UNPACK.LST
2017-09-24 01:45:36 +02:00

739 lines
No EOL
29 KiB
Text
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 1
unpack.ASM
1 NOJUMPS
2
3 calccrc MACRO start,end
4 local l1
5 mov cx,OFFSET end-OFFSET start
6 mov si,OFFSET start
7 l1: add dl,cs:[si]
8 adc dh,0
9 rol dx,1
10 inc si
11 loop l1
12 ENDM
13 uncryptxor MACRO beg,key
14 local l1
15 mov bx,OFFSET beg
16 mov ax,key
17 mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2
18 l1: xor ds:[bx],ax
19 add bx,2
20 dec cx
21 jnz l1
22 ENDM
23 uncryptadd MACRO beg,key ;actually sub, uncrypts add-crypting
24 local l1
25 mov bx,OFFSET beg
26 mov ax,key
27 mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2
28 l1: sub ds:[bx],ax
29 add bx,2
30 dec cx
31 jnz l1
32 ENDM
33
34 0000 unp_text SEGMENT para public 'CODE'
35 ASSUME cs:unp_text
36 PUBLIC _unpack_start,_unpack_end
37 PUBLIC _unpack_data,_unpack_dataend,_unpack_data2,_unpack_code
38 PUBLIC _unpack_stack0,_unpack_stack1
39 PUBLIC _unpack_crc0,_unpack_crc1
40 PUBLIC _unpack_crypt1 ;add 5f27h - INC
41 PUBLIC _unpack_crypt2 ;xor 4493h - INC
42 PUBLIC _unpack_crypt3 ;add 0073h - INC
43 PUBLIC _unpack_crypt4 ;xor 4536h - none
44 PUBLIC _unpack_crypt10 ;xor 0666h - none
45 PUBLIC _unpack_crypt11 ;add 0656h - DEC
46 PUBLIC _unpack_crypt12 ;xor 0466h - DEC
47 PUBLIC _unpack_crypt13 ;add 0663h - none
48 PUBLIC _unpack_crypt14 ;add DX - none
49 PUBLIC _unpack_crypt15 ;xor 5cach - none
50 PUBLIC _unpack_crypt16 ;add 3fach - INC
51 PUBLIC _unpack_endcrypt
52 0000 _unpack_start LABEL BYTE
53
54 0000 46 43 50 2F 49 56 db 'FCP/IV' ;Future Protector IV
55
56 0006 _unpack_code LABEL BYTE
57 0006 startup PROC NEAR
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 2
unpack.ASM
58 0006 BC 0074r mov sp,OFFSET _unpack_stack1
59 0009 io21data LABEL BYTE
60 0009 C3 ret
61 000A pntds2 LABEL WORd
62 000A 2E: FF 2E 0468r jmp cs:[farjump+2]
63 000F startup ENDP
64 000F int_iret PROC FAR
65 000F CF iret
66 0010 int_iret ENDP
67
68 ALIGN 2
69 0010 _unpack_stack0 LABEL BYTE
70 0010 32*(5555) dw 50 dup(5555h)
71 0074 _unpack_stack1 LABEL BYTE
72 0074 0091r dw OFFSET step1
73 0076 0000 dw 0 ;popped by step 1 => DS
74 0078 0139r dw OFFSET step2
75 007A 00EBr dw OFFSET step3
76 007C 017Er dw OFFSEt step4
77 007E 017Ar stck1: dw OFFSET stepx1 ;the cracker blew it :-)
78 0080 FFF0 0000 dw 0fff0h,0000h
79 0084 0000 disk0 dw 0
80 0086 0000 disk1 dw 0
81 0088 1234 vram dw 01234h
82 008A 2E 3B 2A 0D 00 hboottxt db '.;*',13,0
83 008F 0000 pntds dw 0
84
85 0091 _unpack_crc0 LABEL BYTE
86
87 .386P
88 0091 step1 PROC NEAR
89 0091 E4 21 in al,21h
90 0093 2E: A2 0009r mov cs:io21data,al
91 0097 B0 FF mov al,255
92 0099 E6 21 out 21h,al
93 009B FA cli
94 009C 2E: 8C 1E 008Fr mov cs:pntds,ds
95 00A1 1F pop ds
96 00A2 FC cld
97 ;disk detect
98 00A3 B4 08 mov ah,08h
99 00A5 B2 80 mov dl,128
100 00A7 B6 00 mov dh,0
101 00A9 CD 13 int 13h
102 00AB 80 FE 00 cmp dh,0
103 00AE 74 0C 90 90 je jjj1
104 00B2 2E: 89 0E 0084r mov cs:disk0,cx
105 00B7 2E: 89 16 0086r mov cs:disk1,dx
106 00BC jjj1: ;video detect
107 00BC B4 0F mov ah,0fh
108 00BE CD 10 int 10h
109 00C0 3C 07 cmp al,7
110 00C2 74 09 90 90 je ismda
111 00C6 2E: C7 06 0088r 1A34 mov cs:vram,0800h+1234h
112 00CD 2E: 81 06 0088r 9DCC ismda: add cs:vram,0b000h-01234h
113 ;processor detect, at return: BP=0=real BP=1=protected mode
114 00D4 54 push sp ; 86/186 will push SP-2;
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 3
unpack.ASM
115 00D5 58 pop ax ; 286/386 will push SP.
116 00D6 3B C4 cmp ax, sp
117 00D8 74 06 90 90 jz not86 ; If equal, SP was pushed
118 ;8086/80186
119 00DC BD 0000 noprot: mov bp,0
120 00DF C3 ret
121 00E0 0F 01 E1 not86: smsw cx ; Protected? Machine status -> CX
122 00E3 D1 C9 ror cx,1 ; Protection bit -> carry flag
123 00E5 73 F5 jnc noprot ; Real mode if no carry
124 00E7 BD 0001 mov bp,1
125 00EA C3 ret
126 00EB step1 ENDP
127 .8086
128
129 00EB step3 PROC NEAR
130 ;DS=CS now (in step 2)
131 ;uncode crap
132 00EB 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX
133 00F1 CC int 3 ;clc set at step2's end
134 uncryptadd _unpack_crypt1,5f27h
1 135 00F2 BB 017Er mov bx,OFFSET _unpack_crypt1
1 136 00F5 B8 5F27 mov ax,5f27h
1 137 00F8 B9 018D mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt1)/2
1 138 00FB 29 07 ??0000: sub ds:[bx],ax
1 139 00FD 83 C3 02 add bx,2
1 140 0100 49 dec cx
1 141 0101 75 F8 jnz ??0000
142 0103 C3 ret
143 0104 step3 ENDP
144
145 0104 ints PROC FAR ;SingleStep/DEBUG
146 0104 F9 int_01: stc
147 0105 55 int_03: push bp
148 0106 8B EC mov bp,sp
149 0108 73 0E jnc int2
150 010A 53 push bx
151 010B 8B 5E 02 mov bx,ss:[bp+2] ;ip
152 010E 2E: 80 3F 49 cmp byte ptr cs:[bx],49h ;inc cx
153 0112 75 01 jne int1
154 0114 43 int1code: inc bx
155 0115 5B int1: pop bx
156 0116 5D int3: pop bp
157 0117 CF iret
158 0118 81 76 06 0100 int2: xor ss:[bp+6],256
159 011D 2E: 8B 2E 01ABr mov bp,cs:stck1to
160 0122 2E: 89 2E 007Er mov word ptr cs:[stck1],bp
161 0127 EB ED jmp int3
162 0129 ints000:
163 0129 ints ENDP
164
165 0129 _unpack_crc1 LABEL BYTE
166
167 0129 itable LABEL WORD
168 = 0004 itablelen equ 4
169 0129 000Fr F000 dw OFFSET int_iret,0f000h ;int 0
170 012D 0104r F000 dw OFFSET int_01,0f000h ;int 1
171 0131 000Fr F000 dw OFFSET int_iret,0f000h ;int 2
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 4
unpack.ASM
172 0135 0105r F000 dw OFFSET int_03,0f000h ;int 3
173 ;Stack contents on ints:
174 ; [bp+6]: flags
175 ; [bp+4]: cs
176 ; [bp+2]: ip
177 ; [bp+0]: bp
178
179 0139 _startzeroing LABEL BYTE
180
181 0139 step2 PROC NEAR ;WARNING! ROUTINE OVERWRITTEN BY INNER STACK
182 0139 2E: C6 06 008Ar 62 mov cs:hboottxt[0],'b'
183 ;set interrupts
184 013F BB 4647 mov bx,'FG'
185 0142 BE 0129r mov si,OFFSET itable
186 0145 33 FF xor di,di
187 0147 B9 0004 mov cx,itablelen
188 014A BA 4A4D mov dx,'JM'
189 014D 2E: C6 06 008Br 43 mov cs:hboottxt[1],'C'
190 0153 2E: st2a: segcs
191 0154 AD lodsw
192 0155 87 05 xchg ds:[di],ax
193 0157 2E: 89 44 FE mov cs:[si-2],ax
194 015B 8C C8 mov ax,cs
195 015D 87 45 02 xchg ds:[di+2],ax
196 0160 2E: 89 04 mov cs:[si],ax
197 0163 83 C6 02 add si,2
198 0166 83 C7 04 add di,4
199 0169 E2 E8 loop st2a
200 ;carry=0 for di won't rotate
201 016B 8B FA mov di,dx ;='JM'
202 016D BA 008Ar mov dx,OFFSET hboottxt
203 0170 8C C8 mov ax,cs
204 0172 8E D8 mov ds,ax
205 0174 8B F3 mov si,bx ;='FG' ;if this enabled, ICE will reboot
206 0176 B8 0911 mov ax,0911h
207 0179 C3 ret
208 017A step2 ENDP
209
210 017A stepx1 PROC NEAR
211 017A B8 F000 mov ax,0f000h
212 017D CB retf ;reboots
213 017E stepx1 ENDP
214
215 017E _unpack_crypt1 LABEL BYTE
216
217 017E step4 PROC NEAR
218 ;DS=CS
219 017E 2E: A1 008Fr mov ax,cs:pntds
220 0182 2E: A3 000Ar mov cs:pntds2,ax
221 uncryptxor _unpack_crypt2,4493h
1 222 0186 BB 0197r mov bx,OFFSET _unpack_crypt2
1 223 0189 B8 4493 mov ax,4493h
1 224 018C B9 0180 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt2)/2
1 225 018F 31 07 ??0001: xor ds:[bx],ax
1 226 0191 83 C3 02 add bx,2
1 227 0194 49 dec cx
1 228 0195 75 F8 jnz ??0001
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 5
unpack.ASM
229 0197 _unpack_crypt2 LABEL BYTE
230 uncryptadd _unpack_crypt3,0073h
1 231 0197 BB 01A8r mov bx,OFFSET _unpack_crypt3
1 232 019A B8 0073 mov ax,0073h
1 233 019D B9 0178 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt3)/2
1 234 01A0 29 07 ??0002: sub ds:[bx],ax
1 235 01A2 83 C3 02 add bx,2
1 236 01A5 49 dec cx
1 237 01A6 75 F8 jnz ??0002
238 01A8 _unpack_crypt3 LABEL BYTE
239 01A8 EB 08 90 jmp stp4o
240 01AB 01D6r stck1to dw OFFSET step5
241 01AD 42 63 2A 0D 00 hboottxt2 db 'Bc*',13,0
242 01B2 2B C0 stp4o: sub ax,ax
243 01B4 BE 4647 mov si,'FG'
244 01B7 BF 4A4D mov di,'JM'
245 01BA B8 0911 mov ax,0911h
246 01BD BA 01ADr mov dx,OFFSET hboottxt2
247 01C0 F8 clc
248 01C1 CC int 3
249 uncryptxor _unpack_crypt4,4536h
1 250 01C2 BB 01D4r mov bx,OFFSET _unpack_crypt4
1 251 01C5 B8 4536 mov ax,4536h
1 252 01C8 B9 0162 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt4)/2
1 253 01CB 31 07 ??0003: xor ds:[bx],ax
1 254 01CD 83 C3 02 add bx,2
1 255 01D0 49 dec cx
1 256 01D1 75 F8 jnz ??0003
257 01D3 C3 ret ;goes to step5
258 01D4 step4 ENDP
259
260 01D4 _unpack_crypt4 LABEL BYTE
261
262 01D4 innerstack LABEL BYTE
263 01D4 017Ar dw OFFSET stepx1
264
265 01D6 step5 PROC NEAR
266 ;enter inner stack
267 01D6 BC 01D4r mov sp,OFFSET innerstack
268 uncryptxor _unpack_crypt10,0666h
1 269 01D9 BB 01EAr mov bx,OFFSET _unpack_crypt10
1 270 01DC B8 0666 mov ax,0666h
1 271 01DF B9 0157 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt10)/2
1 272 01E2 31 07 ??0004: xor ds:[bx],ax
1 273 01E4 83 C3 02 add bx,2
1 274 01E7 49 dec cx
1 275 01E8 75 F8 jnz ??0004
276 01EA _unpack_crypt10 LABEL BYTE
277 01EA BA 0656 i1c0: mov dx,0656h
278 01ED 2B C0 sub ax,ax
279 01EF 8E C0 mov es,ax
280 01F1 26: A1 0006 mov ax,es:[6]
281 01F5 8C CB mov bx,cs
282 01F7 3B C3 cmp ax,bx
283 01F9 74 0A je i1c1
284 01FB 2E: C7 06 01EBr CA3F mov word ptr cs:[i1c0+1],0CA3Fh
285 0202 BA 3FC1 mov dx,3FC1H
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 6
unpack.ASM
286 0205 26: 81 3E 0004 0104r i1c1: cmp word ptr es:[4],OFFSET int_01
287 020C 74 0A je i1c2
288 020E 2E: C7 06 01EBr CA3F mov word ptr cs:[i1c0+1],0CA3Fh
289 0215 BA 3CF2 mov dx,3CF2H
290 0218 2E: C6 06 0114r 48 i1c2: mov byte ptr cs:int1code,48h ;DEC AX
291 021E 2B C0 sub ax,ax
292 0220 CC int 3
293 uncryptadd _unpack_crypt11,dx
1 294 0221 BB 0231r mov bx,OFFSET _unpack_crypt11
1 295 0224 8B C2 mov ax,dx
1 296 0226 B9 0133 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt11)/2
1 297 0229 29 07 ??0005: sub ds:[bx],ax
1 298 022B 83 C3 02 add bx,2
1 299 022E 49 dec cx
1 300 022F 75 F8 jnz ??0005
301 0231 _unpack_crypt11 LABEL BYTE
302 uncryptxor _unpack_crypt12,0466h
1 303 0231 BB 0242r mov bx,OFFSET _unpack_crypt12
1 304 0234 B8 0466 mov ax,0466h
1 305 0237 B9 012B mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt12)/2
1 306 023A 31 07 ??0006: xor ds:[bx],ax
1 307 023C 83 C3 02 add bx,2
1 308 023F 49 dec cx
1 309 0240 75 F8 jnz ??0006
310 0242 _unpack_crypt12 LABEL BYTE
311 0242 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX
312 0248 2B C0 sub ax,ax
313 024A CC int 3
314 uncryptadd _unpack_crypt13,0663h
1 315 024B BB 025Cr mov bx,OFFSET _unpack_crypt13
1 316 024E B8 0663 mov ax,0663h
1 317 0251 B9 011E mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt13)/2
1 318 0254 29 07 ??0007: sub ds:[bx],ax
1 319 0256 83 C3 02 add bx,2
1 320 0259 49 dec cx
1 321 025A 75 F8 jnz ??0007
322 025C _unpack_crypt13 LABEL BYTE
323 ;calc checksum of exe start
324 025C 33 D2 xor dx,dx
325 025E 2E: C6 06 0114r 43 mov byte ptr cs:int1code,43h ;INC BX
326 calccrc _unpack_crc0,_unpack_crc1
1 327 0264 B9 0098 mov cx,OFFSET _unpack_crc1-OFFSET _unpack_crc0
1 328 0267 BE 0091r mov si,OFFSET _unpack_crc0
1 329 026A 2E: 02 14 ??0008: add dl,cs:[si]
1 330 026D 80 D6 00 adc dh,0
1 331 0270 D1 C2 rol dx,1
1 332 0272 46 inc si
1 333 0273 E2 F5 loop ??0008
334 uncryptadd _unpack_crypt14,0 ;dx
1 335 0275 BB 0286r mov bx,OFFSET _unpack_crypt14
1 336 0278 B8 0000 mov ax,0
1 337 027B B9 0109 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt14)/2
1 338 027E 29 07 ??0009: sub ds:[bx],ax
1 339 0280 83 C3 02 add bx,2
1 340 0283 49 dec cx
1 341 0284 75 F8 jnz ??0009
342 0286 _unpack_crypt14 LABEL BYTE
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 7
unpack.ASM
343 uncryptxor _unpack_crypt15,5CACh
1 344 0286 BB 0297r mov bx,OFFSET _unpack_crypt15
1 345 0289 B8 5CAC mov ax,5CACh
1 346 028C B9 0100 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt15)/2
1 347 028F 31 07 ??000A: xor ds:[bx],ax
1 348 0291 83 C3 02 add bx,2
1 349 0294 49 dec cx
1 350 0295 75 F8 jnz ??000A
351 0297 _unpack_crypt15 LABEL BYTE
352 0297 2E: C6 06 0114r 40 mov byte ptr cs:int1code,40h ;INC AX
353 029D 2B C0 sub ax,ax
354 029F CC int 3
355 uncryptadd _unpack_crypt16,3FACh
1 356 02A0 BB 02B1r mov bx,OFFSET _unpack_crypt16
1 357 02A3 B8 3FAC mov ax,3FACh
1 358 02A6 B9 00F3 mov cx,(OFFSET _unpack_endcrypt-OFFSET _unpack_crypt16)/2
1 359 02A9 29 07 ??000B: sub ds:[bx],ax
1 360 02AB 83 C3 02 add bx,2
1 361 02AE 49 dec cx
1 362 02AF 75 F8 jnz ??000B
363 02B1 _unpack_crypt16 LABEL BYTE
364 02B1 2E: C7 06 01D4r + mov word ptr cs:innerstack,OFFSET execute
365 02BCr
366 02B8 2B C0 sub ax,ax
367 02BA CC int 3
368 02BB C3 ret
369 02BC step5 ENDP
370
371 ALIGN 2
372
373 02BC execute PROC NEAR
374 ;unpack data
375 02BC 2E: 8B 16 000Ar mov dx,cs:pntds2
376 02C1 83 C2 10 add dx,10h
377 02C4 33 F6 xor si,si
378 02C6 33 FF xor di,di
379 02C8 2E: 83 3E 0482r 00 cmp cs:mcrcon,0
380 02CE 74 21 je exec11
381 ;calc machine crc
382 02D0 B8 FF00 mov ax,0ff00h
383 02D3 8E D8 mov ds,ax
384 02D5 BB 0000 mov bx,0
385 02D8 B9 0400 mov cx,1024
386 02DB 03 37 mcrc1: add si,ds:[bx]
387 02DD 03 7F 02 add di,ds:[bx+2]
388 02E0 D1 C6 rol si,1
389 02E2 83 C3 04 add bx,4
390 02E5 E2 F4 loop mcrc1
391 02E7 2E: 03 36 0084r add si,cs:disk0
392 02EC 2E: 03 3E 0086r add di,cs:disk1
393 02F1 2E: 03 36 0466r exec11: add si,cs:regcs
394 02F6 2E: 03 3E 0468r add di,cs:regip
395 02FB 2E: 03 36 046Cr add si,cs:regsp
396 0300 2E: 03 3E 046Ar add di,cs:regss
397 0305 2E: 03 36 0480r add si,cs:regkey
398 030A 2E: 03 3E 0480r add di,cs:regkey
399 030F 2E: 8B 0E 046Er mov cx,cs:regcs0
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 8
unpack.ASM
400 0314 8E DA exec1: mov ds,dx
401 0316 29 36 0000 sub ds:[0],si
402 031A 29 3E 0002 sub ds:[2],di
403 031E 81 F6 5354 xor si,5354h
404 0322 81 F7 1525 xor di,1525h
405 0326 29 36 0004 sub ds:[4],si
406 032A 29 3E 0006 sub ds:[6],di
407 032E 81 C6 1234 add si,1234h
408 0332 D1 CE ror si,1
409 0334 81 C7 4321 add di,4321h
410 0338 D1 C7 rol di,1
411 033A 29 36 0008 sub ds:[8],si
412 033E 29 3E 000A sub ds:[10],di
413 0342 81 F6 5354 xor si,5354h
414 0346 81 F7 1525 xor di,1525h
415 034A 29 36 000C sub ds:[12],si
416 034E 29 3E 000E sub ds:[14],di
417 0352 81 C6 1234 add si,1234h
418 0356 D1 CE ror si,1
419 0358 81 C7 4321 add di,4321h
420 035C D1 C7 rol di,1
421 035E 42 inc dx
422 035F 03 36 0000 add si,ds:[0]
423 0363 03 3E 0008 add di,ds:[8]
424 0367 03 36 0002 add si,ds:[2]
425 036B 03 3E 000A add di,ds:[10]
426 036F 03 36 0004 add si,ds:[4]
427 0373 03 3E 000C add di,ds:[12]
428 0377 03 36 0006 add si,ds:[6]
429 037B 03 3E 000E add di,ds:[14]
430 037F E2 93 loop exec1
431 0381 BD 0470r mov bp,OFFSET errormsg1
432 0384 2E: 3B 36 0484r cmp si,cs:keychk0
433 0389 75 7D jne error
434 038B 2E: 3B 3E 0486r cmp di,cs:keychk1
435 0390 75 76 jne error
436 0392 FC cld
437 0393 _endzeroing LABEL BYTE ;may overflow a byte, but who cares
438 0393 2E: 8B 16 000Ar mov dx,cs:pntds2
439 0398 8C C8 mov ax,cs
440 039A 8E C0 mov es,ax
441 039C B9 012D mov cx,(OFFSET _endzeroing-OFFSET _startzeroing+1)/2
442 039F BF 0139r mov di,OFFSET _startzeroing
443 03A2 B8 2E2E mov ax,'..'
444 03A5 F3> AB rep stosw
445 03A7 E8 00A9 call resetints
446 03AA 2E: A0 0009r mov al,cs:io21data
447 03AE E6 21 out 21h,al
448 03B0 8C C8 mov ax,cs
449 03B2 8E C0 mov es,ax
450 03B4 B9 0133 mov cx,OFFSET _startzeroing-OFFSET _unpack_code
451 03B7 BF 0006r mov di,OFFSET _unpack_code
452 03BA B0 2E mov al,'.'
453 03BC F3> AA rep stosb
454 ;load stack and cs:ip for the actual program and run it.
455 03BE 8E DA mov ds,dx
456 03C0 8E C2 mov es,dx
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 9
unpack.ASM
457 03C2 8C CB mov bx,cs
458 03C4 2E: 8B 0E 046Er mov cx,cs:regcs0
459 03C9 2E: A1 046Ar mov ax,cs:regss
460 03CD 03 C3 add ax,bx
461 03CF 2B C1 sub ax,cx
462 03D1 8E D0 mov ss,ax
463 03D3 2E: 8B 26 046Cr mov sp,cs:regsp
464 03D8 2E: 01 1E 0466r add cs:regcs,bx
465 03DD 2E: 29 0E 0466r sub cs:regcs,cx
466 03E2 2E: FF 36 0466r push cs:regcs
467 03E7 2E: FF 36 0468r push cs:regip
468 03EC 2E: A3 0466r mov cs:regcs,ax
469 03F0 2E: A3 0468r mov cs:regip,ax
470 03F4 2E: A3 046Ar mov cs:regss,ax
471 03F8 2E: A3 046Er mov cs:regcs0,ax
472 03FC 2E: A3 0486r mov cs:keychk1,ax
473 0400 2E: A3 0480r mov cs:regkey,ax
474 0404 FB sti
475 0405 E9 008F jmp endprg2
476
477 0408 _endzeroing2 LABEL BYTE
478 0408 error: ;destroy and exit with error at OFFSET BP
479 0408 FC cld
480 0409 2E: 8B 16 000Ar mov dx,cs:pntds2
481 040E 8C C8 mov ax,cs
482 0410 8E C0 mov es,ax
483 0412 B9 0168 mov cx,(OFFSET _endzeroing2-OFFSET _startzeroing+1)/2
484 0415 BF 0139r mov di,OFFSET _startzeroing
485 0418 B8 2E2E mov ax,'..'
486 041B F3> AB rep stosw
487 041D E8 0033 call resetints
488 0420 2E: A0 0009r mov al,cs:io21data
489 0424 E6 21 out 21h,al
490 0426 8C C8 mov ax,cs
491 0428 8E C0 mov es,ax
492 042A BF 0006r mov di,OFFSET _unpack_code
493 042D B9 0133 mov cx,OFFSET _startzeroing-OFFSET _unpack_code
494 0430 B0 2E mov al,'.'
495 0432 F3> AA rep stosb
496 0434 2E: A3 0466r mov cs:regcs,ax
497 0438 2E: A3 0468r mov cs:regip,ax
498 043C 2E: A3 046Ar mov cs:regss,ax
499 0440 2E: A3 046Er mov cs:regcs0,ax
500 0444 2E: A3 0486r mov cs:keychk1,ax
501 0448 2E: A3 0480r mov cs:regkey,ax
502 044C BC 0466r mov sp,OFFSET _unpack_data
503 044F FB sti
504 0450 EB 36 90 jmp endprg1
505 0453 execute ENDP
506
507 0453 resetints PROC NEAR
508 ;reset interrupts
509 0453 33 C0 xor ax,ax
510 0455 8E C0 mov es,ax
511 0457 BE 0129r mov si,OFFSET itable
512 045A 33 FF xor di,di
513 045C B9 0008 mov cx,itablelen*2
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 10
unpack.ASM
514 045F 2E: st20a: segcs
515 0460 AD lodsw
516 0461 AB stosw
517 0462 E2 FB loop st20a
518 0464 C3 ret
519 0465 resetints ENDP
520
521 0465 90 ALIGN 2
522 0466 _unpack_data LABEL BYTE
523 0466 farjump LABEL DWORD
524 0466 0000 regcs dw 0
525 0468 0000 regip dw 0
526 046A 0000 regss dw 0
527 046C 0000 regsp dw 0
528 046E 0000 regcs0 dw 0
529 0470 46 69 6C 65 20 63 6F+ errormsg1 db 'File corrupted!$'
530 72 72 75 70 74 65 64+
531 21 24
532 0480 _unpack_data2 LABEL BYTE
533 0480 0000 regkey dw 0
534 0482 0000 mcrcon dw 0 ;1=machine crc enabled
535 0484 0000 keychk0 dw 0
536 0486 0000 keychk1 dw 0
537 0488 _unpack_dataend LABEL BYTE
538
539 ALIGN 2
540
541 0488 endprg1: ;****************
542 0488 8B D5 mov dx,bp
543 048A 8C C8 mov ax,cs
544 048C 8E D8 mov ds,ax
545 048E B4 09 mov ah,9h
546 0490 CD 21 int 21h
547 0492 B8 4C03 mov ax,4c03h
548 0495 CD 21 int 21h
549 0497 endprg2: ;****************
550 0497 CB retf
551
552 ALIGN 2
553 0498 _unpack_endcrypt LABEL BYTE
554 0498 00 FC db 000h,0fch
555 049A _unpack_end LABEL BYTE
556 049A unp_text ENDS
557 END
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 11
Symbol Table
Symbol Name Type Value
??0000 Near UNP_TEXT:00FB
??0001 Near UNP_TEXT:018F
??0002 Near UNP_TEXT:01A0
??0003 Near UNP_TEXT:01CB
??0004 Near UNP_TEXT:01E2
??0005 Near UNP_TEXT:0229
??0006 Near UNP_TEXT:023A
??0007 Near UNP_TEXT:0254
??0008 Near UNP_TEXT:026A
??0009 Near UNP_TEXT:027E
??000A Near UNP_TEXT:028F
??000B Near UNP_TEXT:02A9
??DATE Text "05/06/93"
??FILENAME Text "unpack "
??TIME Text "20:32:49"
??VERSION Number 0205
@CPU Text 0101H
@CURSEG Text UNP_TEXT
@FILENAME Text UNPACK
@WORDSIZE Text 2
DISK0 Word UNP_TEXT:0084
DISK1 Word UNP_TEXT:0086
ENDPRG1 Near UNP_TEXT:0488
ENDPRG2 Near UNP_TEXT:0497
ERROR Near UNP_TEXT:0408
ERRORMSG1 Byte UNP_TEXT:0470
EXEC1 Near UNP_TEXT:0314
EXEC11 Near UNP_TEXT:02F1
EXECUTE Near UNP_TEXT:02BC
FARJUMP Dword UNP_TEXT:0466
HBOOTTXT Byte UNP_TEXT:008A
HBOOTTXT2 Byte UNP_TEXT:01AD
I1C0 Near UNP_TEXT:01EA
I1C1 Near UNP_TEXT:0205
I1C2 Near UNP_TEXT:0218
INNERSTACK Byte UNP_TEXT:01D4
INT1 Near UNP_TEXT:0115
INT1CODE Near UNP_TEXT:0114
INT2 Near UNP_TEXT:0118
INT3 Near UNP_TEXT:0116
INTS Far UNP_TEXT:0104
INTS000 Near UNP_TEXT:0129
INT_01 Near UNP_TEXT:0104
INT_03 Near UNP_TEXT:0105
INT_IRET Far UNP_TEXT:000F
IO21DATA Byte UNP_TEXT:0009
ISMDA Near UNP_TEXT:00CD
ITABLE Word UNP_TEXT:0129
ITABLELEN Number 0004
JJJ1 Near UNP_TEXT:00BC
KEYCHK0 Word UNP_TEXT:0484
KEYCHK1 Word UNP_TEXT:0486
MCRC1 Near UNP_TEXT:02DB
MCRCON Word UNP_TEXT:0482
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 12
Symbol Table
NOPROT Near UNP_TEXT:00DC
NOT86 Near UNP_TEXT:00E0
PNTDS Word UNP_TEXT:008F
PNTDS2 Word UNP_TEXT:000A
REGCS Word UNP_TEXT:0466
REGCS0 Word UNP_TEXT:046E
REGIP Word UNP_TEXT:0468
REGKEY Word UNP_TEXT:0480
REGSP Word UNP_TEXT:046C
REGSS Word UNP_TEXT:046A
RESETINTS Near UNP_TEXT:0453
ST20A Near UNP_TEXT:045F
ST2A Near UNP_TEXT:0153
STARTUP Near UNP_TEXT:0006
STCK1 Near UNP_TEXT:007E
STCK1TO Word UNP_TEXT:01AB
STEP1 Near UNP_TEXT:0091
STEP2 Near UNP_TEXT:0139
STEP3 Near UNP_TEXT:00EB
STEP4 Near UNP_TEXT:017E
STEP5 Near UNP_TEXT:01D6
STEPX1 Near UNP_TEXT:017A
STP4O Near UNP_TEXT:01B2
VRAM Word UNP_TEXT:0088
_ENDZEROING Byte UNP_TEXT:0393
_ENDZEROING2 Byte UNP_TEXT:0408
_STARTZEROING Byte UNP_TEXT:0139
_UNPACK_CODE Byte UNP_TEXT:0006
_UNPACK_CRC0 Byte UNP_TEXT:0091
_UNPACK_CRC1 Byte UNP_TEXT:0129
_UNPACK_CRYPT1 Byte UNP_TEXT:017E
_UNPACK_CRYPT10 Byte UNP_TEXT:01EA
_UNPACK_CRYPT11 Byte UNP_TEXT:0231
_UNPACK_CRYPT12 Byte UNP_TEXT:0242
_UNPACK_CRYPT13 Byte UNP_TEXT:025C
_UNPACK_CRYPT14 Byte UNP_TEXT:0286
_UNPACK_CRYPT15 Byte UNP_TEXT:0297
_UNPACK_CRYPT16 Byte UNP_TEXT:02B1
_UNPACK_CRYPT2 Byte UNP_TEXT:0197
_UNPACK_CRYPT3 Byte UNP_TEXT:01A8
_UNPACK_CRYPT4 Byte UNP_TEXT:01D4
_UNPACK_DATA Byte UNP_TEXT:0466
_UNPACK_DATA2 Byte UNP_TEXT:0480
_UNPACK_DATAEND Byte UNP_TEXT:0488
_UNPACK_END Byte UNP_TEXT:049A
_UNPACK_ENDCRYPT Byte UNP_TEXT:0498
_UNPACK_STACK0 Byte UNP_TEXT:0010
_UNPACK_STACK1 Byte UNP_TEXT:0074
_UNPACK_START Byte UNP_TEXT:0000
Macro Name
CALCCRC
UNCRYPTADD
UNCRYPTXOR
Turbo Assembler Version 2.5 05/06/93 20:32:49 Page 13
Symbol Table
Groups & Segments Bit Size Align Combine Class
UNP_TEXT 16 049A Para Public CODE