TclPro包含有工具用于加密Tcl代码。这显然需要两步:加密和解密。
目前免费的TclPro版本是 TclPro 1.4,只支持Tcl 8.3。
测试用Tcl代码:
# File: t.cl button .b -text "Hello TclPro" -command cbk_clicked proc cbk_clicked {args} { puts "Haha... $args" } pack .b
在DOS命令窗口中对文件进行加密:
$ win32-ix86\bin\procomp.exe -out t.tbc.tcl t.tcl
习惯上加密后的文件可以用后缀名".tbc"。上面例子为了便于查看代码,用了".tbc.tcl"。
加密后的文件(t.tbc.tcl)内容入看起来如下:
# TclPro::Compiler::Include if {[catch {package require tbcload 1.3} err] == 1} { error "The TclPro ByteCode Loader is not available or does not support the correct version" } tbcload::bceval { TclPro ByteCode 1 0 1.3 8.3 3 0 33 11 0 0 12 0 6 3 3 -1 -1 33 w0E<!(H&s!,`yTv1NW<!2Ki<!75bpv2,tl#+Z8X!z 3 ;;0v 3 AfW! 11 x 6 7YDEFTnw x 2 yIw x 5 Kt(yG@v x 12 RZ!iChROo@jZSfD x 8 9oW/DmgY8A x 11 y+aY?hafq@VY|+ x 4 ,CHr@ x 4 %N|(F p 1 0 11 2 0 0 4 0 2 1 1 -1 -1 11 w0E<!2Q/X!)'!! 1 z 1 +! 2 x 4 DP)*F x 8 ?(';@!9,>+ 0 0 1 1 4 %N|(F 0 0 257 x 4 ld^LC x 15 rpwhC;Z2b3<?<+EfqT+ 0 0 }
为了执行加密后的文件,很显然需要加载tbcload
模块。
在读取加密代码之前,确保下面的代码得以执行过就可以了:
load tbcload13.dll
文件"tbcload13.dll"可以在TclPro安装目录下找到,需要跟加密后的Tcl程序一起发布。
加密后的文件里已经调用了package require tbcload
语句,所以问题就变成了 Tcl/Tk Insight: Package 模块的管理。
加密后的文件里有一行被注视掉了TclPro::Compiler::Include
。
实际上,加密后的文件里,这一行之前的内容是通过加密程序procomp.exe
的-prefix
选项而自动添加进去的。
有三个可选值:
这个选项的作用主要有两种:
load tbcload13.dll
)(需要指定 -prefix tag)