コード例 #1
0
        public static void Execute(ModuleDefMD loadedMod)
        {
            obfMethods = CreateMethods(loadedMod);
            foreach (TypeDef type in loadedMod.Types)
            {
                foreach (MethodDef method in type.Methods)
                {
                    if (!method.HasBody || !method.Body.HasInstructions || method.IsNative)
                    {
                        continue;
                    }
                    MethodDefMD methodd = method as MethodDefMD;
                    var         body    = method.Body;
                    body.SimplifyBranches();
                    body.MaxStack++;
                    List <Instruction> instructions = body.Instructions.ToList();
                    List <HBlock>      Hblocks      = new List <HBlock>();
                    List <HBlock>      obfHBlocks   = new List <HBlock>();

                    /*if (body.HasExceptionHandlers)
                     * {
                     *  foreach (ExceptionHandler eh in body.ExceptionHandlers)
                     *  {
                     *      ExceptionHandlerType HType = eh.HandlerType;
                     *      List<Instruction> HInstr = new List<Instruction>();
                     *      int HTStart = Array.IndexOf(instructions.ToArray(), eh.TryStart);
                     *      int HTEnd = Array.IndexOf(instructions.ToArray(), eh.TryEnd);
                     *      if (eh.TryEnd == null) HTEnd = instructions.Count - 1;
                     *      for (int i = HTStart; i < HTEnd; i++)
                     *          HInstr.Add(instructions[i]);
                     *      Hblocks.Add(new HBlock() { instructions = HInstr });
                     *      HInstr.Clear();
                     *      int HCStart = Array.IndexOf(instructions.ToArray(), eh.HandlerStart);
                     *      int HCEnd = Array.IndexOf(instructions.ToArray(), eh.HandlerEnd);
                     *      if (eh.HandlerEnd == null) HCEnd = instructions.Count - 1;
                     *      for (int i = HCStart; i < HCEnd; i++)
                     *          HInstr.Add(instructions[i]);
                     *      Hblocks.Add(new HBlock() { instructions = HInstr });
                     *  }
                     *  foreach (HBlock Hblock in Hblocks)
                     *      obfHBlocks.Add(ObfuscateHBlock(Hblock, true));
                     * }
                     * else*/
                    obfHBlocks.Add(ObfuscateHBlock(new HBlock()
                    {
                        instructions = instructions
                    }, false));
                    body.Instructions.Clear();
                    foreach (HBlock hBlock in obfHBlocks)
                    {
                        foreach (Instruction instr in hBlock.instructions)
                        {
                            body.Instructions.Add(instr);
                        }
                    }
                    body.UpdateInstructionOffsets();
                    body.SimplifyBranches();
                }
            }
        }
コード例 #2
0
ファイル: ModuleDefMD.cs プロジェクト: dmirmilshteyn/dnlib
        /// <summary>
        /// Reads a method body
        /// </summary>
        /// <param name="method">Method</param>
        /// <param name="rva">Method RVA</param>
        /// <param name="implAttrs">Method impl attrs</param>
        /// <param name="gpContext">Generic parameter context</param>
        /// <returns>A <see cref="MethodBody"/> or <c>null</c> if none</returns>
        internal MethodBody ReadMethodBody(MethodDefMD method, RVA rva, MethodImplAttributes implAttrs, GenericParamContext gpContext)
        {
            MethodBody mb;
            var mDec = methodDecrypter;
            if (mDec != null && mDec.GetMethodBody(method.OrigRid, rva, method.Parameters, gpContext, out mb)) {
                var cilBody = mb as CilBody;
                if (cilBody != null)
                    return InitializeBodyFromPdb(cilBody, method.OrigRid);
                return mb;
            }

            if (rva == 0)
                return null;
            var codeType = implAttrs & MethodImplAttributes.CodeTypeMask;
            if (codeType == MethodImplAttributes.IL)
                return InitializeBodyFromPdb(ReadCilBody(method.Parameters, rva, gpContext), method.OrigRid);
            if (codeType == MethodImplAttributes.Native)
                return new NativeMethodBody(rva);
            return null;
        }
コード例 #3
0
ファイル: ModuleDefMD.cs プロジェクト: dmirmilshteyn/dnlib
 /// <summary>
 /// Returns the owner type of a method
 /// </summary>
 /// <param name="method">The method</param>
 /// <returns>The owner type or <c>null</c> if none</returns>
 internal TypeDef GetOwnerType(MethodDefMD method)
 {
     return ResolveTypeDef(MetaData.GetOwnerTypeOfMethod(method.OrigRid));
 }
コード例 #4
0
		/// <summary>
		/// Reads a method body
		/// </summary>
		/// <param name="method">Method</param>
		/// <param name="row">Method's row</param>
		/// <returns>A <see cref="MethodBody"/> or <c>null</c> if none</returns>
		internal MethodBody ReadMethodBody(MethodDefMD method, RawMethodRow row) {
			MethodBody mb;
			var mDec = methodDecrypter;
			if (mDec != null && mDec.GetMethodBody(method.Rid, (RVA)row.RVA, method.Parameters, out mb))
				return mb;

			if (row.RVA == 0)
				return null;
			var codeType = (MethodImplAttributes)row.ImplFlags & MethodImplAttributes.CodeTypeMask;
			if (codeType == MethodImplAttributes.IL)
				return ReadCilBody(method.Parameters, (RVA)row.RVA);
			if (codeType == MethodImplAttributes.Native)
				return new NativeMethodBody((RVA)row.RVA);
			return null;
		}
コード例 #5
0
		/// <summary>
		/// Reads a method body
		/// </summary>
		/// <param name="method">Method</param>
		/// <param name="row">Method's row</param>
		/// <returns>A <see cref="MethodBody"/> or <c>null</c> if none</returns>
		internal MethodBody ReadMethodBody(MethodDefMD method, RawMethodRow row) {
			if (methodDecrypter != null && methodDecrypter.HasMethodBody(method.Rid))
				return methodDecrypter.GetMethodBody(method.Rid, (RVA)row.RVA, method.Parameters);

			if (row.RVA == 0)
				return null;
			var codeType = ((MethodImplAttributes)row.ImplFlags & MethodImplAttributes.CodeTypeMask);
			if (codeType == MethodImplAttributes.IL)
				return ReadCilBody(method.Parameters, (RVA)row.RVA);
			if (codeType == MethodImplAttributes.Native)
				return new NativeMethodBody((RVA)row.RVA);
			return null;
		}