Autolisp用户程序的保护

Author: 山东 李英琳 Date: 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<stdio.h>
        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.");
        }
        (山东  李英琳)