Autolisp用户程序的保护 山东 李英琳 1994-09-30 为了解决这个问题,笔者用Turbo C2.0编写了一个小程序secret.c,它能改变Autolisp程序原来的排列格式,剥去编码的多余空白,程序仍然能正常工作,但可读性大大降低,外人难以辨认,并且不便打印,从而起到对程序的保护作用。另外,它还有一个作用就是减少了Autolisp文件的长度,提高了文件的装入速度。Secret.c经过编码和链接后生成EXE文件,可在DOS下直接执行。虽然这不是真正的加密,但能对任何不带有注释的Austolisp程序起到保护作用。例如某用户想对box.isp程序加以保护,生成的目的文件名为boxz.1sp: c:>secret INPUT file name: box.1sp 输入原码文件名 output file name:box2.1sp 输入目的文件名 The end. 操作成功显示“The end.”,这时用type命令显示一下box2.1sp的内容,可以发现程序编码排列与box.1sp大不一样了;若显示“Cant open file.”,表示原码文件打开不成功,程序将中断运行,退回到DOS状态;若输入的原码文件名与目的文件名相同,则将破坏原码文件。 该程序的设计原理是:打开需要保护的Autolisp文件,判断是否成功,然后创造一个新文件,从原码文件中读入一串字符,再将它写入新文件中,字符串间需留一个空格,但不换行,经过多次循环,最后形成一个新文件。这样使新文件即能在AutoCAD下正常运行,又不易辨认,起到保护作用。 /* secret.c */ #include main() { char m,fn1,fn2; FILE *fpi,*fpo; printf("Input file name:"); scanf("%s",fn1); if ((fpi=fopen(fn1,"r"))==NULL) { printf("Can't open file"); exit(1); } else { printf("Output file name:"); scanf("%s",fn2); fpo=fopen(fn2,"w"); while(!feof(fpi)) { fscanf(fpi,"%s",m); if (feof(fpi)) break; fprintf(fpo," %s",m); } fclose(fpi); fclose(fpo); } puts("The end."); } (山东 李英琳)