c4d工程文件常见加密保护、解除保护方法 

2019-11-30 15:08 发布 | 作品版权归原作者所有,仅供参考学习,禁止商业使用!

插件脚本 /[系统辅助]
1056 0 0
原创推荐
c4d工程文件的保护主要是把python代码隐藏、把对象隐藏、把expresso隐藏、对expresso加密码等。下面一一分析说明。

第*部分:隐藏python tag。文件代表:官方preset://Visualize.lib4d,里面有一个Living Room.c4d。

粗略分析一下现有对象,Furniture下有一个Book Generator -  NitroMan的python generator,它下面是一堆python generator,前面都带“+”号,通常这表示还有下一层,但点开又什么都没有,所以从这里入手。

1)分析Book Generator -  NitroMan的code(记为代码A),得知以下一句。
  1. c4d.CallFunction(op[1033550],"m1",op)
复制代码


2)在Script Manager运行以下代码(加在main方法里),由Console的结果得知Book Generator -  NitroMan有一个python tag,并处于隐藏状态。   
  1. obj = doc.SearchObject("Book Generator -  NitroMan")
  2. if obj:
  3.     print obj        
  4.     print obj[1033550]
复制代码

3)刚才的代码下面添加以下三行,并运行,在Console里右键>copy all,得到python tag的代码原貌(记为代码B),并复制到文本编辑器进行下一步分析。        
  1. tag = obj[1033550]
  2. # 获取python tag.code
  3. print "|---", tag[c4d.TPYTHON_CODE]
复制代码

4)分析代码B,发现被隐藏的代码A中调用的m1、m2等方法,并得到以下一句。
  1. c4d.CallFunction(op[1033547],"m1",obj)
复制代码


5)刚才的代码zui*后一行注释掉,并在下面添加以下两行。然后把Console的代码清空,再到Script Manager里运行,得知node是一个expresso的python node。        
  1. node = tag[1033547]
  2. print node
复制代码

6)添加以下代码并运行,得到另一段代码(记为代码C),复制到新的文档进行分析。        
  1. print "|---", node[c4d.GV_PYTHON_CODE]
复制代码


7)分析代码C,得到隐藏对象的核心方法HideObject和反隐藏对象的方法UnHideObject。

8)刚才的代码zui*后一行注释掉,添加以下代码并运行,得到Book Generator -  NitroMan的隐藏xpresso tag
  1. for tag2 in obj.GetTags():
  2.     tag2[c4d.EXPRESSION_ENABLE] = False            
  3.     UnHideObject(tag2)
复制代码

9)查看xpresso,可以看到,xpresso被密码保护,看不到里面的内容。至此,分析结束。当然,有需要的情况下,还可以利用GvNode需要深入探索,这里不展开。

10)完整代码(注意python代码是严格缩进格式的):
  1. import c4d
  2. from c4d import gui

  3. def UnHideObject(obj):
  4.     obj.ChangeNBit(c4d.NBIT_THIDE,c4d.NBITCONTROL_CLEAR)
  5.     obj.ChangeNBit(c4d.NBIT_OHIDE,c4d.NBITCONTROL_CLEAR)
  6.    
  7. def main():
  8.     obj = doc.SearchObject("Book Generator -  NitroMan")

  9.     if obj:
  10.         print obj
  11.         print obj[1033550]
  12.         
  13.         tag = obj[1033550]
  14.         # 获取python tag.code
  15.         #print "|---", tag[c4d.TPYTHON_CODE]
  16.         
  17.         node = tag[1033547]
  18.         print node
  19.         #print "|---", node[c4d.GV_PYTHON_CODE]

  20.         for tag2 in obj.GetTags():
  21.             tag2[c4d.EXPRESSION_ENABLE] = False
复制代码

------------------------------------------------------

第二部分:图层互斥锁。文件代表:Bendy Limbs Rig for Cinema 4D

打开文件,只见到一个BendyLimbsRig的Null,再没有其它对象。而几个上锁的图层,还有主视图里面的几个Spline对象,说明里面隐藏着什么,所以从这里入手。

1)添加一个Null,名字随意(我起名为Unlocker),并添加一个python tag。

2)python tag的Priority设置为{Generators,499}。

3)双击python tag图标,在Expression Editor里,把全部代码替换为以下代码,即可显示全部隐藏的内容。

  1. import c4d

  2. def UnlockAllLayers():
  3.     doc = c4d.documents.GetActiveDocument()
  4.     if not doc: return

  5.     print "=== UnlockAllLayers ==="
  6.     layerRoot = doc.GetLayerObjectRoot()
  7.     if layerRoot:
  8.         layer = layerRoot.GetDown()
复制代码
  1.         while layer:
  2.             layer[1000] = 0 # solo
  3.             layer[1003] = 1 # visible in manager
  4.             layer[1004] = 0 # locked
  5.             layer[c4d.ID_LAYER_VIEW] = 1
  6.             layer[c4d.ID_LAYER_RENDER] = 1

  7.             layer = layer.GetNext()

  8. def main():
  9.     UnlockAllLayers()
复制代码

以上。


附件信息

插件脚本
软件性质: 脚本 
适用版本: C4D R15 - C4D R16 - C4D R17 - C4D R18 - C4D R19 - C4D R20 - C4D R21
软件版本: Version: unknown
系统平台: Win 
软件语言: 中文 
插件来源: http://soft.c4d.cn
百套精美Kitbash3D模型专题合集下载
时尚卡通办公室人物C4D立体图标工程下载Cinema 4D Fashion Cartoon Office Character 3D Icon Project Download
C4D科技新闻片头电视栏目频道包装动画工程下载Cinema 4D Technology News Headline TV Program Channel Packaging Animation Project Download
关闭

C4D精选推荐 上一条 /10 下一条

智能
客服
快速回复 返回顶部 返回列表