rhino强大的后面有gh

Grasshopper允许您将定义存储在群集中,以便在其他定义中再次使用它们。您也可以通过设置密码来保护它们。但是,随着时间的流逝,很可能会忘记它们,而您的定义似乎永远消失了。

那么有没有办法继续访问它呢?是的,有,我通过反思向您展示了潜在的破解方法。
打开一个新的C#脚本组件
第一步,我们需要在活动画布上找到集群:
因此我们得到所有带有
var ghObjs = GrasshopperDocument.Objects;
现在我们遍历:
object clusterObject = null;
for(int i = 0; i < ghObjs.Count ; i ++){ 如果((ghObjs [i] .NickName ==“群集XYZ”))
clusterObject = ghObjs [i];
}
现在,由于我们知道该对象必须是GH_Cluster,因此我们需要对其进行强制转换:
Grasshopper.Kernel.Special.GH_Cluster群集=(Grasshopper.Kernel.Special.GH_Cluster)clusterObject;
我们现在可以潜在地调用cluster.AssignNewPassword,但是由于我们不知道旧密码,因此这里存在问题。大概有充分的理由说明它并非如此容易。关于密码的一种建议是不要将其存储在类中,甚至是加密的。但是我想David Rutten并不十分在意使其非常安全,因为定义的复杂性还不足以应用复杂的安全系统。他可能只将密码存储在GH_Cluster的私有字段中。那么我们如何通过脚本来获得这个私有字段呢?通过反射简单地完成。现在来了技巧1:
类型type = typeof(Grasshopper.Kernel.Special.GH_Cluster);System.Reflection.FieldInfo []字段= type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
现在,我们有了GH_Cluster中的每个私有字段。我们只需要搜索一个合适的字段名。我在这里采取捷径:
我发现fields [0]的名称是m_password,它是一个字节数组,因此已加密。遗憾的是,我们不能在不知道密钥的情况下简单地对它进行解密,但是我们可以简单地用另一个替换密码。只需更改字节数组即可。因此,我做了第二个集群,并用密码“ password”对其进行了保护,然后将其替换为targetcluster的字节数组。是不是很简单?我将其转换为字符串并返回一个字节数组,但是您也可以直接使用它。我希望得到一些有价值的东西,但是我没有找到任何用于解密的东西。
字段[0] .SetValue(群集,Convert.FromBase64String(“ WcakCiz / 0YCBPRn / NG5u5A ==”))
其中“ WcakCiz / 0YCBPRn / NG5u5A ==”表示“密码”,只需替换它即可。现在,一旦执行了该脚本,您的目标群集现在将拥有一个新的defaultpassword。


网友评论