[Trykle MaxScript 混淆器设计] 名称混淆
名称混淆就是改变用户变量的名字
它是混淆器的一项基础功能
示例
fn test = 1
输出
fn dcfghieefgfffgfgabab = 1
或者
fn ii1lliiili1i1iii11i11iiiiii = 1 fn ⠅⠢⠡⠄⠤⠄⠣⡂⠠⠠⠅⠠⠠ = 1 fn '>>>>>>>ゅ°' = 1
在这几种名字变化中,它们的强度都是一致的
不管你是用中文,日文,还是盲文、鱼尾纹,只要改变了原有变量的名字,目的就达到了
而入侵者总是可以变成利于他们阅读的变量
比如fn var01 = 1
如果使用AI参与,还原后的变量名甚至比原始的更好
认知误区
由于mxs的标识符名字设计允许任意符号,有的人一看到花里胡哨的变量名就觉得混淆得好
比如,我们的源代码中有一个readFile
的函数名,它的功能是读取文件内容
现在,有如下几种混淆名字示例
-
'B $+@&/*#)@$_ '
-
a9d8567807e5
-
ii1iii1lililliilii1llii1lli1i1l1i1li
-
a1
-
getUserName
这几种名字中,最好的混淆效果是 getUserName
,
其余几种方式都是第一眼就直接的告诉入侵者,这个名字我改过了
而getUserName
这个看起来正常的名字,不会第一眼就让入侵者感觉这个名字被改过
迷惑人的永远是你熟悉的东西,欺负的就是有文化的
字符串里面的变量
fn test = 1 print "test" execute "test()"
在这个示例中,只有fn后的test会被改变,而字符串里的变量将不会被改变
不管是否改变字符串内的名字,这都将导致一种错误,因为我们无法分析出开发者的意图究竟是表达外部的函数名,还是单纯的字符串内容
这种情况,需要交给用户去决断
或者,启用全字符串扫描,降低混淆覆盖率,直接将这种出错的情况宽泛的排除掉
是当前变量,又是外部属性的名字
fn DoEvents = ( (dotNetClass "System.Windows.Forms.Application").DoEvents() )
在这个示例中,DoEvents既是当前定义的一个函数名字,也是一个外部类中的成员名字,
如果进行了改变,则代码变成类似这种情况
fn _2ffd35b8 = ( (dotNetClass "System.Windows.Forms.Application")._2ffd35b8() )
此时执行函数将会报错,这种情况需要用户主动进行排除,或者自动扫描规则来排除
分类:
MaxScript 混淆器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步