如何保护Tcl脚本代码

周翼翼 发布于 2013/03/10 21:17
阅读 3K+
收藏 0
Tcl

现在希望在程序用嵌入一个Tcl的解释器, 程序发布时带一部分Tcl代码, 这有引来一个问题:代码在裸奔!!!

如果直接运行Tcl, 肯定有办法办它们编译成二进制文件,  但是现在是用嵌入的解释器来解析...

我在一些游戏里,看到它们带的一些文件, 应该是Lua代码,但不是明文的,不知道是加密过的, 还是编译过的.

特别的, 因为Tcl代码里有高价值的数据, 不能被盗窃. 

我知道TDK有一个编译器, 不知道用它编译过的代码,能不能直接用Tcl_EvalFile执行

不知道大家有没有这方面的经验.

实在不行, 只能把源代码加密了.

加载中
0
宏哥
宏哥

Haha, 宏哥为你破例一次

TCL我没有这么操作过

但是Python, PHP都可以通过编译成字节码, 也就是类汇编指令, 

然后通过 类似eval这样的方法, 来运行一个入口, 这种代码是很难反编译的.

TCL一定有类似方法. 

0
宏哥
宏哥

http://blog.163.com/zhang_231/blog/static/109599520102258594594/

随手找了一个

0
周翼翼
周翼翼

引用来自“宏哥”的答案

Haha, 宏哥为你破例一次

TCL我没有这么操作过

但是Python, PHP都可以通过编译成字节码, 也就是类汇编指令, 

然后通过 类似eval这样的方法, 来运行一个入口, 这种代码是很难反编译的.

TCL一定有类似方法. 

freewrap把Tcl脚本转化为exe还是很常见的. 但是现在我的解释器是嵌入在主程序里的. 所以和单独发布Tcl源文件还不太一样.

有一个Tclpro可以把Tcl源代码编译成字节码, 用别一个Tcl模板来执行这些字节码. 单就这些字节码来说, 大体是安全的. 但是如你所说, 它只是套了个马甲. 在马甲之前和马甲之后, 数据还是裸奔.

比如:

假如, 变量b是从主程序里传进来的高价值的数据, 如果我知道了它的名字, 可以在主入口之前把它打出来....走光了!

这个应该和Tcl本身有关.Tcl应该是一个纯解释型的语言, 不像python,php等有明确的byte code的概念.

昨晚还想了想, 最好的办法,还是不要把有价值的数据传到脚本.

0
宏哥
宏哥

引用来自“周翼翼”的答案

引用来自“宏哥”的答案

Haha, 宏哥为你破例一次

TCL我没有这么操作过

但是Python, PHP都可以通过编译成字节码, 也就是类汇编指令, 

然后通过 类似eval这样的方法, 来运行一个入口, 这种代码是很难反编译的.

TCL一定有类似方法. 

freewrap把Tcl脚本转化为exe还是很常见的. 但是现在我的解释器是嵌入在主程序里的. 所以和单独发布Tcl源文件还不太一样.

有一个Tclpro可以把Tcl源代码编译成字节码, 用别一个Tcl模板来执行这些字节码. 单就这些字节码来说, 大体是安全的. 但是如你所说, 它只是套了个马甲. 在马甲之前和马甲之后, 数据还是裸奔.

比如:

假如, 变量b是从主程序里传进来的高价值的数据, 如果我知道了它的名字, 可以在主入口之前把它打出来....走光了!

这个应该和Tcl本身有关.Tcl应该是一个纯解释型的语言, 不像python,php等有明确的byte code的概念.

昨晚还想了想, 最好的办法,还是不要把有价值的数据传到脚本.

是的, 很容易截取。

我对PHP的编译, 主要用于版权控制, 而非数据保护。 

0
MikeManilone
MikeManilone
用TDK的编译器,可以用eval file,因为编译后的文件是合法的Tcl脚本文件,不过你需要首先载入tbcload这个包
返回顶部
顶部