【发布时间】:2013-11-29 08:25:16
【问题描述】:
我正在尝试分解并去混淆这个生成 mandlebrot 的 python 代码:
_ = (
255,
lambda
V ,B,c
:c and Y(V*V+B,B, c
-1)if(abs(V)<6)else
( 2+c-4*abs(V)**-0.4)/i
) ;v, x=1500,1000;C=range(v*x
);import struct;P=struct.pack;M,\
j ='<QIIHHHH',open('M.bmp','wb').write
for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
i ,Y=_;j(P('BBB',*(lambda T:(T*80+T**9
*i-950*T **99,T*70-880*T**18+701*
T **9 ,T*i**(1-T**45*2)))(sum(
[ Y(0,(A%3/3.+X%v+(X/v+
A/3/3.-x/2)/1j)*2.5
/x -2.7,i)**2 for \
A in C
[:9]])
/9)
) )
来源:http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python/
我发现了一个有趣的 for 循环,我不确定它是否只是混淆的一部分,或者它是否真的有一个功能。中间一行:for X in j('BM'+P(M,v*x*3+26,26,12,v,x,1,24))or C:
or最后做了什么?
为了清楚起见,我将代码重写如下:
import struct
image_name = "M.bmp"
mandlebrot = lambda V,B,c :c and Y(V*V+B,B,c-1) if(abs(V)<6) else (2+c-4*abs(V)**-0.4)/i
y,x = 600,800
pixelrange = range(y*x)
package = struct.pack
image = open(image_name,'wb').write
for X in image('BM'+package('<QIIHHHH',y*x*3+26,26,12,y,x,1,24)) or pixelrange:
i = 255
Y = mandlebrot
image(package('BBB',*(lambda T:(T*80+T**9*i-950*T**99,T*70-880*T**18+701*T**9,T*i**(1-T**45*2)))(sum([Y(0,(A%3/3.+X%y+(X/y+A/3/3.-x/2)/1j)*2.5/x-2.7,i)**2 for A in pixelrange [:9]])/9)))
【问题讨论】:
-
关于你如何发现这个有趣的
for x in y or z的整个故事对于这个问题来说不是必需的,但我很高兴你把它包括在内。这很酷。 -
我原以为答案会复杂得多,因为我不知道“for x in y or z”实际上是对 for 循环的正确/有效使用。像往常一样,python 的简单性让我大吃一惊。
标签: python for-loop obfuscation fractals deobfuscation