Ejemplo n.º 1
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ModuleImport, string ModuleFilePath)
        {
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            if (ModuleFilePath == null)
            {
                return(Result);
            }

            string ApiSetName = LookupApiSetLibrary(ModuleFilePath);

            if (ApiSetName != null)
            {
                ModuleFilePath = ApiSetName;
            }

            PE Module = LoadPe(ModuleFilePath);

            if (Module == null)
            {
                return(Result);
            }

            return(LookupImports(ModuleImport, Module.GetExports()));
        }
Ejemplo n.º 2
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ModuleImport, string ModuleFilePath)
        {
            PE Module = null;
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            // if there is a module name, try to resolve apiset for attempting to load it
            if (ModuleFilePath != null)
            {
                string ApiSetName = LookupApiSetLibrary(ModuleFilePath);
                if (!string.IsNullOrEmpty(ApiSetName))
                {
                    Module = ResolveModule(ApiSetName).Item2;
                }
                else
                {
                    Module = LoadPe(ModuleFilePath);
                }
            }

            // If the module has not been found, mark all imports as not found
            if (Module == null)
            {
                foreach (PeImport Import in ModuleImport.ImportList)
                {
                    Result.Add(new Tuple <PeImport, bool>(Import, false));
                }

                return(Result);
            }

            return(LookupImports(ModuleImport, Module.GetExports()));
        }
        private ImportContext ResolveImport(PeImportDll DllImport)
        {
            ImportContext ImportModule = new ImportContext();

            ImportModule.PeFilePath       = null;
            ImportModule.PeProperties     = null;
            ImportModule.ModuleName       = DllImport.Name;
            ImportModule.ApiSetModuleName = null;
            ImportModule.Flags            = 0;
            if (DllImport.IsDelayLoad())
            {
                ImportModule.Flags |= ModuleFlag.DelayLoad;
            }

            Tuple <ModuleSearchStrategy, PE> ResolvedModule = BinaryCache.ResolveModule(
                this.Pe,
                DllImport.Name,
                this.SxsEntriesCache,
                this.CustomSearchFolders,
                this.WorkingDirectory
                );

            ImportModule.ModuleLocation = ResolvedModule.Item1;
            if (ImportModule.ModuleLocation != ModuleSearchStrategy.NOT_FOUND)
            {
                ImportModule.PeProperties = ResolvedModule.Item2;

                if (ResolvedModule.Item2 != null)
                {
                    ImportModule.PeFilePath = ResolvedModule.Item2.Filepath;
                    foreach (var Import in BinaryCache.LookupImports(DllImport, ImportModule.PeFilePath))
                    {
                        if (!Import.Item2)
                        {
                            ImportModule.Flags |= ModuleFlag.MissingImports;
                            break;
                        }
                    }
                }
            }
            else
            {
                ImportModule.Flags |= ModuleFlag.NotFound;
            }

            // special case for apiset schema
            ImportModule.IsApiSet = (ImportModule.ModuleLocation == ModuleSearchStrategy.ApiSetSchema);
            if (ImportModule.IsApiSet)
            {
                ImportModule.Flags           |= ModuleFlag.ApiSet;
                ImportModule.ApiSetModuleName = BinaryCache.LookupApiSetLibrary(DllImport.Name);

                if (DllImport.Name.StartsWith("ext-"))
                {
                    ImportModule.Flags |= ModuleFlag.ApiSetExt;
                }
            }

            return(ImportModule);
        }
Ejemplo n.º 4
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ModuleImport, string ModuleFilePath)
        {
            PE Module = null;
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            if (ModuleFilePath == null)
            {
                return(Result);
            }

            string ApiSetName = LookupApiSetLibrary(ModuleFilePath);

            if (!string.IsNullOrEmpty(ApiSetName))
            {
                Module = ResolveModule(ApiSetName).Item2;
            }
            else
            {
                Module = LoadPe(ModuleFilePath);
            }


            if (Module == null)
            {
                return(Result);
            }

            return(LookupImports(ModuleImport, Module.GetExports()));
        }
Ejemplo n.º 5
0
 public static ImportDll From(PeImportDll i)
 {
     return(new ImportDll
     {
         Name = i.Name
     });
 }
Ejemplo n.º 6
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ModuleImport, string ModuleFilePath)
        {
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            if (ModuleFilePath == null)
            {
                return(Result);
            }

            string ApiSetName = LookupApiSetLibrary(ModuleFilePath);

            if (ApiSetName != null)
            {
                ModuleFilePath = ApiSetName;
            }

            PE Module = LoadPe(ModuleFilePath);

            if (Module == null)
            {
                return(Result);
            }

            foreach (PeImport Import in ModuleImport.ImportList)
            {
                bool bFoundImport = false;

                foreach (var export in Module.GetExports())
                {
                    if (Import.ImportByOrdinal)
                    {
                        if ((export.Ordinal == Import.Ordinal) && export.ExportByOrdinal)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                    else
                    {
                        if (export.ForwardedName == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }


                        if (export.Name == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                }

                Result.Add(new Tuple <PeImport, bool>(Import, bFoundImport));
            }

            return(Result);
        }
Ejemplo n.º 7
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ParentImports, List <PeExport> ModuleExports)
        {
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            foreach (PeImport Import in ParentImports.ImportList)
            {
                bool bFoundImport = false;

                foreach (var export in ModuleExports)
                {
                    if (Import.ImportByOrdinal)
                    {
                        // Even if the export has a Name (therefore not a pure export by ordinal)
                        // we can still possibly import it by its ordinal, although it's not recommended.
                        if ((export.Ordinal == Import.Ordinal) /*&& export.ExportByOrdinal*/)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                    else
                    {
                        if (export.ForwardedName == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }


                        if (export.Name == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                }

                Result.Add(new Tuple <PeImport, bool>(Import, bFoundImport));
            }

            return(Result);
        }
Ejemplo n.º 8
0
        public static List <Tuple <PeImport, bool> > LookupImports(PeImportDll ParentImports, List <PeExport> ModuleExports)
        {
            List <Tuple <PeImport, bool> > Result = new List <Tuple <PeImport, bool> >();

            foreach (PeImport Import in ParentImports.ImportList)
            {
                bool bFoundImport = false;

                foreach (var export in ModuleExports)
                {
                    if (Import.ImportByOrdinal)
                    {
                        if ((export.Ordinal == Import.Ordinal) && export.ExportByOrdinal)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                    else
                    {
                        if (export.ForwardedName == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }


                        if (export.Name == Import.Name)
                        {
                            bFoundImport = true;
                            break;
                        }
                    }
                }

                Result.Add(new Tuple <PeImport, bool>(Import, bFoundImport));
            }

            return(Result);
        }