/// <inheritdoc /> void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (evt == ModuleWriterEvent.PESectionsCreated) NativeEraser.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); if (OnWriterEvent != null) { OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { ThrowIfCanceled(); ((ModuleFileProgress)fileProgress).CurrentEventIndex = evt - ModuleWriterEvent.Begin; Debug.Assert(((ModuleFileProgress)fileProgress).CurrentEventIndex >= 0); NotifyProgressUpdated(); }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (OnWriterEvent != null) { OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { ThrowIfCanceled(); currentEventIndex = evt - ModuleWriterEvent.Begin; Debug.Assert(currentEventIndex >= 0); if (OnProgressUpdated != null) { OnProgressUpdated(this, EventArgs.Empty); } }
/// <inheritdoc /> // Token: 0x060001A5 RID: 421 RVA: 0x0000D5F2 File Offset: 0x0000B7F2 void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (evt == ModuleWriterEvent.PESectionsCreated) { NativeEraser.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); } if (this.OnWriterEvent != null) { this.OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); } }
public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (otherListener != null) { otherListener.OnWriterEvent(writer, evt); } if (evt == ModuleWriterEvent.End) { PrintTokens(writer); } }
public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (evt == ModuleWriterEvent.MDEndWriteMethodBodies) { byte[] native_ = Encode_(); codeChunk = writer.MethodBodies.Add(new dnlib.DotNet.Writer.MethodBody(native_)); } else if (evt == ModuleWriterEvent.EndCalculateRvasAndFileOffsets) { uint rid = writer.MetaData.GetRid(Protections.Constants.ConstantsProtection.native_); writer.MetaData.TablesHeap.MethodTable[rid].RVA = (uint)codeChunk.RVA; } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { this.rtWriter = writer; this.rtMD = writer.MetaData; if (evt == ModuleWriterEvent.MDEndCreateTables) { this.MutateMetadata(); var request = new RequestKoiEventArgs(); RequestKoi(this, request); writer.TheOptions.MetaDataOptions.OtherHeaps.Add(request.Heap); this.rt.ResetData(); } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { //bool flag = evt == ModuleWriterEvent.PESectionsCreated; //if (flag) //{ // // NativeEraserNew.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); // Don't use // NativeEraser.Erase(writer as NativeModuleWriter, writer.Module as ModuleDefMD); //} bool flag2 = this.OnWriterEvent != null; if (flag2) { this.OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); } }
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)); } } }
void InjectNativeCode(object sender, ModuleWriterEvent e) { var writer = (ModuleWriterBase)sender; if (e == ModuleWriterEvent.MDBeginWriteMethodBodies) { for (var v = 0; v < code.Keys.Count; v++) { code[code.Keys.ElementAt(v)] = writer.MethodBodies.Add(code[code.Keys.ElementAt(v)]); } } else if (e == ModuleWriterEvent.EndCalculateRvasAndFileOffsets) { for (var v = 0; v < code.Keys.Count; v++) { uint rid = writer.MetaData.GetRid(code.Keys.ElementAt(v)); writer.MetaData.TablesHeap.MethodTable[rid].RVA = (uint)code[code.Keys.ElementAt(v)].RVA; } } }
public override void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (!options.DecryptMethods || !methodsDecrypter.HasNativeMethods) { return; } switch (evt) { case ModuleWriterEvent.Begin: // The decrypter assumes RVAs are unique so don't share any method bodies writer.TheOptions.ShareMethodBodies = false; break; case ModuleWriterEvent.MDBeginAddResources: methodsDecrypter.PrepareEncryptNativeMethods(writer); break; case ModuleWriterEvent.BeginWriteChunks: methodsDecrypter.EncryptNativeMethods(writer); break; } }
// Gets notified during module writing public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { switch (evt) { case ModuleWriterEvent.PESectionsCreated: // Add a PE section var sect1 = new PESection(".dummy", 0x40000040); writer.Sections.Add(sect1); // Let's add data sect1.Add(new ByteArrayChunk(new byte[123]), 4); sect1.Add(new ByteArrayChunk(new byte[10]), 4); break; case ModuleWriterEvent.MDEndCreateTables: // All types, methods etc have gotten their new RIDs. Let's print the new values Console.WriteLine("Old -> new type and method tokens"); foreach (var type in writer.Module.GetTypes()) { Console.WriteLine("TYPE: {0:X8} -> {1:X8} {2}", type.MDToken.Raw, new MDToken(Table.TypeDef, writer.MetaData.GetRid(type)).Raw, type.FullName); foreach (var method in type.Methods) { Console.WriteLine(" METH: {0:X8} -> {1:X8} {2}", method.MDToken.Raw, new MDToken(Table.Method, writer.MetaData.GetRid(method)).Raw, method.FullName); } } break; default: break; } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { OnWriterEvent?.Invoke(writer, new ModuleWriterListenerEventArgs(evt)); }
/// <inheritdoc/> public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { }
public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (otherListener != null) otherListener.OnWriterEvent(writer, evt); if (evt == ModuleWriterEvent.End) PrintTokens(writer); }
// Gets notified during module writing public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { switch (evt) { case ModuleWriterEvent.PESectionsCreated: // Add a PE section var sect1 = new PESection(".dummy", 0x40000040); writer.Sections.Add(sect1); // Let's add data sect1.Add(new ByteArrayChunk(new byte[123]), 4); sect1.Add(new ByteArrayChunk(new byte[10]), 4); break; case ModuleWriterEvent.MDEndCreateTables: // All types, methods etc have gotten their new RIDs. Let's print the new values Console.WriteLine("Old -> new type and method tokens"); foreach (var type in writer.Module.GetTypes()) { Console.WriteLine("TYPE: {0:X8} -> {1:X8} {2}", type.MDToken.Raw, new MDToken(Table.TypeDef, writer.MetaData.GetRid(type)).Raw, type.FullName); foreach (var method in type.Methods) Console.WriteLine(" METH: {0:X8} -> {1:X8} {2}", method.MDToken.Raw, new MDToken(Table.Method, writer.MetaData.GetRid(method)).Raw, method.FullName); } break; default: break; } }
public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { OnWriter?.Invoke(writer, evt); }
/// <inheritdoc /> void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (OnWriterEvent != null) { OnWriterEvent(writer, new ModuleWriterListenerEventArgs(evt)); } }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { ThrowIfCanceled(); ((ModuleFileProgress)fileProgress).CurrentEventIndex = evt - ModuleWriterEvent.Begin; Debug.Assert(((ModuleFileProgress)fileProgress).CurrentEventIndex >= 0); NotifyProgressUpdated(); }
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)); // 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)); } } }
/// <summary> /// Initializes a new instance of the <see cref="ModuleWriterListenerEventArgs" /> class. /// </summary> /// <param name="evt">The triggered writer event.</param> public ModuleWriterListenerEventArgs(ModuleWriterEvent evt) { WriterEvent = evt; }
/// <summary> /// Initializes a new instance of the <see cref="ModuleWriterListenerEventArgs" /> class. /// </summary> /// <param name="evt">The triggered writer event.</param> public ModuleWriterListenerEventArgs(ModuleWriterEvent evt) { WriterEvent = evt; }
void IModuleWriterListener.OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { ThrowIfCanceled(); currentEventIndex = evt - ModuleWriterEvent.Begin; Debug.Assert(currentEventIndex >= 0); if (OnProgressUpdated != null) OnProgressUpdated(this, EventArgs.Empty); }
/// <inheritdoc/> public void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { }
public override void OnWriterEvent(ModuleWriterBase writer, ModuleWriterEvent evt) { if (!options.DecryptMethods || !methodsDecrypter.HasNativeMethods) return; switch (evt) { case ModuleWriterEvent.Begin: // The decrypter assumes RVAs are unique so don't share any method bodies writer.TheOptions.ShareMethodBodies = false; break; case ModuleWriterEvent.MDBeginAddResources: methodsDecrypter.PrepareEncryptNativeMethods(writer); break; case ModuleWriterEvent.BeginWriteChunks: methodsDecrypter.EncryptNativeMethods(writer); break; } }