[Trykle MaxScript 混淆器设计] 抽离常量的注意事项

抽离常量是我给取的名字
实际的描述应该是:给内置的大部分函数起个别名

操作后长这样

showMsg = messagebox  
showMsg "trykle"

或者

fe230e9 = "messagebox"  
(execute fe230e9) "trykle"

或者在进行更绕一点的变形,不管绕多复杂,它们的强度都是1

在分析器中,只需要识别到messagebox这个常量并将其抽取替换即可
想象很简单

但实际

目标代码可能带着那么一点点“歧义”
这里面的“常量”均不可替换

global messagebox, spline, trykleTestVar = 123

(
	messagebox = 1 
	true = false
    if true == false then
    (
	  local print = #(1, 2, true)
	  for box in print do messagebox = box
	)
)

如果直接按单词替换,第一句代码就会语法错误

global (execute showMsg) ...

那么需要识别,目标标识符在当前作用域是否被定义为变量,
如果是变量就不进行抽离

如果希望对bool值进行单独处理,也需要做相同的判断

如你所见,true = false 也是一种混淆

posted @ 2023-09-08 18:36  trykle  阅读(90)  评论(0编辑  收藏  举报