本帖最后由 cumtjh 于 2011-6-16 14:10 编辑
转自:http://zml84.blog.sohu.com/100535521.html
alisp文件加密测试.LSP
最后修改时间:
--------------------------------------------------------------------------------
;|alisp文件加密的探索
AutoLISP保护文件的格式
AutoCAD虽然没有提供加密、解密AutoLISP的工具软件,但其本身却可以接收两种格式的LISP文件。
一种是保护格式的;另一种是文本格式的。读入文件后,AutoCAD首先会作出判断,一旦确定文件是保护
格式的,则在加载该程序前,自动将加密文件代码予以还原,然后再读入命令解释器。
下面我们来看看AutoLISP保护格式文件的格式。
----------------------------------------------------------------------------------------
起始地址及终止地址(Bytes) 功能
0-29 保护文件的标识字符串计30Bytes,为"AutoCAD PROTECTED LISP file\0x0D\0x0A\0x1A"。
30 密码字符,只有一个字节。
31及以后 已加密的程序码。
注意:前30个字节用户不得改动;
第30位是密码字母,用户可以任意给定,譬如字母'A';
第31位起可由附录程序经过加密计算后写入文件。
**加密与解密的原理**
加密与解密的一个重要工具是"按位异或(^)运算"。
其作用是判断两运算量相应位的值是否"相异",若为异,则为1,否则为0。
即:0^0=0;0^1=1;1^0=1;1^1=0。
因其具有双向转换、还原的能力,故在密码学上得到广泛应用。
让我们来看看:
A|01000001 8|00111000
^y|01111001 ^A|01000001
-------------------------
8|00111000 y|01111001
上式中0x41='A'、0x79='y'、0x38='8',
'A'^'y'='8';'8'^'A'='y';'y'^'8'='A'。
可以看出按位异或运算具有双向转换、还原的能力。
AutoCAD在加密、解密时,除了运用上述方法外,另外还使用了一个技巧,就是移位运算,
将被转换字符的8个位全部左移一位,相当于将该整数乘以2,若最高位是1(移位后>256),
则将溢出位1移至最末位,否则用0代替末位,这样就保证了加密码与原代码一一对应。
我们假设用函数F表示这一运算过程。
----字符0x96,二进制为10010110,则F(0x96)=F(10010110)=00101101=0x2D。
----我们用下面两个算式,来说明加密、解密的具体过程,式中各符号的意义:
A0->B=A^B;A-B=F(A)^B;A/B=F(A)^B;'||'='='。
各字符均以16进制表示,假设密码字母是'A'(0x41)。
原始程序码为:
(PRINC)
加密过程如下:
----(princ) -> 28 70 72 69 6E 63 29
具体过程为:
1、0x41^0x28=0x69; (按位异或)
2、F(0x69)=0xD2; (移位运算)
3、0xD2^0x70=0xA2; (按位异或)
2、F(0xA2)=0x45; (移位运算)
3、0x45^0x72=0x37; ......
----结果(69 A2 37 07 60 A3 6E)
解密过程如下:
----41-> 69-A2-37-76-0A-36-ED
----||||||||……(依次类推)
----287072696E6329结果(PRINC)
具体过程为:
1、0x41^0x69=0x28;(字符'(')
2、F(0x69)=0xD2;
3、0xD2^0xA2=0x70;(字符'p')……
|;
转自:http://zml84.blog.sohu.com/100535521.html
该贴已经同步到 cumtjh的微博 |