PC—1500微机加密源程序的破译

🏠 首页 《无线电》杂志 1989年 🔗 第9期 🔗 第28页 分类:无线电技术自学经验交流 🔗 郭显忠 🔗

通过软件和硬件的某些方法可以使PC—1500微机的源程序不在显示屏上显示。这时只能运行源程序无法显示输出源程序,对使用者来说源程序是保密的,这称为加密源程序。在某些情况下我们又需要了解源程序,这就提出了源程序加密后的破译任务。

源程序加密后,它在机内存储器中的位置和内容并没有变。我们只要弄清源程序在机内存储器中的地址,表达方式,并设法将其显示出来,就可以破译出加密后的源程序,恢复它的原貌。

源程序在存储器中的存储地址是从程序存储区的起始单元开始存储的,不论程序的长或短,它都连续存储,直至程序结束。但是使用不同的模块,源程序起始单元的地址也不同,表1给出使用不同模块的系统构成源程序起始单元在机内存储器中的地址。H表示十六进制数。

图1
图1 🔍原图 (886×480)

如果对微机所使用模块的情况不清楚,不了解系统的构成也可求得:在RUN方式下按PEEK&7865*256+PEEK&7866ENTER,此时显示屏上所显示的数即为源程序起始单元在内在中的地址。

BASIC源程序中的指令在内存储器中是以2字节的内部代码存在的,我们给出部分指令的内部代码表2(以十六进制数表示):

图2
图2 🔍原图 (889×590)

BASIC源程序中的数字、字母和符号在机内存储器中是以它们的ASCⅡ代码形式存在的,下面给出部分ASCⅡ代码表3:

图3
图3 🔍原图 (862×386)

源程序在机内存储器中的构成是每个程序行都由它的行号、行长、程序和结束码组成,行号占两个存储单元,行长占用一个存储单元,结束码占用一个存储单元。如下:

图4
图4 🔍原图 (858×238)

例如源程序:

10 PRINT A

20 END

在没有模块的微机中地址与源程序的代码构成见表4:

图5
图5 🔍原图 (756×868)

PEEK指令能显示机内存储器中任一存储单元的内容,我们可以利用PEEK语句使其源程序的内部代码显示出来。

知道了源程序中指令和符号的内部代码,又有了FEEK指令这个显示武器,知道了源程序在内存中的起始地址,原则上就可以破译加密的源程序了。见于用PEEK指令逐单元查看源程序内部代码太慢,费时费力,可用源程序中没有的大数值行导输入以下程序运行即可打印出所有源程序的十进制代码。FOR I=程序起始地址 TO(STATUS 1+程序起始地址-1):LPRINT PEEI;“,”;:NEXT I:END

将十进制代码变为十六进制代码,即可查表进行加密程序的破译了。(郭显忠)