Exemple #1
0
        void ProcessStructuralPhases(ModuleDefinition mod, IDictionary <IConfusion, NameValueCollection> globalParams, IEnumerable <Phase> phases)
        {
            ConfusionParameter cParam = new ConfusionParameter();
            bool end1 = false;

            foreach (StructurePhase i in from i in phases where (i is StructurePhase)orderby(int) i.Priority + i.PhaseID * 10 ascending select i)
            {
                if (!end1 && i.PhaseID > 1)
                {
                    MarkModule(mod);
                    MarkObfuscateHelpers(mod);
                    CecilHelper.RefreshTokens(mod);
                    end1 = true;
                }
                List <IAnnotationProvider> mems = GetTargets(mod, i.Confusion);
                if (mems.Count == 0)
                {
                    continue;
                }

                i.Confuser = this;
                param.Logger.Log("Executing " + i.Confusion.Name + " Phase " + i.PhaseID + "...");

                i.Initialize(mod);
                if (globalParams.ContainsKey(i.Confusion))
                {
                    cParam.GlobalParameters = globalParams[i.Confusion];
                }
                else
                {
                    cParam.GlobalParameters = new NameValueCollection();
                }
                if (i.WholeRun == true)
                {
                    cParam.Parameters = null;
                    cParam.Target     = null;
                    i.Process(cParam);
                    param.Logger.Progress(1);
                }
                else
                {
                    if (i is IProgressProvider)
                    {
                        cParam.Parameters = new NameValueCollection();
                        foreach (IAnnotationProvider mem in mems)
                        {
                            NameValueCollection memParam = (from set in mem.Annotations["ConfusionSets"] as IDictionary <IConfusion, NameValueCollection> where set.Key.Phases.Contains(i) select set.Value).FirstOrDefault();
                            string hash = mem.GetHashCode().ToString("X8");
                            foreach (string pkey in memParam.AllKeys)
                            {
                                cParam.Parameters[hash + "_" + pkey] = memParam[pkey];
                            }
                        }
                        cParam.Target = mems;
                        (i as IProgressProvider).SetProgresser(param.Logger);
                        i.Process(cParam);
                    }
                    else
                    {
                        double total    = mems.Count;
                        int    interval = 1;
                        if (total > 1000)
                        {
                            interval = (int)total / 100;
                        }
                        int now = 0;
                        foreach (IAnnotationProvider mem in mems)
                        {
                            cParam.Parameters = (from set in mem.Annotations["ConfusionSets"] as IDictionary <IConfusion, NameValueCollection> where set.Key.Phases.Contains(i) select set.Value).FirstOrDefault();
                            cParam.Target     = mem;
                            i.Process(cParam);
                            if (now % interval == 0 || now == total - 1)
                            {
                                param.Logger.Progress((now + 1) / total);
                            }
                            now++;
                        }
                    }
                    param.Logger.Progress(1);
                }
                i.DeInitialize();
            }
        }
 public abstract void Process(ConfusionParameter parameter);