Пример #1
0
            public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt)
            {
                if (evt == ModuleWriterEvent.MDBeginCreateTables)
                {
                    // Add key signature
                    uint sigBlob = writer.MetaData.BlobHeap.Add(ctx.KeySig);
                    uint sigRid  = writer.MetaData.TablesHeap.StandAloneSigTable.Add(new RawStandAloneSigRow(sigBlob));
                    Debug.Assert(sigRid == 1);
                    uint sigToken = 0x11000000 | sigRid;
                    ctx.KeyToken = sigToken;
                    MutationHelper.InjectKey(writer.Module.EntryPoint, 2, (int)sigToken);
                }
                else if (evt == ModuleWriterEvent.MDBeginAddResources)
                {
                    // Compute hash
                    byte[] hash     = SHA1.Create().ComputeHash(ctx.OriginModule);
                    uint   hashBlob = writer.MetaData.BlobHeap.Add(hash);

                    MDTable <RawFileRow> fileTbl = writer.MetaData.TablesHeap.FileTable;
                    uint fileRid = fileTbl.Add(new RawFileRow(
                                                   (uint)FileAttributes.ContainsMetaData,
                                                   writer.MetaData.StringsHeap.Add("koi"),
                                                   hashBlob));
                    uint impl = CodedToken.Implementation.Encode(new MDToken(Table.File, fileRid));

                    // Add resources
                    MDTable <RawManifestResourceRow> resTbl = writer.MetaData.TablesHeap.ManifestResourceTable;
                    foreach (var resource in ctx.ManifestResources)
                    {
                        resTbl.Add(new RawManifestResourceRow(resource.Item1, resource.Item2, writer.MetaData.StringsHeap.Add(resource.Item3), impl));
                    }
                }
            }
Пример #2
0
        // Gets notified during module writing
        public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt)
        {
            switch (evt)
            {
            case ModuleWriterEvent.Begin:

                break;

            case ModuleWriterEvent.PESectionsCreated:
                Anti.Tamper.WriteSection(writer);
                break;

            case ModuleWriterEvent.EndCalculateRvasAndFileOffsets:
                var x = writer.Sections.Find(s => s.Name == ".dummy");
                sectionrva = (uint)x.RVA;
                //System.Windows.Forms.MessageBox.Show(x.RVA.ToString("X"));
                break;

            case ModuleWriterEvent.End:
                break;

            default:
                break;
            }
        }
 private static void OnWriterEvent(object sender, NETUtils.ModuleWriterListener.ModuleWriterListenerEventArgs e)
 {
     if (e.WriterEvent == ModuleWriterEvent.MDBeginCreateTables)
     {
         ModuleWriterBase writer   = (ModuleWriterBase)sender;
         uint             sigBlob  = writer.MetaData.BlobHeap.Add(encodingBytes);
         uint             sigRid   = writer.MetaData.TablesHeap.StandAloneSigTable.Add(new RawStandAloneSigRow(sigBlob));
         uint             sigToken = 0x11000000 | sigRid;
         Inject(sigToken);
     }
 }
Пример #4
0
        private void EncodeField(object sender, ModuleWriterListenerEventArgs e)
        {
            ModuleWriterBase base2 = (ModuleWriterBase)sender;

            if (e.WriterEvent == ModuleWriterEvent.MDMemberDefRidsAllocated)
            {
                Dictionary <TypeDef, Func <int, int> > dictionary = (from entry in this.keyAttrs
                                                                     where entry != null
                                                                     select entry).ToDictionary <Tuple <TypeDef, Func <int, int> >, TypeDef, Func <int, int> >(entry => entry.Item1, entry => entry.Item2);
                foreach (FieldDesc desc in this.fieldDescs)
                {
                    uint            raw       = base2.MetaData.GetToken(desc.Method).Raw;
                    uint            num       = this.encodeCtx.Random.NextUInt32() | 1;
                    CustomAttribute attribute = desc.Field.CustomAttributes[0];
                    int             num3      = dictionary[(TypeDef)attribute.AttributeType]((int)MathsUtils.modInv(num));
                    attribute.ConstructorArguments.Add(new CAArgument(this.encodeCtx.Module.CorLibTypes.Int32, num3));
                    raw *= num;
                    raw  = (uint)desc.InitDesc.Encoding.Encode(desc.InitDesc.Method, this.encodeCtx, (int)raw);
                    char[] chArray = new char[5];
                    chArray[desc.InitDesc.OpCodeIndex] = (char)(((byte)desc.OpCode) ^ desc.OpKey);
                    byte[] buffer = this.encodeCtx.Random.NextBytes(4);
                    uint   num4   = 0;
                    int    index  = 0;
                    goto Label_01E1;
Label_018D:
                    buffer[index] = this.encodeCtx.Random.NextByte();
Label_01A2:
                    if (buffer[index] == 0)
                    {
                        goto Label_018D;
                    }
                    chArray[desc.InitDesc.TokenNameOrder[index]] = (char)buffer[index];
                    num4 |= (uint)(buffer[index] << desc.InitDesc.TokenByteOrder[index]);
                    index++;
Label_01E1:
                    if (index < 4)
                    {
                        goto Label_01A2;
                    }
                    desc.Field.Name = new string(chArray);
                    FieldSig fieldSig = desc.Field.FieldSig;
                    uint     num6     = (raw - base2.MetaData.GetToken(((CModOptSig)fieldSig.Type).Modifier).Raw) ^ num4;
                    byte[]   buffer2  = new byte[8];
                    buffer2[0]         = 0xc0;
                    buffer2[3]         = (byte)(num6 >> desc.InitDesc.TokenByteOrder[3]);
                    buffer2[4]         = 0xc0;
                    buffer2[5]         = (byte)(num6 >> desc.InitDesc.TokenByteOrder[2]);
                    buffer2[6]         = (byte)(num6 >> desc.InitDesc.TokenByteOrder[1]);
                    buffer2[7]         = (byte)(num6 >> desc.InitDesc.TokenByteOrder[0]);
                    fieldSig.ExtraData = buffer2;
                }
            }
        }
Пример #5
0
            public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt)
            {
                if (evt == ModuleWriterEvent.MDBeginCreateTables)
                {
                    // Add key signature
                    var sigBlob = writer.MetaData.BlobHeap.Add(ctx.KeySig);
                    var sigRid  = writer.MetaData.TablesHeap.StandAloneSigTable.Add(new RawStandAloneSigRow(sigBlob));
                    Debug.Assert(sigRid == 1);
                    var sigToken = 0x11000000 | sigRid;
                    ctx.KeyToken = sigToken;
                    MutationHelper.InjectKey(writer.Module.EntryPoint, 2, (int)sigToken);
                }
                else if (evt == ModuleWriterEvent.MDBeginAddResources && !ctx.CompatMode)
                {
                    // Compute hash
                    var hash     = SHA1.Create().ComputeHash(ctx.OriginModule);
                    var hashBlob = writer.MetaData.BlobHeap.Add(hash);

                    var fileTbl = writer.MetaData.TablesHeap.FileTable;
                    var fileRid = fileTbl.Add(new RawFileRow(
                                                  (uint)FileAttributes.ContainsMetaData,
                                                  writer.MetaData.StringsHeap.Add("koi"),
                                                  hashBlob));
                    var impl = CodedToken.Implementation.Encode(new MDToken(Table.File, fileRid));

                    // Add resources
                    var resTbl = writer.MetaData.TablesHeap.ManifestResourceTable;
                    foreach (var resource in ctx.ManifestResources)
                    {
                        resTbl.Add(new RawManifestResourceRow(resource.Item1, resource.Item2, writer.MetaData.StringsHeap.Add(resource.Item3), impl));
                    }

                    // Add exported types
                    var exTbl = writer.MetaData.TablesHeap.ExportedTypeTable;
                    foreach (var type in ctx.OriginModuleDef.GetTypes())
                    {
                        if (!type.IsVisibleOutside())
                        {
                            continue;
                        }

                        exTbl.Add(new RawExportedTypeRow((uint)type.Attributes, 0,
                                                         writer.MetaData.StringsHeap.Add(type.Name),
                                                         writer.MetaData.StringsHeap.Add(type.Namespace), impl));
                    }
                }
            }
Пример #6
0
		/// <inheritdoc/>
		public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) {
		}
Пример #7
0
            private void OnWriterEvent(object sender, ModuleWriterListenerEventArgs e)
            {
                ModuleWriterBase moduleWriterBase = (ModuleWriterBase)sender;

                if (e.WriterEvent == ModuleWriterEvent.MDEndCreateTables)
                {
                    PESection pESection = new PESection("Rzy", 1073741888u);
                    moduleWriterBase.Sections.Add(pESection);
                    pESection.Add(new ByteArrayChunk(new byte[123]), 4u);
                    pESection.Add(new ByteArrayChunk(new byte[10]), 4u);
                    string text = ".Rzy";
                    string s    = null;
                    for (int i = 0; i < 80; i++)
                    {
                        text += FakeNative.FakeNativePhase.GetRandomString();
                    }
                    for (int j = 0; j < 80; j++)
                    {
                        byte[] bytes = Encoding.ASCII.GetBytes(text);
                        s = Utils.EncodeString(bytes, FakeNative.FakeNativePhase.asciiCharset);
                    }
                    byte[] bytes2 = Encoding.ASCII.GetBytes(s);
                    moduleWriterBase.TheOptions.MetaDataOptions.OtherHeapsEnd.Add(new FakeNative.RawHeap("#Rzy-Private-Protector", bytes2));
                    pESection.Add(new ByteArrayChunk(bytes2), 4u);

                    var writer = (ModuleWriterBase)sender;

                    uint        signature = (uint)(moduleWriterBase.MetaData.TablesHeap.TypeSpecTable.Rows + 1);
                    List <uint> list      = (from row in moduleWriterBase.MetaData.TablesHeap.TypeDefTable
                                             select row.Namespace).Distinct <uint>().ToList <uint>();
                    List <uint> list2 = (from row in moduleWriterBase.MetaData.TablesHeap.MethodTable
                                         select row.Name).Distinct <uint>().ToList <uint>();
                    uint num2 = Convert.ToUInt32(FakeNative.R.Next(15, 3546));
                    using (List <uint> .Enumerator enumerator = list.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            uint current = enumerator.Current;
                            if (current != 0u)
                            {
                                foreach (uint current2 in list2)
                                {
                                    if (current2 != 0u)
                                    {
                                        moduleWriterBase.MetaData.TablesHeap.TypeSpecTable.Add(new RawTypeSpecRow(signature));
                                        moduleWriterBase.MetaData.TablesHeap.ModuleTable.Add(new RawModuleRow(65535, 0u, 4294967295u, 4294967295u, 4294967295u));
                                        moduleWriterBase.MetaData.TablesHeap.ParamTable.Add(new RawParamRow(254, 254, moduleWriterBase.MetaData.TablesHeap.ENCMapTable.Add(new RawENCMapRow(this.random.NextUInt32()))));
                                        moduleWriterBase.MetaData.TablesHeap.FieldTable.Add(new RawFieldRow((ushort)(num2 * 4u + 77u), 31u + num2 / 2u * 3u, this.random.NextUInt32()));
                                        moduleWriterBase.MetaData.TablesHeap.MemberRefTable.Add(new RawMemberRefRow(num2 + 18u, num2 * 4u + 77u, 31u + num2 / 2u * 3u));
                                        moduleWriterBase.MetaData.TablesHeap.TypeSpecTable.Add(new RawTypeSpecRow(3391u + num2 / 2u * 3u));
                                        moduleWriterBase.MetaData.TablesHeap.PropertyTable.Add(new RawPropertyRow((ushort)(num2 + 44u - 1332u), num2 / 2u + 2u, this.random.NextUInt32()));
                                        moduleWriterBase.MetaData.TablesHeap.TypeSpecTable.Add(new RawTypeSpecRow(3391u + num2 / 2u * 3u));
                                        moduleWriterBase.MetaData.TablesHeap.PropertyPtrTable.Add(new RawPropertyPtrRow(this.random.NextUInt32()));
                                        moduleWriterBase.MetaData.TablesHeap.AssemblyRefTable.Add(new RawAssemblyRefRow(55, 44, 66, 500, this.random.NextUInt32(), this.random.NextUInt32(), moduleWriterBase.MetaData.TablesHeap.ENCMapTable.Add(new RawENCMapRow(this.random.NextUInt32())), this.random.NextUInt32(), this.random.NextUInt32()));
                                        moduleWriterBase.MetaData.TablesHeap.ENCLogTable.Add(new RawENCLogRow(this.random.NextUInt32(), moduleWriterBase.MetaData.TablesHeap.ENCMapTable.Add(new RawENCMapRow(this.random.NextUInt32()))));
                                        moduleWriterBase.MetaData.TablesHeap.ENCLogTable.Add(new RawENCLogRow(this.random.NextUInt32(), (uint)(moduleWriterBase.MetaData.TablesHeap.ENCMapTable.Rows - 1)));
                                        moduleWriterBase.MetaData.TablesHeap.ImplMapTable.Add(new RawImplMapRow(18, num2 * 4u + 77u, 31u + num2 / 2u * 3u, num2 * 4u + 77u));
                                    }
                                }
                            }
                        }
                    }
                }
                if (e.WriterEvent == ModuleWriterEvent.MDOnAllTablesSorted)
                {
                    moduleWriterBase.MetaData.TablesHeap.DeclSecurityTable.Add(new RawDeclSecurityRow(32767, 4294934527u, 4294934527u));
                }
            }