739 lines
No EOL
29 KiB
Text
739 lines
No EOL
29 KiB
Text
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
|
||
|