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();
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 5
0
 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));
 }
Ejemplo n.º 6
0
        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();
        }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 23
0
 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;
 }