Skip to content

Commit b1fe02c

Browse files
authored
Merge a2998ee into cfccc32
2 parents cfccc32 + a2998ee commit b1fe02c

File tree

13 files changed

+675
-13
lines changed

13 files changed

+675
-13
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<!--
2+
This file as to be present, otherwise the Microsoft.DiaSymReader.Native package does not copy it's files to the output.
3+
The content of this file does not matter.
4+
-->
5+
<appSettings />

Confuser.Protections/AntiTamper/NormalMode.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,18 @@ public void HandleMD(AntiTamperProtection parent, ConfuserContext context, Prote
100100
}
101101

102102
void WriterEvent(object sender, ModuleWriterEventArgs e) {
103-
var writer = (ModuleWriterBase)sender;
104-
if (e.Event == ModuleWriterEvent.MDEndCreateTables) {
105-
CreateSections(writer);
106-
}
107-
else if (e.Event == ModuleWriterEvent.BeginStrongNameSign) {
108-
EncryptSection(writer);
103+
switch (e.Event)
104+
{
105+
case ModuleWriterEvent.Begin when e.Writer is NativeModuleWriter nativeWriter:
106+
// disable the optimization of the image size for the native writer, so the method bodies can be protected.
107+
nativeWriter.Options = new NativeModuleWriterOptions(nativeWriter.ModuleDefMD, false);
108+
break;
109+
case ModuleWriterEvent.MDEndCreateTables:
110+
CreateSections(e.Writer);
111+
break;
112+
case ModuleWriterEvent.BeginStrongNameSign:
113+
EncryptSection(e.Writer);
114+
break;
109115
}
110116
}
111117

Confuser.Protections/Resources/MDPhase.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,12 @@ void OnWriterEvent(object sender, ModuleWriterEventArgs e) {
5656
}
5757
byte[] moduleBuff;
5858
using (var ms = new MemoryStream()) {
59-
module.Write(ms, new ModuleWriterOptions(e.Writer.Module) { StrongNameKey = writer.TheOptions.StrongNameKey, StrongNamePublicKey = writer.TheOptions.StrongNamePublicKey, DelaySign = writer.TheOptions.DelaySign });
59+
var options = new ModuleWriterOptions(module) {
60+
StrongNameKey = writer.TheOptions.StrongNameKey,
61+
StrongNamePublicKey = writer.TheOptions.StrongNamePublicKey,
62+
DelaySign = writer.TheOptions.DelaySign
63+
};
64+
module.Write(ms, options);
6065
moduleBuff = ms.ToArray();
6166
}
6267

Confuser.Protections/TypeScrambler/ScramblePhase.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
using dnlib.DotNet;
66

77
namespace Confuser.Protections.TypeScrambler {
8-
internal sealed class ScramblePhase : ProtectionPhase {
8+
sealed class ScramblePhase : ProtectionPhase {
99
public ScramblePhase(TypeScrambleProtection parent) : base(parent) { }
1010

1111
public override ProtectionTargets Targets => ProtectionTargets.Types | ProtectionTargets.Methods;
@@ -30,7 +30,8 @@ protected override void Execute(ConfuserContext context, ProtectionParameters pa
3030
foreach (var def in context.CurrentModule.FindDefinitions().WithProgress(context.Logger)) {
3131
switch (def) {
3232
case MethodDef md:
33-
md.ReturnType = rewriter.UpdateSignature(md.ReturnType);
33+
if (md.HasReturnType)
34+
md.ReturnType = rewriter.UpdateSignature(md.ReturnType);
3435
if (md.HasBody) {
3536
rewriter.ProcessBody(md);
3637
}

Confuser.Protections/TypeScrambler/Scrambler/ScannedItem.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ internal bool RegisterGeneric(TypeSig t) {
3535
// Get proper type.
3636
t = SignatureUtils.GetLeaf(t);
3737

38+
// scrambling voids leads to peverify errors, better leave them out.
39+
if (t.ElementType == ElementType.Void)
40+
return false;
41+
3842
if (!Generics.ContainsKey(t)) {
3943
GenericParam newGenericParam;
4044
if (t.IsGenericMethodParameter) {

Confuser.Protections/TypeScrambler/Scrambler/ScannedMethod.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@ internal override void Scan() {
3939
}
4040
}
4141

42-
if (TargetMethod.ReturnType != TargetMethod.Module.CorLibTypes.Void) {
42+
if (TargetMethod.HasReturnType) {
4343
RegisterGeneric(TargetMethod.ReturnType);
4444
}
45+
4546
foreach (var param in TargetMethod.Parameters.Where(ProcessParameter))
4647
RegisterGeneric(param.Type);
4748

@@ -89,6 +90,8 @@ private static bool CanScrambleMethod(MethodDef method, bool scramblePublic) {
8990
// PInvoke implementations won't work with this.
9091
if (method.IsPinvokeImpl) return false;
9192

93+
if (method.DeclaringType.IsGlobalModuleType) return false;
94+
9295
return true;
9396
}
9497

@@ -129,7 +132,7 @@ protected override void PrepareGenerics(IEnumerable<GenericParam> scrambleParams
129132
$"{nameof(parameter)}.Type == {nameof(TargetMethod)}.MethodSig.Params[{nameof(parameter)}.MethodSigIndex]");
130133
}
131134

132-
if (TargetMethod.ReturnType != TargetMethod.Module.CorLibTypes.Void)
135+
if (TargetMethod.HasReturnType)
133136
TargetMethod.ReturnType = ConvertToGenericIfAvalible(TargetMethod.ReturnType);
134137

135138
Debug.Assert(TargetMethod.ReturnType == TargetMethod.MethodSig.RetType,

Confuser.Protections/TypeScrambler/Scrambler/ScannedType.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ private static bool CanScrambleType(TypeDef type) {
3232
// Delegates are something that shouldn't be touched.
3333
if (type.IsDelegate) return false;
3434

35-
// No entrypoints
36-
if (type.Methods.Any(x => x.Module.EntryPoint == x)) return false;
35+
// No entrypoints or global types
36+
if (type.Methods.Any(x => x.Module.EntryPoint == x) || type.IsGlobalModuleType) return false;
3737

3838
if (type.IsValueType) return false;
3939

0 commit comments

Comments
 (0)