C4D保存的工程文件被加密解除加密保护解决方案
VIEW CONTENTS

C4D保存的工程文件被加密解除加密保护解决方案

2020-1-14 20:55| 发布者: admin| 查看: 1680| 评论: 0
摘要: C4D保存的工程文件被加密解除加密保护解决 方案
C4D保存的工程文件被加密解除加密保护解决 方案
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)刚才的代码最后一行注释掉,并在下面添加以下两行。然后把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)刚才的代码最后一行注释掉,添加以下代码并运行,得到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工程文件常见保护、解除保护方法.zip



路过

雷人

握手

鲜花

鸡蛋

最新评论

关闭

菜鸟C4D推荐上一条 /9 下一条

菜鸟C4D与你一起从零开始!
十年专注C4D学习

( 浙ICP备13033195号-2 )Copyright   ©2013-2024  Powered by©Discuz!  技术支持:cainiao    

|网站地图