1、申请ID:chenyucheng
2、个人邮箱:744766348@qq.com
3、原创技术文章:易语言的代码混淆
https://bbs.125.la/forum.php?mod=viewthread&tid=14735578
(出处: 精易论坛)
https://www.bilibili.com/read/cv17281675 (bilibili)
易语言自带了一个东西,叫“混淆另存为”。
它的说明是:
将程序中的名称进行混淆后以一个新文件名保存. 注意: 所有以下划线字符开始的名称都不会被混淆.
先用一个简单的代码试一试。
首先,新建一个窗口程序,再把窗口搞成这样子。
代码这样写。.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
.局部变量 a, 整数型
.局部变量 b, 文本型
.局部变量 汉字, 文本型
a = 100
b = “Hello!”
汉字 = “汉字博大精深”
信息框 (a, 0, , )
信息框 (b, 0, , )
信息框 (汉字, 0, , )
保存(这里保存为1.e),然后点击菜单上的“M.混淆另存为”,然后出现这个窗口。
说明混淆前需要关联名称。我们直接点“是”,关联后输入保存文件名,这里保存为1_1.e。
然后输出框会显示以下内容:正在预处理现行程序
重新关联程序名称操作完毕
将混淆后的结果输出到文件"D:\......\1_1.e"中成功.
打开1_1.e,欸?怎么是空白?其实不是空白,而是代码窗口全部关掉了。在左边点击“程序”选项卡看一下。
发现有个程序集“_W3”,窗口有“_启动窗口”。
“_启动窗口”那儿的按钮名称被改成了“_W2”。(原来是“按钮1”的)
代码成这样了。.版本 2
.程序集 _W3
.子程序 __W2_被单击
.局部变量 _W4, 整数型
.局部变量 _W5, 文本型
.局部变量 _W6, 文本型
_W4 = 100
_W5 = “Hello!”
_W6 = “汉字博大精深”
信息框 (_W4, 0, , )
信息框 (_W5, 0, , )
信息框 (_W6, 0, , )
正如说明所言:“将程序中的名称进行混淆后以一个新文件名保存. ”
这是最基础的混淆方法——名称混淆。
在一篇文章《聊聊如何进行代码混淆》(https://zhuanlan.zhihu.com/p/461944477)中讲到了几种混淆代码的方法。
但易语言不能做到“流混淆”吧。
还有百度百科(代码混淆) (https://baike.baidu.com/item/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86/1892288)中讲了个基本原理。
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。已经存在许多种功能各异的代码混淆器。
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
易语言不能实现:
易语言应该可以实现:- 变量,函数,类的名字改写成无意义的名字
- 将for(变量循环)循环改写成while(判断循环)循环
- 将循环改写成递归
- ……
易语言自带混淆就混淆名称,对一般人来说已经足够了。
但是由于易语言的名称混淆连注释都不去掉(除了变量、子程序定义的备注),所以把几乎每条代码都配上注释的混淆,可能有一点点会看得出来。 |