当前位置: 首页>>代码示例>>C#>>正文


C# Blocks.getCode方法代码示例

本文整理汇总了C#中de4dot.blocks.Blocks.getCode方法的典型用法代码示例。如果您正苦于以下问题:C# Blocks.getCode方法的具体用法?C# Blocks.getCode怎么用?C# Blocks.getCode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在de4dot.blocks.Blocks的用法示例。


在下文中一共展示了Blocks.getCode方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: cleanUp

        public IEnumerable<FieldDef> cleanUp()
        {
            var removedFields = new List<FieldDef>();
            var moduleCctor = DotNetUtils.getModuleTypeCctor(module);
            if (moduleCctor == null)
                return removedFields;
            var moduleCctorBlocks = new Blocks(moduleCctor);

            var keep = findFieldsToKeep();
            foreach (var fieldInfo in fieldToInfo.getValues()) {
                if (keep.ContainsKey(fieldInfo))
                    continue;
                if (removeInitCode(moduleCctorBlocks, fieldInfo)) {
                    removedFields.Add(fieldInfo.field);
                    removedFields.Add(fieldInfo.arrayInitField);
                }
                fieldInfo.arrayInitField.InitialValue = new byte[1];
                fieldInfo.arrayInitField.FieldSig.Type = module.CorLibTypes.Byte;
                fieldInfo.arrayInitField.RVA = 0;
            }

            IList<Instruction> allInstructions;
            IList<ExceptionHandler> allExceptionHandlers;
            moduleCctorBlocks.getCode(out allInstructions, out allExceptionHandlers);
            DotNetUtils.restoreBody(moduleCctorBlocks.Method, allInstructions, allExceptionHandlers);
            return removedFields;
        }
开发者ID:GodLesZ,项目名称:ConfuserDeobfuscator,代码行数:27,代码来源:ArrayBlockState.cs

示例2: deobfuscate

        void deobfuscate(MethodDefinition method, string msg, Action<Blocks> handler)
        {
            if (savedMethodBodies != null)
                savedMethodBodies.save(method);

            Log.v("{0}: {1} ({2:X8})", msg, Utils.removeNewlines(method), method.MetadataToken.ToUInt32());
            Log.indent();

            if (hasNonEmptyBody(method)) {
                var blocks = new Blocks(method);

                handler(blocks);

                IList<Instruction> allInstructions;
                IList<ExceptionHandler> allExceptionHandlers;
                blocks.getCode(out allInstructions, out allExceptionHandlers);
                DotNetUtils.restoreBody(method, allInstructions, allExceptionHandlers);
            }

            Log.deIndent();
        }
开发者ID:huliang,项目名称:de4dot,代码行数:21,代码来源:ObfuscatedFile.cs

示例3: createMethod

        public void createMethod(MethodBase realMethod)
        {
            if (realMethodToNewMethod.ContainsKey(realMethod))
                return;
            var newMethodInfo = new NewMethodInfo(realMethod, newMethodInfos.Count, getDelegateMethodName(realMethod), getDelegateMethodName(realMethod));
            newMethodInfos.Add(newMethodInfo);
            delegateNameToNewMethodInfo[newMethodInfo.delegateMethodName] = newMethodInfo;
            delegateNameToNewMethodInfo[newMethodInfo.rewrittenMethodName] = newMethodInfo;
            realMethodToNewMethod[realMethod] = newMethodInfo;

            var moduleInfo = Resolver.loadAssembly(realMethod.Module);
            var methodInfo = moduleInfo.getMethod(realMethod);
            if (!methodInfo.hasInstructions())
                throw new ApplicationException(string.Format("Method {0} ({1:X8}) has no body", methodInfo.methodDef, methodInfo.methodDef.MDToken.Raw));

            var codeGenerator = new CodeGenerator(this, newMethodInfo.delegateMethodName);
            codeGenerator.setMethodInfo(methodInfo);
            newMethodInfo.delegateType = codeGenerator.DelegateType;

            var blocks = new Blocks(methodInfo.methodDef);
            foreach (var block in blocks.MethodBlocks.getAllBlocks())
                update(block, newMethodInfo);

            IList<Instruction> allInstructions;
            IList<ExceptionHandler> allExceptionHandlers;
            blocks.getCode(out allInstructions, out allExceptionHandlers);
            newMethodInfo.delegateInstance = codeGenerator.generate(allInstructions, allExceptionHandlers);
        }
开发者ID:n017,项目名称:ConfuserDeobfuscator,代码行数:28,代码来源:MethodsRewriter.cs

示例4: deobfuscate

        void deobfuscate(MethodDef method, string msg, Action<Blocks> handler)
        {
            if (savedMethodBodies != null)
                savedMethodBodies.save(method);

            Logger.v("{0}: {1} ({2:X8})", msg, Utils.removeNewlines(method), method.MDToken.ToUInt32());
            Logger.Instance.indent();

            if (hasNonEmptyBody(method)) {
                try {
                    var blocks = new Blocks(method);

                    handler(blocks);

                    IList<Instruction> allInstructions;
                    IList<ExceptionHandler> allExceptionHandlers;
                    blocks.getCode(out allInstructions, out allExceptionHandlers);
                    DotNetUtils.restoreBody(method, allInstructions, allExceptionHandlers);
                }
                catch {
                    Logger.v("Could not deobfuscate {0:X8}", method.MDToken.ToInt32());
                }
            }

            Logger.Instance.deIndent();
        }
开发者ID:n017,项目名称:ConfuserDeobfuscator,代码行数:26,代码来源:ObfuscatedFile.cs

示例5: deobfuscateMethods

        void deobfuscateMethods()
        {
            if (savedMethodBodies != null) {
                savedMethodBodies.restoreAll();
                savedMethodBodies = null;
            }
            deob.DeobfuscatedFile = null;

            Log.v("Deobfuscating methods");
            foreach (var method in allMethods) {
                Log.v("Deobfuscating {0} ({1:X8})", method, method.MetadataToken.ToUInt32());
                Log.indent();

                if (hasNonEmptyBody(method)) {
                    var blocks = new Blocks(method);

                    deob.deobfuscateMethodBegin(blocks);
                    if (options.ControlFlowDeobfuscation) {
                        int numDeadBlocks = blocks.deobfuscate();
                        if (numDeadBlocks > 0)
                            Log.v("Removed {0} dead block(s)", numDeadBlocks);
                    }
                    deobfuscateStrings(blocks);
                    deob.deobfuscateMethodEnd(blocks);
                    if (options.ControlFlowDeobfuscation)
                        blocks.deobfuscateLeaveObfuscation();

                    IList<Instruction> allInstructions;
                    IList<ExceptionHandler> allExceptionHandlers;
                    blocks.getCode(out allInstructions, out allExceptionHandlers);
                    DotNetUtils.restoreBody(method, allInstructions, allExceptionHandlers);
                }

                removeNoInliningAttribute(method);

                Log.deIndent();
            }
        }
开发者ID:ostuda,项目名称:de4dot,代码行数:38,代码来源:ObfuscatedFile.cs

示例6: stringDecrypterBugWorkaround

        void stringDecrypterBugWorkaround()
        {
            // There's a bug in Eazfuscator.NET when the VM and string encryption features are
            // enabled. The string decrypter's initialization code checks to make sure it's not
            // called by eg. a dynamic method. When it's called from the VM code, it is
            // called by MethodBase.Invoke() and the string decrypter antis set in causing it
            // to fail.
            // One way to work around this is to make sure the string decrypter has been called
            // once. That way, any VM code calling it won't trigger a failure.
            // We can put this code in <Module>::.cctor() since it gets executed before any
            // other code.
            // Note that we can't call the string decrypter from <Module>::.cctor() since
            // its DeclaringType property will return null (since it's the global type). We
            // must call another created class which calls the string decrypter.

            // You must use --dont-rename --keep-types --preserve-tokens and decrypt strings
            if (!Operations.KeepObfuscatorTypes || Operations.DecryptStrings == OpDecryptString.None ||
                (Operations.RenamerFlags & (RenamerFlags.RenameNamespaces | RenamerFlags.RenameTypes)) != 0)
                return;

            if (stringDecrypter.ValidStringDecrypterValue == null)
                return;

            var newType = module.UpdateRowId(new TypeDefUser(Guid.NewGuid().ToString("B"), module.CorLibTypes.Object.TypeDefOrRef));
            module.Types.Add(newType);
            var newMethod = module.UpdateRowId(new MethodDefUser("x", MethodSig.CreateStatic(module.CorLibTypes.Void), 0, MethodAttributes.Static | MethodAttributes.HideBySig));
            newType.Methods.Add(newMethod);
            newMethod.Body = new CilBody();
            newMethod.Body.MaxStack = 1;
            newMethod.Body.Instructions.Add(Instruction.CreateLdcI4(stringDecrypter.ValidStringDecrypterValue.Value));
            newMethod.Body.Instructions.Add(OpCodes.Call.ToInstruction(stringDecrypter.Method));
            newMethod.Body.Instructions.Add(OpCodes.Pop.ToInstruction());
            newMethod.Body.Instructions.Add(OpCodes.Ret.ToInstruction());

            var cctor = module.GlobalType.FindOrCreateStaticConstructor();
            var blocks = new Blocks(cctor);
            var block = blocks.MethodBlocks.getAllBlocks()[0];
            block.insert(0, OpCodes.Call.ToInstruction(newMethod));

            IList<Instruction> allInstructions;
            IList<ExceptionHandler> allExceptionHandlers;
            blocks.getCode(out allInstructions, out allExceptionHandlers);
            DotNetUtils.restoreBody(cctor, allInstructions, allExceptionHandlers);
        }
开发者ID:n017,项目名称:ConfuserDeobfuscator,代码行数:44,代码来源:Deobfuscator.cs

示例7: deobfuscateMethods

        void deobfuscateMethods()
        {
            if (savedMethodBodies != null) {
                savedMethodBodies.restoreAll();
                savedMethodBodies = null;
            }
            deob.DeobfuscatedFile = null;

            Log.v("Deobfuscating methods");
            var methodPrinter = new MethodPrinter();
            var cflowDeobfuscator = new BlocksCflowDeobfuscator { InlineMethods = deob.CanInlineMethods };
            foreach (var method in allMethods) {
                Log.v("Deobfuscating {0} ({1:X8})", method, method.MetadataToken.ToUInt32());
                Log.indent();

                if (hasNonEmptyBody(method)) {
                    var blocks = new Blocks(method);
                    int numRemovedLocals = 0;
                    int oldNumInstructions = method.Body.Instructions.Count;

                    deob.deobfuscateMethodBegin(blocks);
                    if (options.ControlFlowDeobfuscation) {
                        cflowDeobfuscator.init(blocks);
                        cflowDeobfuscator.deobfuscate();
                    }

                    if (deob.deobfuscateOther(blocks) && options.ControlFlowDeobfuscation)
                        cflowDeobfuscator.deobfuscate();

                    if (options.ControlFlowDeobfuscation) {
                        numRemovedLocals = blocks.optimizeLocals();
                        blocks.repartitionBlocks();
                    }

                    deobfuscateStrings(blocks);
                    deob.deobfuscateMethodEnd(blocks);

                    IList<Instruction> allInstructions;
                    IList<ExceptionHandler> allExceptionHandlers;
                    blocks.getCode(out allInstructions, out allExceptionHandlers);
                    DotNetUtils.restoreBody(method, allInstructions, allExceptionHandlers);

                    if (numRemovedLocals > 0)
                        Log.v("Removed {0} unused local(s)", numRemovedLocals);
                    int numRemovedInstructions = oldNumInstructions - method.Body.Instructions.Count;
                    if (numRemovedInstructions > 0)
                        Log.v("Removed {0} dead instruction(s)", numRemovedInstructions);

                    const Log.LogLevel dumpLogLevel = Log.LogLevel.veryverbose;
                    if (Log.isAtLeast(dumpLogLevel)) {
                        Log.log(dumpLogLevel, "Deobfuscated code:");
                        Log.indent();
                        methodPrinter.print(dumpLogLevel, method, allInstructions, allExceptionHandlers);
                        Log.deIndent();
                    }
                }

                removeNoInliningAttribute(method);

                Log.deIndent();
            }
        }
开发者ID:ldh0227,项目名称:de4dot,代码行数:62,代码来源:ObfuscatedFile.cs


注:本文中的de4dot.blocks.Blocks.getCode方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。