用TclPro中的tbcload加密Tcl代码

风行水上 @ 2014-07-02 11:18:51
标签:

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 模块的管理

-prefix

加密后的文件里有一行被注视掉了TclPro::Compiler::Include

实际上,加密后的文件里,这一行之前的内容是通过加密程序procomp.exe-prefix选项而自动添加进去的。

有三个可选值:

  • "none":不添加任何内容
  • "auto":添加源文件中从开始到第一个非注释行或空白行为止的内容。(默认值)
  • "tag":添加源文件中文件开始到含有字符串"TclPro::Compiler::Include"的注释行为止的内容。

这个选项的作用主要有两种:

  • 明文保留版权信息等注释行 (默认行为)
  • 明文保留初始化等代码(比如load tbcload13.dll)(需要指定 -prefix tag)

其他有关Tcl代码加密解密的方法

标签:

分享到:
comments powered by Disqus

29/33ms