public NamingValue(string module, string oldNs, string newNs, PineappleTreeNode node) { this.module = module; this.oldNs = oldNs; this.newNs = newNs; this.node = node; }
private void BuildTree() { pineappleTreeView.BeginUpdate(); pineappleTreeView.Nodes.Clear(); foreach (SearchResults result in results) { PineappleTreeNode node = new PineappleTreeNode(GetEntityName(result.Result)); pineappleTreeView.Nodes.Add(node); switch (result.Message) { case SearchResultMessage.Normal: BuildNormalNode(node, result.Result, result.Original); break; case SearchResultMessage.Ambiguous: BuildAmbigousNode(node, result); break; case SearchResultMessage.Substitution: BuildSubstitutionNode(node, result.Result, result.Original); break; case SearchResultMessage.Failed: BuildFailedNode(node, result.Result, result.Original); break; } } pineappleTreeView.CollapseAll(); pineappleTreeView.EndUpdate(); }
public void Build() { tree.Nodes.Clear(); if (groupModules) { moduleNamespaces = new Dictionary <string, ModuleData>(); } else { noNsNode = new PineappleTreeNode("<no namespace>"); noNsNode.ImageIndex = mainForm.ICON_NO_NAMESPACE; } foreach (RenamedClass c in mapping.Classes) { BuildClass(c); } if (groupModules) { foreach (KeyValuePair <string, ModuleData> ns in moduleNamespaces) { if (ns.Value.noNsNode.Nodes.Count > 0) { ns.Value.moduleNode.Nodes.Add(ns.Value.noNsNode); } } } else if (noNsNode.Nodes.Count > 0) { tree.Nodes.Add(noNsNode); } }
private void BuildSubclass(RenamedClass c, PineappleTreeNode ownerNode) { PineappleTreeNode classNode = CreateNode(c.NameOld); ownerNode.Nodes.Add(classNode); BuildClassContent(c, classNode); }
private static int ElementsComparisonDesc(PineappleTreeNode node1, PineappleTreeNode node2) { if (node1.Subitems.Count == 0 || node2.Subitems.Count == 0) { return(0); } return(string.Compare(node2.Subitems[0].Text, node1.Subitems[0].Text, StringComparison.InvariantCulture)); }
private void BuildClass(RenamedClass c) { PineappleTreeNode classNode = CreateNode(c.NameOld); PineappleTreeNode owner = GetRootNodeForClass(c); owner.Nodes.Add(classNode); BuildClassContent(c, classNode); }
private void BuildSubstitutionNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.BacklightColorIndex = (int)Highlights.Substitution; node.Subitems.Add("Class substitution"); if (originalLine != null && Configs.Instance.ShowOriginal) node.Subitems.Add("Original line: " + originalLine); node.ToolTipText = "Target method not found in mapping."; node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType); }
private void BuildSubstitutionNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.BacklightColorIndex = (int)Highlights.Substitution; node.Text += "\nClass substitution"; if (originalLine != null && Configs.Instance.ShowOriginal) { node.Text += "\nOriginal line: " + originalLine; } node.ToolTipText = "Target method not found in mapping."; node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType, mainForm); }
private void BuildFailedNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType, mainForm); node.BacklightColorIndex = (int)Highlights.Unknown; node.Text += "\nUnable to deobfuscate."; if (originalLine != null && Configs.Instance.ShowOriginal) { node.Text += "\nOriginal line: " + originalLine; } node.ToolTipText = "Unable to deobfuscate method. It is of an unknown or system assembly."; }
private void lvItems_DoubleClick(object sender, EventArgs e) { if (lvItems.SelectedItems.Count == 0) { return; } PineappleTreeNode node = mainForm.Mapping.FindNode((RenamedBase)lvItems.SelectedItems[0].Tag); node.TreeView.SelectedNode = node; node.EnsureVisible(); }
private void lvResults_DoubleClick(object sender, EventArgs e) { if (lvResults.SelectedItems.Count == 0) { return; } PineappleTreeNode node = ((ItemDescriptor)lvResults.SelectedItems[0].Tag).Item.TreeNode; node.TreeView.SelectedNode = node; node.EnsureVisible(); Close(); }
private void BuildResource(RenamedResource resource, ref PineappleTreeNode resourcesNode) { PineappleTreeNode node = CreateNode(resource.NameOld); node.Tag = resource; node.ImageIndex = mainForm.ICON_RESOURCE; node.ToolTipText = BuildHintForResource(resource); PineappleTreeNode ownerNode; string ownerClass = resource.TryGetOwnerClassOld(); if (!groupResources || ownerClass == null || !classNodesMap.TryGetValue(ownerClass, out ownerNode)) { if (resourcesNode == null) { resourcesNode = CreateNode("Resources"); resourcesNode.ImageIndex = mainForm.ICON_RESOURCES; tree.Nodes.Add(resourcesNode); } ownerNode = resourcesNode; } ownerNode.Nodes.Add(node); string subItemText = null; if (resource.NameNew != null) { subItemText = resource.NameNew; } else { node.HighlightColorIndex = (int)Highlights.NotRenamed; } if (subItemText != null) { if (Configs.Instance.UseColumns) { node.Subitems.Add(new PineappleTreeSubitem(subItemText)); } else { node.Text += "\n" + subItemText; } } }
private void BuildAmbigousNode(PineappleTreeNode node, SearchResults result) { node.BacklightColorIndex = (int)Highlights.Ambigous; node.Subitems.Add("Ambigous. See tree subitems for details."); if (Configs.Instance.ShowOriginal) node.Subitems.Add("Original line: " + result.Original); node.ToolTipText = "Unable to precisely determine method. Set of variants provided."; node.ImageIndex = 8; foreach (INamedEntity entity in result.Results) { PineappleTreeNode entityNode = new PineappleTreeNodeMultiline(GetEntityName(entity)); node.Nodes.Add(entityNode); BuildNormalNode(entityNode, entity, null); } }
private void tbtnOpenInTree_Click(object sender, EventArgs e) { if (pineappleTreeView.SelectedNode == null) { return; } ItemDescriptor descriptor = pineappleTreeView.SelectedNode.Tag as ItemDescriptor; if (descriptor == null || descriptor.Renamed == null) { return; } PineappleTreeNode node = descriptor.Renamed.TreeNode; node.TreeView.SelectedNode = node; node.EnsureVisible(); Close(); }
private void BuildAmbigousNode(PineappleTreeNode node, SearchResults result) { node.BacklightColorIndex = (int)Highlights.Ambigous; node.Text += "Ambigous. See tree subitems for details."; if (Configs.Instance.ShowOriginal) { node.Text += "\nOriginal line: " + result.Original; } node.ToolTipText = "Unable to precisely determine method. Set of variants provided."; node.ImageIndex = 8; foreach (INamedEntity entity in result.Results) { PineappleTreeNode entityNode = new PineappleTreeNode(GetEntityName(entity)); node.Nodes.Add(entityNode); BuildNormalNode(entityNode, entity, null); } }
private ModuleData GetModuleData(string moduleName) { ModuleData data; if (moduleNamespaces.TryGetValue(moduleName, out data)) { return(data); } PineappleTreeNode moduleNode = new PineappleTreeNode(moduleName); moduleNode.ImageIndex = mainForm.ICON_ASSEMBLY; tree.Nodes.Add(moduleNode); PineappleTreeNode moduleNoNsNode = new PineappleTreeNode("<no namespace>"); moduleNoNsNode.ImageIndex = mainForm.ICON_NO_NAMESPACE; data = new ModuleData(moduleNode, moduleNoNsNode); moduleNamespaces.Add(moduleName, data); return(data); }
public virtual void PurgeTreeNodes() { treeNode = null; }
private void BuildNormalNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType); ItemDescriptor descriptor = new ItemDescriptor(entity); string tooltip = descriptor.GetToolTip(); node.Tag = descriptor; RenamedItem item = entity as RenamedItem; if (item != null) node.Subitems.Add("Owner class: " + item.Owner.NameOldFull); RenamedBase renamedBase = (RenamedBase)entity; if (tbtnShort.Checked) node.Subitems.Add("New name: " + renamedBase.NameNew); if (tbtnSimple.Checked) node.Subitems.Add("New name: " + renamedBase.NameNewSimple); if (tbtnFull.Checked) node.Subitems.Add("New name: " + renamedBase.NameNewFull); if (originalLine != null && Configs.Instance.ShowOriginal) node.Subitems.Add("Original line: " + originalLine); if (!mainForm.HavePdb) tooltip += "Unable to map to source code, no PDB files attached."; else { if (entity.EntityType != EntityType.Method) tooltip += "Mapping to source code works only for methods."; else { ProcessPdb(descriptor); if (descriptor.Filename != null) { node.Subitems.Add(PathUtils.ShortenPath(descriptor.Filename, 100) + ":" + descriptor.Line); tooltip += descriptor.Filename + ":" + descriptor.Line; } else tooltip += "Unable to map to source code."; } } node.ToolTipText = tooltip; }
private void BuildNormalNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType, mainForm); ItemDescriptor descriptor = new ItemDescriptor(entity); string tooltip = descriptor.GetToolTip(); node.Tag = descriptor; RenamedItem item = entity as RenamedItem; if (item != null) { node.Text += "\nOwner class: " + item.Owner.NameOldFull; } RenamedBase renamedBase = (RenamedBase)entity; if (tbtnShort.Checked) { node.Text += "\nNew name: " + renamedBase.NameNew; } if (tbtnSimple.Checked) { node.Text += "\nNew name: " + renamedBase.NameNewSimple; } if (tbtnFull.Checked) { node.Text += "\nNew name: " + renamedBase.NameNewFull; } if (originalLine != null && Configs.Instance.ShowOriginal) { node.Text += "\nOriginal line: " + originalLine; } if (!mainForm.HavePdb) { tooltip += "Unable to map to source code, no PDB files attached."; } else { if (entity.EntityType != EntityType.Method) { tooltip += "Mapping to source code works only for methods."; } else { ProcessPdb(descriptor); if (descriptor.Filename != null) { node.Text += "\n" + PathUtils.ShortenPath(descriptor.Filename, 100) + ":" + descriptor.Line; tooltip += descriptor.Filename + ":" + descriptor.Line; } else { tooltip += "Unable to map to source code."; } } } node.ToolTipText = tooltip; }
private void BuildFailedNode(PineappleTreeNode node, INamedEntity entity, string originalLine) { node.ImageIndex = TreeBuilder.GetIconForEntity(entity.EntityType); node.BacklightColorIndex = (int)Highlights.Unknown; node.Subitems.Add("Unable to deobfuscate."); if (originalLine != null && Configs.Instance.ShowOriginal) node.Subitems.Add("Original line: " + originalLine); node.ToolTipText = "Unable to deobfuscate method. It is of an unknown or system assembly."; }
public ModuleData(PineappleTreeNode moduleNode, PineappleTreeNode noNsNode) { this.moduleNode = moduleNode; this.noNsNode = noNsNode; }
private PineappleTreeNode GetRootNodeForClass(RenamedClass c) { if (c.Name.NameOld.Namespace == null) { return(GetNoNsNodeByModule(c.Name.NameNew.Module)); } foreach (NamingValue value in naming) { if (groupModules && !Equals(value.module, c.ModuleNew)) { continue; } if (!groupNamespaces && !Equals(value.newNs, c.Name.NameNew.Namespace)) { continue; } if (!Equals(value.oldNs, c.Name.NameOld.Namespace)) { continue; } return(value.node); } PineappleTreeNode node = CreateNode(c.Name.NameOld.Namespace); node.ImageIndex = mainForm.ICON_NAMESPACE; string subItemText = null; if (c.Name.NameNew == null) { node.HighlightColorIndex = (int)Highlights.NoNewName; subItemText = "n/a"; } else if (c.Name.NameNew.CompareNamespace(c.Name.NameOld)) { node.HighlightColorIndex = (int)Highlights.NotRenamed; } else { subItemText = c.Name.NameNew.Namespace; } if (subItemText != null) { if (Configs.Instance.UseColumns) { node.Subitems.Add(new PineappleTreeSubitem(subItemText)); } else { node.Text += "\n" + subItemText; } } if (groupModules) { GetModuleData(c.Name.NameNew.Module).moduleNode.Nodes.Add(node); } else { tree.Nodes.Add(node); } naming.Add(new NamingValue(c.Name.NameNew.Module, c.Name.NameOld.Namespace, c.Name.NameNew.Namespace, node)); return(node); }
public void MapRenamed(RenamedBase renamed, PineappleTreeNode node) { nodesMap.Add(renamed, node); }
private void BuildClassContent(RenamedClass c, PineappleTreeNode classNode) { classNode.ImageIndex = mainForm.ICON_CLASS; classNode.Tag = c; classNode.ToolTipText = BuildHintForClass(c); mapping.MapRenamed(c, classNode); string subItemText = null; if (c.NameNew != null) { if (c.Name.NameNew.Equals(c.Name.NameOld)) { classNode.HighlightColorIndex = (int)Highlights.NotRenamed; } else { subItemText = CheckIfUnicode(showModules ? c.NameNewFull : c.NameNew); } } else { subItemText = "n/a"; classNode.HighlightColorIndex = (int)Highlights.NoNewName; } if (subItemText != null) { if (Configs.Instance.UseColumns) { classNode.Subitems.Add(new PineappleTreeSubitem(subItemText)); } else { classNode.Text += "\n" + subItemText; } } foreach (RenamedBase renamedItem in c.Items) { if (renamedItem.EntityType == EntityType.Class) { BuildSubclass((RenamedClass)renamedItem, classNode); continue; } RenamedItem item = (RenamedItem)renamedItem; if (item.SkipReason != null && !showSkippedMembers) { continue; } PineappleTreeNode node = new PineappleTreeNode(item.NameOld); classNode.Nodes.Add(node); node.ImageIndex = GetIconForEntity(item.EntityType, mainForm); node.Tag = item; mapping.MapRenamed(item, node); node.ToolTipText = BuildHintForItem(item); subItemText = null; if (item.NameNew == null) { node.HighlightColorIndex = (int)Highlights.NoNewName; subItemText = "n/a"; } else { if (item.NameNew.Equals(item.NameOld)) { node.HighlightColorIndex = (int)Highlights.NotRenamed; } else { subItemText = CheckIfUnicode(item.NameNew); } } if (subItemText != null) { if (Configs.Instance.UseColumns) { node.Subitems.Add(new PineappleTreeSubitem(subItemText)); } else { node.Text += "\n" + subItemText; } } } }
public virtual void PurgeTreeNodes() { treeNode = null; }