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