少尉
UID2062809
U币1
G币1974
技术0
主题1
精华0
阅读权限75
注册时间2013-5-24
最后登录2024-5-14
在线时间153 小时
少尉
|
用TclPro中的tbcload加密Tcl代码
风行水上 @ 2014-07-02 11:18:51
标签: tcltk 加密tbcload
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) |
|