コード例 #1
0
 public override object LoadAssembly(string path)
 {
     if (PathUtils.IsNetModule(path))
     {
         return(null);
     }
     return(AssemblyDefinition.ReadAssembly(path));
 }
コード例 #2
0
        private void cmAssembly_Opening(object sender, CancelEventArgs e)
        {
            ContextMenuStrip cms = sender as ContextMenuStrip;

            //nothing selected
            if (dgvData.SelectedRows.Count < 1)
            {
                for (int i = 0; i < cms.Items.Count; i++)
                {
                    cms.Items[i].Enabled = false;
                }
                return;
            }

            //common menus
            cms.Items["cmCopyInfo"].Enabled   = true;
            cms.Items["cmOpenFolder"].Enabled = true;
            cms.Items["cmDeleteFile"].Enabled = true;

            //checking selected rows
            bool oneSelected   = dgvData.SelectedRows.Count == 1;
            bool isAllExe      = true;
            bool isAllAssembly = true;
            bool hasNetModule  = false;

            for (int i = 0; i < dgvData.SelectedRows.Count; i++)
            {
                string fileName = PathUtils.GetFileName(dgvData.SelectedRows[i]);
                isAllExe      = isAllExe && PathUtils.IsExe(fileName);
                isAllAssembly = isAllAssembly && PathUtils.IsAssembly(fileName);
                hasNetModule  = hasNetModule || PathUtils.IsNetModule(fileName);
            }
            bool isAllIL = !isAllAssembly;

            //standard menus
            if (isAllAssembly)
            {
                cms.Items["cmDasm"].Enabled = true;
                if (hasNetModule)
                {
                    cms.Items["cmDeobf"].Enabled      = false;
                    cms.Items["cmVerify"].Enabled     = false;
                    cms.Items["cmStrongName"].Enabled = false;
                }
                else
                {
                    cms.Items["cmDeobf"].Enabled      = true;
                    cms.Items["cmVerify"].Enabled     = true;
                    cms.Items["cmStrongName"].Enabled = true;
                }
                cms.Items["cmClassEditor"].Enabled = true;  //disable this just because Reflector cannot load *same* assembly files
                if (oneSelected && !hasNetModule)
                {
                    cms.Items["cmRunMethod"].Enabled = true;
                }
                else
                {
                    cms.Items["cmRunMethod"].Enabled = false;
                }
            }
            else
            {
                cms.Items["cmDasm"].Enabled        = false;
                cms.Items["cmDeobf"].Enabled       = false;
                cms.Items["cmVerify"].Enabled      = false;
                cms.Items["cmStrongName"].Enabled  = false;
                cms.Items["cmClassEditor"].Enabled = false;
                cms.Items["cmRunMethod"].Enabled   = false;
            }

            if (isAllIL)
            {
                cms.Items["cmAsm"].Enabled = true;
            }
            else
            {
                cms.Items["cmAsm"].Enabled = false;
            }

            if (isAllExe && oneSelected)
            {
                cms.Items["cmProfiler"].Enabled = true;
            }
            else
            {
                cms.Items["cmProfiler"].Enabled = false;
            }

            foreach (ToolStripItem item in cms.Items)
            {
                ToolStripMenuItem mi = item as ToolStripMenuItem;
                if (mi == null || mi.Tag == null)
                {
                    continue;
                }
                IMainPlugin plugin = mi.Tag as IMainPlugin;
                if (plugin == null)
                {
                    continue;
                }

                MainPluginInfo pi = plugin.PluginInfo;
                if (pi.RowType == RowTypes.One && !oneSelected)
                {
                    mi.Enabled = false;
                }
                else
                {
                    if (pi.SourceType == SourceTypes.Any)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Assembly && isAllAssembly)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.Executable && isAllExe)
                    {
                        mi.Enabled = true;
                    }
                    else if (pi.SourceType == SourceTypes.ILFile && isAllIL)
                    {
                        mi.Enabled = true;
                    }
                    else
                    {
                        mi.Enabled = false;
                    }
                }
            }

            e.Cancel = false;
        }
コード例 #3
0
        private void AddFiles(string path, string match)
        {
            try
            {
                escPressed = false;

                DirectoryInfo di         = new DirectoryInfo(path + Path.DirectorySeparatorChar);
                FileInfo[]    files      = di.GetFiles(match);
                bool          isAssembly = PathUtils.IsAssembly(match);

                foreach (FileInfo file in files)
                {
                    if (escPressed)
                    {
                        break;
                    }
                    if (file.Length == 0)
                    {
                        continue;
                    }

                    SetStatusText(String.Format("Press ESC to cancel: {0}", file.FullName));
                    try
                    {
                        if (isAssembly)
                        {
                            //try
                            //{
                            //    AssemblyName an = AssemblyName.GetAssemblyName(file.FullName);
                            //    DataRow dr = dtFiles.NewRow();
                            //    dr["file_name"] = file.Name;
                            //    dr["assembly_name"] = an.Name;
                            //    dr["version"] = an.Version.ToString();
                            //    dr["public_token"] = TokenUtils.GetPublicKeyTokenString(an);
                            //    dr["processor_architecture"] = an.ProcessorArchitecture == ProcessorArchitecture.None ? String.Empty : an.ProcessorArchitecture.ToString();
                            //    dr["full_name"] = an.FullName;
                            //    dtFiles.Rows.Add(dr);
                            //}
                            //catch (BadImageFormatException)

                            if (PathUtils.IsNetModule(file.FullName))
                            {
                                ModuleDefinition md = ModuleDefinition.ReadModule(file.FullName);
                                DataRow          dr = dtFiles.NewRow();
                                dr["file_name"]              = file.Name;
                                dr["assembly_name"]          = String.Empty;
                                dr["version"]                = String.Empty;
                                dr["public_token"]           = null;
                                dr["target_runtime"]         = md.Runtime.ToString().Replace("Net_", "").Replace("_", ".");
                                dr["processor_architecture"] = GetProcessorArchitecture(md);
                                dr["full_name"]              = md.FullyQualifiedName;
                                dtFiles.Rows.Add(dr);
                            }
                            else
                            {
                                AssemblyDefinition     ad = AssemblyDefinition.ReadAssembly(file.FullName);
                                AssemblyNameDefinition an = ad.Name;
                                DataRow dr = dtFiles.NewRow();
                                dr["file_name"]              = file.Name;
                                dr["assembly_name"]          = an.Name;
                                dr["version"]                = an.Version.ToString();
                                dr["public_token"]           = TokenUtils.GetPublicKeyTokenString(an.PublicKeyToken);
                                dr["target_runtime"]         = ad.MainModule.Runtime.ToString().Replace("Net_", "").Replace("_", ".");
                                dr["processor_architecture"] = GetProcessorArchitecture(ad.MainModule);
                                dr["full_name"]              = an.FullName;
                                dtFiles.Rows.Add(dr);
                            }
                        }
                        else
                        {
                            DataRow dr = dtFiles.NewRow();
                            dr["file_name"] = file.Name;
                            dr["full_name"] = file.FullName;
                            dtFiles.Rows.Add(dr);
                        }
                    }
                    catch
                    {
                        //not .net assembly
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                SetStatusText(null);
            }
        }