Upload
This commit is contained in:
commit
43352ff262
1291 changed files with 220976 additions and 0 deletions
8
FCP/FCP
Normal file
8
FCP/FCP
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
|
||||
unpack.obj : unpack.asm
|
||||
tasm /ML /m unpack.asm
|
||||
|
||||
fcprot.exe : pack.c unpack.obj
|
||||
cl /qc /W3 /AL /c pack.c
|
||||
link /E pack.obj+unpack.obj,fcprot.exe,fcp.map;
|
||||
|
||||
3
FCP/FCP.BAT
Normal file
3
FCP/FCP.BAT
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
echo off
|
||||
copy prottest.bbk prottest.exe
|
||||
fcprot prottest %1
|
||||
45
FCP/FCP.MAP
Normal file
45
FCP/FCP.MAP
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
|
||||
Start Stop Length Name Class
|
||||
00000H 010CAH 010CBH PACK_TEXT CODE
|
||||
010D0H 01561H 00492H unp_text CODE
|
||||
01562H 044B6H 02F55H _TEXT CODE
|
||||
044C0H 044C1H 00002H EMULATOR_TEXT CODE
|
||||
044C2H 044C2H 00000H C_ETEXT ENDCODE
|
||||
044D0H 044D0H 00000H EMULATOR_DATA FAR_DATA
|
||||
044D0H 0A4D3H 06004H FAR_BSS FAR_BSS
|
||||
0A4E0H 0A521H 00042H NULL BEGDATA
|
||||
0A522H 0A9E1H 004C0H _DATA DATA
|
||||
0A9E2H 0A9E3H 00002H XIQC DATA
|
||||
0A9E4H 0A9F1H 0000EH DBDATA DATA
|
||||
0A9F2H 0A9FFH 0000EH CDATA DATA
|
||||
0AA00H 0AA00H 00000H XIFB DATA
|
||||
0AA00H 0AA00H 00000H XIF DATA
|
||||
0AA00H 0AA00H 00000H XIFE DATA
|
||||
0AA00H 0AA00H 00000H XIB DATA
|
||||
0AA00H 0AA00H 00000H XI DATA
|
||||
0AA00H 0AA00H 00000H XIE DATA
|
||||
0AA00H 0AA00H 00000H XPB DATA
|
||||
0AA00H 0AA03H 00004H XP DATA
|
||||
0AA04H 0AA04H 00000H XPE DATA
|
||||
0AA04H 0AA04H 00000H XCB DATA
|
||||
0AA04H 0AA04H 00000H XC DATA
|
||||
0AA04H 0AA04H 00000H XCE DATA
|
||||
0AA04H 0AA04H 00000H XCFB DATA
|
||||
0AA04H 0AA04H 00000H XCF DATA
|
||||
0AA04H 0AA04H 00000H XCFE DATA
|
||||
0AA04H 0ABDBH 001D8H CONST CONST
|
||||
0ABDCH 0ABE3H 00008H HDR MSG
|
||||
0ABE4H 0ACB9H 000D6H MSG MSG
|
||||
0ACBAH 0ACBBH 00002H PAD MSG
|
||||
0ACBCH 0ACBCH 00001H EPAD MSG
|
||||
0ACBEH 0ACCBH 0000EH _BSS BSS
|
||||
0ACCCH 0ACCCH 00000H XOB BSS
|
||||
0ACCCH 0ACCCH 00000H XO BSS
|
||||
0ACCCH 0ACCCH 00000H XOE BSS
|
||||
0ACD0H 0AECFH 00200H c_common BSS
|
||||
0AED0H 0B6CFH 00800H STACK STACK
|
||||
|
||||
Origin Group
|
||||
0A4E:0 DGROUP
|
||||
|
||||
Program entry point at 0156:0012
|
||||
BIN
FCP/FCPROT.EXE
Normal file
BIN
FCP/FCPROT.EXE
Normal file
Binary file not shown.
BIN
FCP/FCPROT.OLD
Normal file
BIN
FCP/FCPROT.OLD
Normal file
Binary file not shown.
BIN
FCP/K.OBJ
Normal file
BIN
FCP/K.OBJ
Normal file
Binary file not shown.
3
FCP/KOE.BAT
Normal file
3
FCP/KOE.BAT
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
:alku
|
||||
exe2
|
||||
goto alku
|
||||
1
FCP/MAKE.BAT
Normal file
1
FCP/MAKE.BAT
Normal file
|
|
@ -0,0 +1 @@
|
|||
c:\dos\prg\make fcp
|
||||
BIN
FCP/MAP.EXE
Normal file
BIN
FCP/MAP.EXE
Normal file
Binary file not shown.
BIN
FCP/MAP.OLD
Normal file
BIN
FCP/MAP.OLD
Normal file
Binary file not shown.
358
FCP/PACK.C
Normal file
358
FCP/PACK.C
Normal file
|
|
@ -0,0 +1,358 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <process.h>
|
||||
|
||||
extern char unpack_start,unpack_end;
|
||||
extern char unpack_crc0,unpack_crc1;
|
||||
extern char unpack_stack0,unpack_stack1;
|
||||
extern char unpack_data,unpack_dataend,unpack_data2,unpack_code;
|
||||
extern char unpack_crypt1;
|
||||
extern char unpack_crypt2;
|
||||
extern char unpack_crypt3;
|
||||
extern char unpack_crypt4;
|
||||
extern char unpack_crypt10;
|
||||
extern char unpack_crypt11;
|
||||
extern char unpack_crypt12;
|
||||
extern char unpack_crypt13;
|
||||
extern char unpack_crypt14;
|
||||
extern char unpack_crypt15;
|
||||
extern char unpack_crypt16;
|
||||
extern char unpack_endcrypt;
|
||||
int unpack_len,unpack_stacklen;
|
||||
|
||||
int protect(FILE *fin,FILE *fout,int lastone);
|
||||
|
||||
int lzexeoff=0;
|
||||
|
||||
int exerand(void)
|
||||
{
|
||||
int a;
|
||||
a=rand();
|
||||
if(a<4096) return(0);
|
||||
else if(a<8192) return(rand()&0xf);
|
||||
else if(a<16384) return(rand()&0x7f);
|
||||
else return(rand());
|
||||
}
|
||||
|
||||
void error(int a)
|
||||
{
|
||||
switch(a)
|
||||
{
|
||||
case 0 : printf("Done!\n"); break;
|
||||
case 1 : printf("File not packed with LZEXE!\n");
|
||||
if(lzexeoff) return;
|
||||
break;
|
||||
case 2 : printf("File input/output error!\n"); break;
|
||||
case 3 : printf("Internal error #1\n"); break;
|
||||
case 4 : printf("Internal error #2\n"); break;
|
||||
case 5 : printf("File open error!\n"); break;
|
||||
default : printf("Unknown error!\n"); break;
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
char storage[8192];
|
||||
|
||||
long mcrc=0;
|
||||
int mcrcon=0;
|
||||
int passes=2;
|
||||
|
||||
main(int argc,char *argv[])
|
||||
{
|
||||
FILE *fin,*fout;
|
||||
char str1[64],str2[64],str3[64];
|
||||
int a;
|
||||
time_t tm;
|
||||
|
||||
/* logotexts */
|
||||
printf("Future Protector IV Release 1.1 Copyright (C) 1991 Sami Tammilehto\n");
|
||||
if(argc==1)
|
||||
{
|
||||
printf("To use. Use. Illegal use prohibited. Legal switches allowed.\n");
|
||||
return(0);
|
||||
}
|
||||
for(a=1;a<argc;a++) if(*argv[a]=='/' || *argv[a]=='-') switch(*(argv[a]+1))
|
||||
{
|
||||
case '?' :
|
||||
case 'H' :
|
||||
//printf("-m######## machine dependant crypt code entry\n");
|
||||
printf("-l skip LZEXE checks\n");
|
||||
printf("-1 one pass only\n");
|
||||
return(0);
|
||||
case '1' :
|
||||
passes=1;
|
||||
break;
|
||||
case 'm' :
|
||||
case 'M' :
|
||||
mcrcon=1;
|
||||
if(strlen(argv[a])>10) *(argv[a]+2+8)=0;
|
||||
sscanf(argv[a]+2,"%lX",&mcrc);
|
||||
case 'l' :
|
||||
lzexeoff=1;
|
||||
break;
|
||||
}
|
||||
|
||||
/* inits */
|
||||
unpack_len=&unpack_end-&unpack_start;
|
||||
if(unpack_len>4000) error(4);
|
||||
unpack_stacklen=&unpack_stack1-&unpack_stack0;
|
||||
srand((unsigned)time(&tm));
|
||||
|
||||
memcpy(storage,&unpack_start,unpack_len);
|
||||
|
||||
/* filenames/backup handling */
|
||||
if(strchr(argv[1],'.')) *strchr(argv[1],'.')=0;
|
||||
strupr(argv[1]);
|
||||
strcpy(str1,argv[1]);
|
||||
strcat(str1,".OLD");
|
||||
strcpy(str2,argv[1]);
|
||||
strcat(str2,".TMP");
|
||||
strcpy(str3,argv[1]);
|
||||
strcat(str3,".EXE");
|
||||
if(passes==1)
|
||||
{
|
||||
strcpy(str2,str3);
|
||||
}
|
||||
{
|
||||
FILE *f1;
|
||||
printf("Opening %s\n",str3);
|
||||
f1=fopen(str3,"rb");
|
||||
if(f1==NULL) error(5);
|
||||
for(a=0;a<28;a++) fgetc(f1);
|
||||
if(fgetc(f1)!='L') error(1);
|
||||
else if(fgetc(f1)!='Z') error(1);
|
||||
else if(fgetc(f1)!='9') error(1);
|
||||
else if(fgetc(f1)!='1') error(1);
|
||||
fclose(f1);
|
||||
}
|
||||
remove(str1);
|
||||
rename(str3,str1);
|
||||
remove(str2);
|
||||
printf("Protecting %s (backup saved as %s).\n",str3,str1);
|
||||
printf("Size increase %i bytes. ",2*(&unpack_end-&unpack_start));
|
||||
if(mcrc)
|
||||
{
|
||||
printf("Machine code %08lXh entered. ",mcrc);
|
||||
}
|
||||
printf("\n");
|
||||
/* protect */
|
||||
fin=fopen(str1,"rb");
|
||||
fout=fopen(str2,"wb");
|
||||
printf("%s->%s\n",str1,str2);
|
||||
if(!fin || !fout) error(2);
|
||||
a=protect(fin,fout,0);
|
||||
if(a) error(a);
|
||||
fclose(fin);
|
||||
fclose(fout);
|
||||
if(passes>1)
|
||||
{
|
||||
/* pass 2 */
|
||||
memcpy(&unpack_start,storage,unpack_len);
|
||||
fin=fopen(str2,"rb");
|
||||
fout=fopen(str3,"wb");
|
||||
printf("%s->%s\n",str2,str3);
|
||||
if(!fin || !fout) error(2);
|
||||
a=protect(fin,fout,1/*final*/);
|
||||
if(a) error(a);
|
||||
fclose(fin);
|
||||
fclose(fout);
|
||||
remove(str2); /* remove tmp */
|
||||
}
|
||||
/* return, 0 for no errors */
|
||||
return(a);
|
||||
}
|
||||
|
||||
int calccrc(char *start,char *end)
|
||||
{
|
||||
unsigned char *p;
|
||||
int len=end-start;
|
||||
int crc=0,a;
|
||||
p=(char *)start;
|
||||
for(a=0;a<len;a++)
|
||||
{
|
||||
crc+=*(p++);
|
||||
_asm
|
||||
{
|
||||
mov ax,crc
|
||||
rol ax,1
|
||||
mov crc,ax
|
||||
}
|
||||
}
|
||||
return(crc);
|
||||
}
|
||||
|
||||
int crypt(int type,char *start,unsigned key)
|
||||
{
|
||||
int a,e;
|
||||
unsigned *ip=(unsigned *)start;
|
||||
e=(&unpack_endcrypt-start)/2;
|
||||
if(type==0) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]+=key;
|
||||
}
|
||||
else if(type==1) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]^=key;
|
||||
}
|
||||
else if(type==10+0) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]+=key;
|
||||
key++;
|
||||
}
|
||||
else if(type==10+1) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]^=key;
|
||||
key++;
|
||||
}
|
||||
else if(type==20+0) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]+=key;
|
||||
key--;
|
||||
}
|
||||
else if(type==20+1) for(a=0;a<e;a++)
|
||||
{
|
||||
ip[a]^=key;
|
||||
key--;
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
int protect(FILE *fin,FILE *fout,int lastone)
|
||||
{
|
||||
int regkey=rand();
|
||||
int key1=0x1234,key2=0x4321;
|
||||
static char tmp[16384];
|
||||
int *ip=(int *)tmp;
|
||||
int cnt,a,b1,b2,amax;
|
||||
unsigned int u;
|
||||
long l;
|
||||
unsigned cs0para;
|
||||
unsigned header[16];
|
||||
|
||||
fread(header,2,16,fin);
|
||||
|
||||
fwrite(header,2,16,fout);
|
||||
key1=header[11]+header[8]+regkey;
|
||||
key2=header[10]+header[7]+regkey;
|
||||
if(mcrc)
|
||||
{
|
||||
key1+=mcrc&65535L;
|
||||
key2+=mcrc>>16L;
|
||||
}
|
||||
while(!ferror(fin) && !ferror(fout))
|
||||
{
|
||||
cnt=fread(tmp,1,16384,fin);
|
||||
if(cnt==0) break;
|
||||
if(cnt<16384)
|
||||
{
|
||||
for(cnt;cnt&15;cnt++)
|
||||
{
|
||||
tmp[cnt]=(char)exerand();
|
||||
}
|
||||
}
|
||||
if(cnt&15) return(3);
|
||||
amax=cnt/2;
|
||||
for(a=0;a<amax;a+=8)
|
||||
{ /* crypt tmp */
|
||||
b1=ip[a+0]+ip[a+1]+ip[a+2]+ip[a+3];
|
||||
b2=ip[a+4]+ip[a+5]+ip[a+6]+ip[a+7];
|
||||
ip[a+0]+=key1;
|
||||
ip[a+1]+=key2;
|
||||
key1^=0x5354;
|
||||
key2^=0x1525;
|
||||
ip[a+2]+=key1;
|
||||
ip[a+3]+=key2;
|
||||
_asm
|
||||
{
|
||||
mov ax,key1
|
||||
add ax,1234h
|
||||
ror ax,1
|
||||
mov key1,ax
|
||||
mov ax,key2
|
||||
add ax,4321h
|
||||
rol ax,1
|
||||
mov key2,ax
|
||||
}
|
||||
ip[a+4]+=key1;
|
||||
ip[a+5]+=key2;
|
||||
key1^=0x5354;
|
||||
key2^=0x1525;
|
||||
ip[a+6]+=key1;
|
||||
ip[a+7]+=key2;
|
||||
_asm
|
||||
{
|
||||
mov ax,key1
|
||||
add ax,1234h
|
||||
ror ax,1
|
||||
mov key1,ax
|
||||
mov ax,key2
|
||||
add ax,4321h
|
||||
rol ax,1
|
||||
mov key2,ax
|
||||
}
|
||||
key1+=b1;
|
||||
key2+=b2;
|
||||
}
|
||||
fwrite(tmp,1,cnt,fout);
|
||||
}
|
||||
if(ferror(fin) || ferror(fout)) return(2);
|
||||
l=ftell(fout); cs0para=(unsigned)(l>>4)-2;
|
||||
|
||||
/* modify unpacker code */
|
||||
{
|
||||
unsigned *p;
|
||||
p=(unsigned *)&unpack_data;
|
||||
/* set data1 (addresses) */
|
||||
p[0]=header[11]; /* cs */
|
||||
p[1]=header[10]; /* ip */
|
||||
p[2]=header[7]; /* ss */
|
||||
p[3]=header[8]; /* sp */
|
||||
p[4]=cs0para; /* cs0 */
|
||||
/* set data2 */
|
||||
p=(unsigned *)&unpack_data2;
|
||||
p[0]=regkey; /* key */
|
||||
p[1]=mcrcon; /* MACHINE CRC? */
|
||||
p[2]=key1; /* key */
|
||||
p[3]=key2; /* key */
|
||||
/* randomize stack */
|
||||
for(a=0;a<unpack_stacklen-2;a++) *(&unpack_stack0+a)=(char)exerand();
|
||||
/* crypt */
|
||||
u=calccrc(&unpack_crc0,&unpack_crc1);
|
||||
crypt(10/*+add*/,&unpack_crypt16,0x3fac);
|
||||
crypt( 1/* xor*/,&unpack_crypt15,0x5cac);
|
||||
crypt( 0/* add*/,&unpack_crypt14,0 /*u*/);
|
||||
crypt( 0/* add*/,&unpack_crypt13,0x0663);
|
||||
crypt(21/*-xor*/,&unpack_crypt12,0x0466);
|
||||
crypt(20/*-add*/,&unpack_crypt11,0x0656);
|
||||
crypt( 1/* xor*/,&unpack_crypt10,0x0666);
|
||||
crypt( 1/* xor*/,&unpack_crypt4,0x4536);
|
||||
crypt(10/*+add*/,&unpack_crypt3,0x0073);
|
||||
crypt(11/*+xor*/,&unpack_crypt2,0x4493);
|
||||
crypt(10/*+add*/,&unpack_crypt1,0x5f27);
|
||||
}
|
||||
/* save unpacker */
|
||||
fwrite(&unpack_start,1,unpack_len,fout);
|
||||
if(ferror(fout)) return(2);
|
||||
|
||||
/* modify header */
|
||||
l=ftell(fout)-1;
|
||||
header[2]=(unsigned)(l/512)+1;
|
||||
header[1]=(unsigned)l&511;
|
||||
header[11]=header[7]=cs0para; /* cs/ss */
|
||||
header[10]=&unpack_code-&unpack_start; /* ip */
|
||||
header[8]=&unpack_stack1-&unpack_start; /* sp */
|
||||
if(lastone)
|
||||
{
|
||||
header[14]=0;
|
||||
header[15]=0;
|
||||
}
|
||||
/* save header */
|
||||
fseek(fout,0L,SEEK_SET);
|
||||
fwrite(header,2,16,fout);
|
||||
if(ferror(fout)) return(2);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
BIN
FCP/PACK.OBJ
Normal file
BIN
FCP/PACK.OBJ
Normal file
Binary file not shown.
104
FCP/PRINT.C
Normal file
104
FCP/PRINT.C
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
main(int argc,char *argv[])
|
||||
{
|
||||
FILE *f1;
|
||||
extern int _osmajor;
|
||||
extern int _osminor;
|
||||
unsigned crc0,crc1;
|
||||
time_t tl,ot;
|
||||
int a;
|
||||
double d;
|
||||
if(argc!=2)
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
if(memcmp(argv[1],"code",4))
|
||||
{
|
||||
return(0);
|
||||
}
|
||||
if(_osmajor<3)
|
||||
{
|
||||
printf("DOS 3+ required.");
|
||||
return(0);
|
||||
}
|
||||
/*if(*argv[0]!='A' && *argv[0]!='B')
|
||||
{
|
||||
printf("Run from the original disk, please.");
|
||||
return(0);
|
||||
}*/
|
||||
if(!strstr(argv[0],"EXE"))
|
||||
{
|
||||
printf("Run from the original disk, please..");
|
||||
return(0);
|
||||
}
|
||||
memcpy(strstr(argv[0],"EXE"),"DAT",3);
|
||||
f1=fopen(argv[0],"at");
|
||||
if(f1==NULL)
|
||||
{
|
||||
printf("Run from the original disk, please...");
|
||||
return(0);
|
||||
}
|
||||
_asm
|
||||
{
|
||||
push si
|
||||
push di
|
||||
xor si,si
|
||||
xor di,di
|
||||
push ds
|
||||
ers5: mov ax,0ff00h
|
||||
ers6: mov ds,ax
|
||||
mov bx,0
|
||||
mov cx,1024
|
||||
mcrc1: add si,ds:[bx]
|
||||
ers1: add di,ds:[bx+2]
|
||||
ers2: rol si,1
|
||||
ers3: add bx,4
|
||||
ers4: loop mcrc1
|
||||
pop ds
|
||||
mov crc0,si
|
||||
mov crc1,di
|
||||
xor ax,ax
|
||||
mov cs:[ers1],ax
|
||||
mov cs:[ers2],ax
|
||||
mov cs:[ers3],ax
|
||||
mov cs:[ers4],ax
|
||||
mov cs:[ers5],ax
|
||||
mov cs:[ers6],ax
|
||||
mov cs:[ers1+2],ax
|
||||
mov cs:[ers2+2],ax
|
||||
mov cs:[ers3+2],ax
|
||||
mov cs:[ers4+2],ax
|
||||
mov cs:[ers5+2],ax
|
||||
mov cs:[ers6+2],ax
|
||||
pop di
|
||||
pop si
|
||||
mov ah,08h
|
||||
mov dl,128
|
||||
mov dh,0
|
||||
int 13h
|
||||
cmp dh,0
|
||||
je jjj1
|
||||
add crc0,cx
|
||||
add crc1,dx
|
||||
jjj1: nop
|
||||
}
|
||||
time(&tl);
|
||||
fprintf(f1,"%sDos version %i.%i",ctime(&tl),_osmajor,_osminor);
|
||||
fprintf(f1,"\t[");
|
||||
fprintf(f1,"%04X",crc1);
|
||||
fprintf(f1,"%04X",crc0);
|
||||
fprintf(f1,"%04X",(crc1^0xffff));
|
||||
fprintf(f1,"%04X",(crc0^0xffff));
|
||||
fprintf(f1,"]\n\n");
|
||||
fclose(f1);
|
||||
printf("[");
|
||||
printf("%04X",crc1);
|
||||
printf("%04X",crc0);
|
||||
printf("%04X",(crc1^0xffff));
|
||||
printf("%04X",(crc0^0xffff));
|
||||
printf("]");
|
||||
return(0);
|
||||
}
|
||||
72
FCP/PRINT.DAT
Normal file
72
FCP/PRINT.DAT
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
Sun Jan 05 19:40:23 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 05 19:51:32 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 05 19:51:47 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Jan 10 19:03:52 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Jan 10 19:57:45 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Mon Jan 13 19:52:57 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 19 17:37:37 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 19 22:00:40 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 19 22:01:07 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 19 22:01:18 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sun Jan 19 22:04:03 1992
|
||||
Dos version 5.0 [F65CE69909A31966]
|
||||
|
||||
Mon Jan 20 17:38:49 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Tue Feb 04 17:38:20 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Tue Feb 04 17:38:43 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Apr 24 16:52:33 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Apr 24 16:52:34 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Apr 24 16:52:36 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Apr 24 16:53:07 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Fri Apr 24 16:54:04 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sat May 02 22:46:04 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sat May 02 22:46:12 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Thu Aug 13 17:46:58 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Wed Nov 04 00:50:37 1992
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
Sat Jan 30 22:22:53 1993
|
||||
Dos version 5.0 [432D5E0CBCD2A1F3]
|
||||
|
||||
BIN
FCP/PRINT.EXE
Normal file
BIN
FCP/PRINT.EXE
Normal file
Binary file not shown.
BIN
FCP/PROTTEST.EX0
Normal file
BIN
FCP/PROTTEST.EX0
Normal file
Binary file not shown.
BIN
FCP/PROTTEST.EXE
Normal file
BIN
FCP/PROTTEST.EXE
Normal file
Binary file not shown.
4
FCP/TEST.BAT
Normal file
4
FCP/TEST.BAT
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
echo off
|
||||
:alku
|
||||
prottest
|
||||
goto alku
|
||||
1
FCP/TMP
Normal file
1
FCP/TMP
Normal file
|
|
@ -0,0 +1 @@
|
|||
[432D5E0CBCD2A1F3]
|
||||
471
FCP/UNPACK.ASM
Normal file
471
FCP/UNPACK.ASM
Normal file
|
|
@ -0,0 +1,471 @@
|
|||
NOJUMPS
|
||||
|
||||
calccrc MACRO start,end
|
||||
local l1
|
||||
mov cx,OFFSET end-OFFSET start
|
||||
mov si,OFFSET start
|
||||
l1: add dl,cs:[si]
|
||||
adc dh,0
|
||||
rol dx,1
|
||||
inc si
|
||||
loop l1
|
||||
ENDM
|
||||
uncryptxor MACRO beg,key
|
||||
local l1
|
||||
mov bx,OFFSET beg
|
||||
mov ax,key
|
||||
mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2
|
||||
l1: xor ds:[bx],ax
|
||||
add bx,2
|
||||
dec cx
|
||||
jnz l1
|
||||
ENDM
|
||||
uncryptadd MACRO beg,key ;actually sub, uncrypts add-crypting
|
||||
local l1
|
||||
mov bx,OFFSET beg
|
||||
mov ax,key
|
||||
mov cx,(OFFSET _unpack_endcrypt-OFFSET beg)/2
|
||||
l1: sub ds:[bx],ax
|
||||
add bx,2
|
||||
dec cx
|
||||
jnz l1
|
||||
ENDM
|
||||
|
||||
unp_text SEGMENT para public 'CODE'
|
||||
ASSUME cs:unp_text
|
||||
PUBLIC _unpack_start,_unpack_end
|
||||
PUBLIC _unpack_data,_unpack_dataend,_unpack_data2,_unpack_code
|
||||
PUBLIC _unpack_stack0,_unpack_stack1
|
||||
PUBLIC _unpack_crc0,_unpack_crc1
|
||||
PUBLIC _unpack_crypt1 ;add 5f27h - INC
|
||||
PUBLIC _unpack_crypt2 ;xor 4493h - INC
|
||||
PUBLIC _unpack_crypt3 ;add 0073h - INC
|
||||
PUBLIC _unpack_crypt4 ;xor 4536h - none
|
||||
PUBLIC _unpack_crypt10 ;xor 0666h - none
|
||||
PUBLIC _unpack_crypt11 ;add 0656h - DEC
|
||||
PUBLIC _unpack_crypt12 ;xor 0466h - DEC
|
||||
PUBLIC _unpack_crypt13 ;add 0663h - none
|
||||
PUBLIC _unpack_crypt14 ;add DX - none
|
||||
PUBLIC _unpack_crypt15 ;xor 5cach - none
|
||||
PUBLIC _unpack_crypt16 ;add 3fach - INC
|
||||
PUBLIC _unpack_endcrypt
|
||||
_unpack_start LABEL BYTE
|
||||
|
||||
db 'FCP/IV' ;Future Protector IV
|
||||
|
||||
_unpack_code LABEL BYTE
|
||||
startup PROC NEAR
|
||||
mov sp,OFFSET _unpack_stack1
|
||||
io21data LABEL BYTE
|
||||
ret
|
||||
pntds2 LABEL WORd
|
||||
jmp cs:[farjump+2]
|
||||
startup ENDP
|
||||
int_iret PROC FAR
|
||||
iret
|
||||
int_iret ENDP
|
||||
|
||||
ALIGN 2
|
||||
_unpack_stack0 LABEL BYTE
|
||||
dw 50 dup(5555h)
|
||||
_unpack_stack1 LABEL BYTE
|
||||
dw OFFSET step1
|
||||
dw 0 ;popped by step 1 => DS
|
||||
dw OFFSET step2
|
||||
dw OFFSET step3
|
||||
dw OFFSEt step4
|
||||
stck1: dw OFFSET stepx1 ;the cracker blew it :-)
|
||||
dw 0fff0h,0000h
|
||||
disk0 dw 0
|
||||
disk1 dw 0
|
||||
vram dw 01234h
|
||||
hboottxt db '.;*',13,0
|
||||
pntds dw 0
|
||||
|
||||
_unpack_crc0 LABEL BYTE
|
||||
|
||||
.386P
|
||||
step1 PROC NEAR
|
||||
in al,21h
|
||||
mov cs:io21data,al
|
||||
mov al,255
|
||||
out 21h,al
|
||||
cli
|
||||
mov cs:pntds,ds
|
||||
pop ds
|
||||
cld
|
||||
;disk detect
|
||||
mov ah,08h
|
||||
mov dl,128
|
||||
mov dh,0
|
||||
int 13h
|
||||
cmp dh,0
|
||||
je jjj1
|
||||
mov cs:disk0,cx
|
||||
mov cs:disk1,dx
|
||||
jjj1: ;video detect
|
||||
mov ah,0fh
|
||||
int 10h
|
||||
cmp al,7
|
||||
je ismda
|
||||
mov cs:vram,0800h+1234h
|
||||
ismda: add cs:vram,0b000h-01234h
|
||||
;processor detect, at return: BP=0=real BP=1=protected mode
|
||||
push sp ; 86/186 will push SP-2;
|
||||
pop ax ; 286/386 will push SP.
|
||||
cmp ax, sp
|
||||
jz not86 ; If equal, SP was pushed
|
||||
;8086/80186
|
||||
noprot: mov bp,0
|
||||
ret
|
||||
not86: smsw cx ; Protected? Machine status -> CX
|
||||
ror cx,1 ; Protection bit -> carry flag
|
||||
jnc noprot ; Real mode if no carry
|
||||
mov bp,1
|
||||
ret
|
||||
step1 ENDP
|
||||
.8086
|
||||
|
||||
step3 PROC NEAR
|
||||
;DS=CS now (in step 2)
|
||||
;uncode crap
|
||||
mov byte ptr cs:int1code,40h ;INC AX
|
||||
int 3 ;clc set at step2's end
|
||||
uncryptadd _unpack_crypt1,5f27h
|
||||
ret
|
||||
step3 ENDP
|
||||
|
||||
ints PROC FAR ;SingleStep/DEBUG
|
||||
int_01: stc
|
||||
int_03: push bp
|
||||
mov bp,sp
|
||||
jnc int2
|
||||
push bx
|
||||
mov bx,ss:[bp+2] ;ip
|
||||
cmp byte ptr cs:[bx],49h ;inc cx
|
||||
jne int1
|
||||
int1code: inc bx
|
||||
int1: pop bx
|
||||
int3: pop bp
|
||||
iret
|
||||
int2: xor ss:[bp+6],256
|
||||
mov bp,cs:stck1to
|
||||
mov word ptr cs:[stck1],bp
|
||||
jmp int3
|
||||
ints000:
|
||||
ints ENDP
|
||||
|
||||
_unpack_crc1 LABEL BYTE
|
||||
|
||||
itable LABEL WORD
|
||||
itablelen equ 4
|
||||
dw OFFSET int_iret,0f000h ;int 0
|
||||
dw OFFSET int_01,0f000h ;int 1
|
||||
dw OFFSET int_iret,0f000h ;int 2
|
||||
dw OFFSET int_03,0f000h ;int 3
|
||||
;Stack contents on ints:
|
||||
; [bp+6]: flags
|
||||
; [bp+4]: cs
|
||||
; [bp+2]: ip
|
||||
; [bp+0]: bp
|
||||
|
||||
_startzeroing LABEL BYTE
|
||||
|
||||
step2 PROC NEAR ;WARNING! ROUTINE OVERWRITTEN BY INNER STACK
|
||||
mov cs:hboottxt[0],'b'
|
||||
;set interrupts
|
||||
mov bx,'FG'
|
||||
mov si,OFFSET itable
|
||||
xor di,di
|
||||
mov cx,itablelen
|
||||
mov dx,'JM'
|
||||
mov cs:hboottxt[1],'C'
|
||||
st2a: segcs
|
||||
lodsw
|
||||
xchg ds:[di],ax
|
||||
mov cs:[si-2],ax
|
||||
mov ax,cs
|
||||
xchg ds:[di+2],ax
|
||||
mov cs:[si],ax
|
||||
add si,2
|
||||
add di,4
|
||||
loop st2a
|
||||
;carry=0 for di won't rotate
|
||||
mov di,dx ;='JM'
|
||||
mov dx,OFFSET hboottxt
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov si,bx ;='FG' ;if this enabled, ICE will reboot
|
||||
mov ax,0911h
|
||||
ret
|
||||
step2 ENDP
|
||||
|
||||
stepx1 PROC NEAR
|
||||
mov ax,0f000h
|
||||
retf ;reboots
|
||||
stepx1 ENDP
|
||||
|
||||
_unpack_crypt1 LABEL BYTE
|
||||
|
||||
step4 PROC NEAR
|
||||
;DS=CS
|
||||
mov ax,cs:pntds
|
||||
mov cs:pntds2,ax
|
||||
uncryptxor _unpack_crypt2,4493h
|
||||
_unpack_crypt2 LABEL BYTE
|
||||
uncryptadd _unpack_crypt3,0073h
|
||||
_unpack_crypt3 LABEL BYTE
|
||||
jmp stp4o
|
||||
stck1to dw OFFSET step5
|
||||
hboottxt2 db 'Bc*',13,0
|
||||
stp4o: sub ax,ax
|
||||
mov si,'FG'
|
||||
mov di,'JM'
|
||||
mov ax,0911h
|
||||
mov dx,OFFSET hboottxt2
|
||||
clc
|
||||
int 3
|
||||
uncryptxor _unpack_crypt4,4536h
|
||||
ret ;goes to step5
|
||||
step4 ENDP
|
||||
|
||||
_unpack_crypt4 LABEL BYTE
|
||||
|
||||
innerstack LABEL BYTE
|
||||
dw OFFSET stepx1
|
||||
|
||||
step5 PROC NEAR
|
||||
;enter inner stack
|
||||
mov sp,OFFSET innerstack
|
||||
uncryptxor _unpack_crypt10,0666h
|
||||
_unpack_crypt10 LABEL BYTE
|
||||
i1c0: mov dx,0656h
|
||||
sub ax,ax
|
||||
mov es,ax
|
||||
mov ax,es:[6]
|
||||
mov bx,cs
|
||||
cmp ax,bx
|
||||
je i1c1
|
||||
mov word ptr cs:[i1c0+1],0CA3Fh
|
||||
mov dx,3FC1H
|
||||
i1c1: cmp word ptr es:[4],OFFSET int_01
|
||||
je i1c2
|
||||
mov word ptr cs:[i1c0+1],0CA3Fh
|
||||
mov dx,3CF2H
|
||||
i1c2: mov byte ptr cs:int1code,48h ;DEC AX
|
||||
sub ax,ax
|
||||
int 3
|
||||
uncryptadd _unpack_crypt11,dx
|
||||
_unpack_crypt11 LABEL BYTE
|
||||
uncryptxor _unpack_crypt12,0466h
|
||||
_unpack_crypt12 LABEL BYTE
|
||||
mov byte ptr cs:int1code,40h ;INC AX
|
||||
sub ax,ax
|
||||
int 3
|
||||
uncryptadd _unpack_crypt13,0663h
|
||||
_unpack_crypt13 LABEL BYTE
|
||||
;calc checksum of exe start
|
||||
xor dx,dx
|
||||
mov byte ptr cs:int1code,43h ;INC BX
|
||||
calccrc _unpack_crc0,_unpack_crc1
|
||||
uncryptadd _unpack_crypt14,0 ;dx
|
||||
_unpack_crypt14 LABEL BYTE
|
||||
uncryptxor _unpack_crypt15,5CACh
|
||||
_unpack_crypt15 LABEL BYTE
|
||||
mov byte ptr cs:int1code,40h ;INC AX
|
||||
sub ax,ax
|
||||
int 3
|
||||
uncryptadd _unpack_crypt16,3FACh
|
||||
_unpack_crypt16 LABEL BYTE
|
||||
mov word ptr cs:innerstack,OFFSET execute
|
||||
sub ax,ax
|
||||
int 3
|
||||
ret
|
||||
step5 ENDP
|
||||
|
||||
ALIGN 2
|
||||
|
||||
execute PROC NEAR
|
||||
;unpack data
|
||||
mov dx,cs:pntds2
|
||||
add dx,10h
|
||||
xor si,si
|
||||
xor di,di
|
||||
cmp cs:mcrcon,0
|
||||
je exec11
|
||||
;calc machine crc
|
||||
mov ax,0ff00h
|
||||
mov ds,ax
|
||||
mov bx,0
|
||||
mov cx,1024
|
||||
mcrc1: add si,ds:[bx]
|
||||
add di,ds:[bx+2]
|
||||
rol si,1
|
||||
add bx,4
|
||||
loop mcrc1
|
||||
add si,cs:disk0
|
||||
add di,cs:disk1
|
||||
exec11: add si,cs:regcs
|
||||
add di,cs:regip
|
||||
add si,cs:regsp
|
||||
add di,cs:regss
|
||||
add si,cs:regkey
|
||||
add di,cs:regkey
|
||||
mov cx,cs:regcs0
|
||||
exec1: mov ds,dx
|
||||
sub ds:[0],si
|
||||
sub ds:[2],di
|
||||
xor si,5354h
|
||||
xor di,1525h
|
||||
sub ds:[4],si
|
||||
sub ds:[6],di
|
||||
add si,1234h
|
||||
ror si,1
|
||||
add di,4321h
|
||||
rol di,1
|
||||
sub ds:[8],si
|
||||
sub ds:[10],di
|
||||
xor si,5354h
|
||||
xor di,1525h
|
||||
sub ds:[12],si
|
||||
sub ds:[14],di
|
||||
add si,1234h
|
||||
ror si,1
|
||||
add di,4321h
|
||||
rol di,1
|
||||
inc dx
|
||||
add si,ds:[0]
|
||||
add di,ds:[8]
|
||||
add si,ds:[2]
|
||||
add di,ds:[10]
|
||||
add si,ds:[4]
|
||||
add di,ds:[12]
|
||||
add si,ds:[6]
|
||||
add di,ds:[14]
|
||||
loop exec1
|
||||
mov bp,OFFSET errormsg1
|
||||
cmp si,cs:keychk0
|
||||
jne error
|
||||
cmp di,cs:keychk1
|
||||
jne error
|
||||
cld
|
||||
_endzeroing LABEL BYTE ;may overflow a byte, but who cares
|
||||
mov dx,cs:pntds2
|
||||
mov ax,cs
|
||||
mov es,ax
|
||||
mov cx,(OFFSET _endzeroing-OFFSET _startzeroing+1)/2
|
||||
mov di,OFFSET _startzeroing
|
||||
mov ax,'..'
|
||||
rep stosw
|
||||
call resetints
|
||||
mov al,cs:io21data
|
||||
out 21h,al
|
||||
mov ax,cs
|
||||
mov es,ax
|
||||
mov cx,OFFSET _startzeroing-OFFSET _unpack_code
|
||||
mov di,OFFSET _unpack_code
|
||||
mov al,'.'
|
||||
rep stosb
|
||||
;load stack and cs:ip for the actual program and run it.
|
||||
mov ds,dx
|
||||
mov es,dx
|
||||
mov bx,cs
|
||||
mov cx,cs:regcs0
|
||||
mov ax,cs:regss
|
||||
add ax,bx
|
||||
sub ax,cx
|
||||
mov ss,ax
|
||||
mov sp,cs:regsp
|
||||
add cs:regcs,bx
|
||||
sub cs:regcs,cx
|
||||
push cs:regcs
|
||||
push cs:regip
|
||||
mov cs:regcs,ax
|
||||
mov cs:regip,ax
|
||||
mov cs:regss,ax
|
||||
mov cs:regcs0,ax
|
||||
mov cs:keychk1,ax
|
||||
mov cs:regkey,ax
|
||||
sti
|
||||
jmp endprg2
|
||||
|
||||
_endzeroing2 LABEL BYTE
|
||||
error: ;destroy and exit with error at OFFSET BP
|
||||
cld
|
||||
mov dx,cs:pntds2
|
||||
mov ax,cs
|
||||
mov es,ax
|
||||
mov cx,(OFFSET _endzeroing2-OFFSET _startzeroing+1)/2
|
||||
mov di,OFFSET _startzeroing
|
||||
mov ax,'..'
|
||||
rep stosw
|
||||
call resetints
|
||||
mov al,cs:io21data
|
||||
out 21h,al
|
||||
mov ax,cs
|
||||
mov es,ax
|
||||
mov di,OFFSET _unpack_code
|
||||
mov cx,OFFSET _startzeroing-OFFSET _unpack_code
|
||||
mov al,'.'
|
||||
rep stosb
|
||||
mov cs:regcs,ax
|
||||
mov cs:regip,ax
|
||||
mov cs:regss,ax
|
||||
mov cs:regcs0,ax
|
||||
mov cs:keychk1,ax
|
||||
mov cs:regkey,ax
|
||||
mov sp,OFFSET _unpack_data
|
||||
sti
|
||||
jmp endprg1
|
||||
execute ENDP
|
||||
|
||||
resetints PROC NEAR
|
||||
;reset interrupts
|
||||
xor ax,ax
|
||||
mov es,ax
|
||||
mov si,OFFSET itable
|
||||
xor di,di
|
||||
mov cx,itablelen*2
|
||||
st20a: segcs
|
||||
lodsw
|
||||
stosw
|
||||
loop st20a
|
||||
ret
|
||||
resetints ENDP
|
||||
|
||||
ALIGN 2
|
||||
_unpack_data LABEL BYTE
|
||||
farjump LABEL DWORD
|
||||
regcs dw 0
|
||||
regip dw 0
|
||||
regss dw 0
|
||||
regsp dw 0
|
||||
regcs0 dw 0
|
||||
errormsg1 db 'File corrupted!$'
|
||||
_unpack_data2 LABEL BYTE
|
||||
regkey dw 0
|
||||
mcrcon dw 0 ;1=machine crc enabled
|
||||
keychk0 dw 0
|
||||
keychk1 dw 0
|
||||
_unpack_dataend LABEL BYTE
|
||||
|
||||
ALIGN 2
|
||||
|
||||
endprg1: ;****************
|
||||
mov dx,bp
|
||||
mov ax,cs
|
||||
mov ds,ax
|
||||
mov ah,9h
|
||||
int 21h
|
||||
mov ax,4c03h
|
||||
int 21h
|
||||
endprg2: ;****************
|
||||
retf
|
||||
|
||||
ALIGN 2
|
||||
_unpack_endcrypt LABEL BYTE
|
||||
db 000h,0fch
|
||||
_unpack_end LABEL BYTE
|
||||
unp_text ENDS
|
||||
END
|
||||
|
||||
739
FCP/UNPACK.LST
Normal file
739
FCP/UNPACK.LST
Normal file
|
|
@ -0,0 +1,739 @@
|
|||
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
|
||||
|
||||
BIN
FCP/UNPACK.OBJ
Normal file
BIN
FCP/UNPACK.OBJ
Normal file
Binary file not shown.
1
FCP/ZIP.BAT
Normal file
1
FCP/ZIP.BAT
Normal file
|
|
@ -0,0 +1 @@
|
|||
pkzip %1 *.c *.asm fcp
|
||||
Loading…
Reference in a new issue