我想知道如果有可能以及如何在MATLAB中隐藏一行代码或整行代码。例如:
if a=b
x=y+1; x=x^2;
end
隐藏了x = x ^ 2,但仍然运行该过程。我的意思是:
if a=b
x=y+1;
end
答案 0 :(得分:6)
(脸上带着邪恶的笑容)
如果您真的想要与这样的人混淆,那么您将会想要继续operator overloading route。跟我一起旅行,你几乎肯定会在试图和别人开玩笑的时候开枪自杀!
(对疯子的笑声闪电迸发)
我之前在其他几个问题(here和here)中讨论了这个问题。基本上,您可以更改MATLAB数据类型的内置运算符的默认行为。在这种情况下,我们将更改plus
运算符对类double
的变量(默认变量类型)的工作方式。在MATLAB path上创建一个名为@double
的文件夹,然后创建一个名为plus.m
的文件,并将以下代码放入其中:
function C = plus(A, B)
C = builtin('plus', A, B);
if strcmp(inputname(1), 'y')
C = C.^2;
end
end
现在,亲自试试......
>> y=1; % Initialize y
>> x=y+1
x =
4 % Wait a minute...
>> x=1+1
x =
2 % OK
>> x=1+y
x =
2 % OK
>> x=y+1
x =
4 % What?!
>> x=y+2;
x =
9 % No!!
>> y=3;
>> x=y+1
x =
16 % Oh noes! I've been hax0red!!11!1!
工作原理:
新的plus
函数会影响内置函数,因此在对双精度执行加法时会调用它。它首先调用内置plus
来使用builtin
函数进行实际添加。这是必要的,因为如果你在这里写C=A+B;
它会再次调用假plus
并导致无限递归。然后,它使用inputname
函数来检查函数的第一个输入的变量名是什么。如果是'y'
,我们会在返回之前对结果进行平方。
玩得开心!!!
...并记得在完成后删除它。 ;)
答案 1 :(得分:5)
if a==b
x = y+1;
for ind = 1
x = x^2;
end
end
有点古怪,但你可以崩溃像loop/end
和for
循环这样的while
块。只需单击编辑器中的-
符号:
因此,对于两条或更少的线条,这对您没有帮助,但是如果您想要隐藏,例如40行,它明显缩短了。
另一种选择是简单地将其放入一百个左右的空间并使其混淆:
if a==b
x = y+1; x = x^2;
end
感谢excaza编写x=x^2;
的最混淆方式:
eval(cast((sscanf('240,122,240,188,100,118', '%d,')./2)', 'like', ''))