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

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

插件脚本 /[系统辅助]
2809 4 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. def main():
  7. obj = doc.SearchObject("Book Generator - NitroMan")

  8. if obj:
  9. print obj
  10. print obj[1033550]

  11. tag = obj[1033550]
  12. # 获取python tag.code
  13. #print "|---", tag[c4d.TPYTHON_CODE]

  14. node = tag[1033547]
  15. print node
  16. #print "|---", node[c4d.GV_PYTHON_CODE]

  17. for tag2 in obj.GetTags():
  18. 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()
复制代码

以上。


附件信息

B Color Smilies

Comment :4

插件脚本
软件性质: 脚本
适用版本: C4D R15 - C4D R21
软件版本: Version: unknown
系统平台: Win
软件语言: 中文
插件来源: http://soft.c4d.com.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

知识
问答
快速回复 返回顶部 返回列表