Update code; submodule was updated

This commit is contained in:
de4dot 2012-11-16 23:50:52 +01:00
parent 4be5776da7
commit 6a7ddbaa56
44 changed files with 122 additions and 122 deletions

View File

@ -281,7 +281,7 @@ namespace AssemblyData.methodsrewriter {
var mparams = getParameters(method.methodDef);
if (mparams.Count > 0) {
block.insert(n++, Instruction.Create(OpCodes.Ldc_I4, mparams.Count));
var objectType = method.methodDef.DeclaringType.OwnerModule.CorLibTypes.Object;
var objectType = method.methodDef.DeclaringType.Module.CorLibTypes.Object;
block.insert(n++, Instruction.Create(OpCodes.Newarr, objectType));
block.insert(n++, create(OpCodes.Stloc, new Operand(Operand.Type.TempObjArray)));

View File

@ -144,7 +144,7 @@ namespace de4dot.blocks {
var defAsm = local.Type.DefinitionAssembly;
if (defAsm == null)
continue; // eg. fnptr
if (defAsm == method.DeclaringType.OwnerModule.Assembly)
if (defAsm == method.DeclaringType.Module.Assembly)
continue; // this assembly is always loaded
if (defAsm.IsCorLib())
continue; // mscorlib is always loaded

View File

@ -155,7 +155,7 @@ namespace de4dot.blocks {
}
public static MethodDef getModuleTypeCctor(ModuleDef module) {
return module.GlobalType.FindClassConstructor();
return module.GlobalType.FindStaticConstructor();
}
public static bool isEmpty(MethodDef method) {
@ -275,7 +275,7 @@ namespace de4dot.blocks {
return false;
if (method.ImplMap == null || method.ImplMap.Name.String != funcName)
return false;
return getDllName(dll).Equals(getDllName(method.ImplMap.Scope.Name.String), StringComparison.OrdinalIgnoreCase);
return getDllName(dll).Equals(getDllName(method.ImplMap.Module.Name.String), StringComparison.OrdinalIgnoreCase);
}
#if PORT
@ -359,7 +359,7 @@ namespace de4dot.blocks {
td = tr.Resolve();
}
}
return td != null && td.OwnerModule == module ? td : null;
return td != null && td.Module == module ? td : null;
}
static MethodDef getMethod(ModuleDef module, IMethod method, ITypeDefOrRef declaringType) {
@ -540,16 +540,16 @@ namespace de4dot.blocks {
// Copies most things but not everything
public static MethodDef clone(MethodDef method) {
var newMethod = new MethodDefUser(method.Name, method.MethodSig, method.ImplFlags, method.Flags);
var newMethod = new MethodDefUser(method.Name, method.MethodSig, method.ImplAttributes, method.Attributes);
newMethod.Rid = method.Rid;
newMethod.DeclaringType2 = method.DeclaringType;
foreach (var pd in method.ParamList)
newMethod.ParamList.Add(new ParamDefUser(pd.Name, pd.Sequence, pd.Flags));
foreach (var gp in method.GenericParams) {
newMethod.ParamList.Add(new ParamDefUser(pd.Name, pd.Sequence, pd.Attributes));
foreach (var gp in method.GenericParameters) {
var newGp = new GenericParamUser(gp.Number, gp.Flags, gp.Name);
foreach (var gpc in newGp.GenericParamConstraints)
newGp.GenericParamConstraints.Add(new GenericParamConstraintUser(gpc.Constraint));
newMethod.GenericParams.Add(newGp);
newMethod.GenericParameters.Add(newGp);
}
newMethod.Body = new CilBody();
copyBodyFromTo(method, newMethod);
@ -754,9 +754,9 @@ namespace de4dot.blocks {
#endif
public static string getCustomArgAsString(CustomAttribute cattr, int arg) {
if (cattr == null || arg >= cattr.Arguments.Count)
if (cattr == null || arg >= cattr.ConstructorArguments.Count)
return null;
var carg = cattr.Arguments[arg];
var carg = cattr.ConstructorArguments[arg];
if (carg.Type.GetElementType() != ElementType.String)
return null;
return UTF8String.ToSystemStringOrEmpty((UTF8String)carg.Value);

View File

@ -60,8 +60,8 @@ namespace de4dot.blocks {
var newSig = create(field.FieldSig, genericArgs);
if (newSig == field.FieldSig)
return field;
var ownerModule = field.DeclaringType != null ? field.DeclaringType.OwnerModule : null;
return new MemberRefUser(ownerModule, field.Name, newSig, field.DeclaringType);
var module = field.DeclaringType != null ? field.DeclaringType.Module : null;
return new MemberRefUser(module, field.Name, newSig, field.DeclaringType);
}
public static FieldSig create(FieldSig sig, GenericInstSig git) {
@ -141,7 +141,7 @@ namespace de4dot.blocks {
if (newSig == sig)
return method;
return new MemberRefUser(method.DeclaringType.OwnerModule, method.Name, newSig, method.DeclaringType);
return new MemberRefUser(method.DeclaringType.Module, method.Name, newSig, method.DeclaringType);
}
GenericArgsSubstitutor(IList<TypeSig> genericArgs) {

View File

@ -90,7 +90,7 @@ namespace de4dot.blocks {
30, // NestedFamORAssem
};
static int getAccessibilityOrder(TypeDef typeDef) {
return accessibilityOrder[(int)typeDef.Flags & 7];
return accessibilityOrder[(int)typeDef.Attributes & 7];
}
public void onTypesRenamed() {
@ -170,7 +170,7 @@ namespace de4dot.blocks {
70, // <reserved>
};
static int getAccessibilityOrder(FieldDef fieldDefinition) {
return accessibilityOrder[(int)fieldDefinition.Flags & 7];
return accessibilityOrder[(int)fieldDefinition.Attributes & 7];
}
public void onTypesRenamed() {
@ -262,7 +262,7 @@ namespace de4dot.blocks {
70, // <reserved>
};
static int getAccessibilityOrder(MethodDef methodDefinition) {
return accessibilityOrder[(int)methodDefinition.Flags & 7];
return accessibilityOrder[(int)methodDefinition.Attributes & 7];
}
public void onTypesRenamed() {
@ -422,23 +422,23 @@ namespace de4dot.blocks {
readonly uint token;
public ScopeAndTokenKey(TypeDef type)
: this(type.OwnerModule, type.MDToken.Raw) {
: this(type.Module, type.MDToken.Raw) {
}
public ScopeAndTokenKey(FieldDef field)
: this(field.DeclaringType == null ? null : field.DeclaringType.OwnerModule, field.MDToken.Raw) {
: this(field.DeclaringType == null ? null : field.DeclaringType.Module, field.MDToken.Raw) {
}
public ScopeAndTokenKey(MethodDef method)
: this(method.DeclaringType == null ? null : method.DeclaringType.OwnerModule, method.MDToken.Raw) {
: this(method.DeclaringType == null ? null : method.DeclaringType.Module, method.MDToken.Raw) {
}
public ScopeAndTokenKey(PropertyDef prop)
: this(prop.DeclaringType == null ? null : prop.DeclaringType.OwnerModule, prop.MDToken.Raw) {
: this(prop.DeclaringType == null ? null : prop.DeclaringType.Module, prop.MDToken.Raw) {
}
public ScopeAndTokenKey(EventDef evt)
: this(evt.DeclaringType == null ? null : evt.DeclaringType.OwnerModule, evt.MDToken.Raw) {
: this(evt.DeclaringType == null ? null : evt.DeclaringType.Module, evt.MDToken.Raw) {
}
public ScopeAndTokenKey(IScope scope, uint token) {

View File

@ -41,7 +41,7 @@ namespace de4dot.blocks.cflow {
}
protected virtual bool canInline(MethodDef method) {
if (method.GenericParams.Count > 0)
if (method.GenericParameters.Count > 0)
return false;
if (method == blocks.Method)
return false;

View File

@ -678,13 +678,13 @@ namespace de4dot.code {
static bool getMethodImplOptions(CustomAttribute cattr, ref int value) {
if (cattr.IsRawBlob)
return false;
if (cattr.Arguments.Count != 1)
if (cattr.ConstructorArguments.Count != 1)
return false;
if (cattr.Arguments[0].Type.ElementType != ElementType.I2 &&
cattr.Arguments[0].Type.FullName != "System.Runtime.CompilerServices.MethodImplOptions")
if (cattr.ConstructorArguments[0].Type.ElementType != ElementType.I2 &&
cattr.ConstructorArguments[0].Type.FullName != "System.Runtime.CompilerServices.MethodImplOptions")
return false;
var arg = cattr.Arguments[0].Value;
var arg = cattr.ConstructorArguments[0].Value;
if (arg is short) {
value = (short)arg;
return true;

View File

@ -135,7 +135,7 @@ namespace de4dot.code.deobfuscators.Agile_NET {
continue;
if (type.Methods.Count != 2)
continue;
if (type.FindClassConstructor() == null)
if (type.FindStaticConstructor() == null)
continue;
var cs = type.FindMethod("cs");
if (cs == null)

View File

@ -110,7 +110,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm {
case ElementType.Var:
var gvar = (GenericVar)type;
var dt = method.DeclaringType;
if (dt == null || gvar.Number >= dt.GenericParams.Count)
if (dt == null || gvar.Number >= dt.GenericParameters.Count)
return false;
break;

View File

@ -109,7 +109,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm {
}
bool isStackType(TypeDef type, TypeDef stackValueType) {
if (type.InterfaceImpls.Count != 2)
if (type.Interfaces.Count != 2)
return false;
if (!implementsInterface(type, "System.Collections.ICollection"))
return false;
@ -141,7 +141,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm {
}
static bool implementsInterface(TypeDef type, string ifaceName) {
foreach (var iface in type.InterfaceImpls) {
foreach (var iface in type.Interfaces) {
if (iface.Interface.FullName == ifaceName)
return true;
}
@ -176,7 +176,7 @@ namespace de4dot.code.deobfuscators.Agile_NET.vm {
};
var cflowDeobfuscator = new CflowDeobfuscator();
foreach (var type in module.Types) {
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
continue;
requiredFields[0] = type.FullName;

View File

@ -35,7 +35,7 @@ namespace de4dot.code.deobfuscators.Babel_NET {
}
bool isInOurModule(IMemberRef memberRef) {
return memberRef.OwnerModule == module;
return memberRef.Module == module;
}
Importer createImporter() {

View File

@ -305,9 +305,9 @@ namespace de4dot.code.deobfuscators.CodeVeil {
if (!DotNetUtils.isMethod(newobjCtor, "System.Void", "(System.Reflection.Assembly,System.String)"))
continue;
var type = newobjCtor.DeclaringType;
if (type.InterfaceImpls.Count != 1)
if (type.Interfaces.Count != 1)
continue;
if (type.InterfaceImpls[0].Interface != bundleStreamProviderIFace)
if (type.Interfaces[0].Interface != bundleStreamProviderIFace)
continue;
streamProviderType = type;

View File

@ -46,7 +46,7 @@ namespace de4dot.code.deobfuscators.CodeVeil {
if (retType.IsMethodVar)
return retType.Number >= sig.GenParamCount;
var dt = method.DeclaringType;
return dt == null || retType.Number >= dt.GenericParams.Count;
return dt == null || retType.Number >= dt.GenericParameters.Count;
}
}
}

View File

@ -183,7 +183,7 @@ namespace de4dot.code.deobfuscators.CodeVeil {
}
static bool hasInterface(TypeDef type, string interfaceFullName) {
foreach (var iface in type.InterfaceImpls) {
foreach (var iface in type.Interfaces) {
if (iface.Interface.FullName == interfaceFullName)
return true;
}
@ -324,7 +324,7 @@ namespace de4dot.code.deobfuscators.CodeVeil {
continue;
Logger.v("Decrypted resource {0}", Utils.toCsharpString(resource.Name));
module.Resources[i] = new EmbeddedResource(resource.Name, decrypted, resource.Flags);
module.Resources[i] = new EmbeddedResource(resource.Name, decrypted, resource.Attributes);
}
}

View File

@ -56,7 +56,7 @@ namespace de4dot.code.deobfuscators.CodeVeil {
foreach (var type in module.Types) {
if (!type.HasNestedTypes)
continue;
if ((type.Flags & ~TypeAttributes.Sealed) != 0)
if ((type.Attributes & ~TypeAttributes.Sealed) != 0)
continue;
if (!checkTamperDetectionClasses(type.NestedTypes))
@ -92,7 +92,7 @@ namespace de4dot.code.deobfuscators.CodeVeil {
bool isTamperDetectionClass(TypeDef type) {
if (type.BaseType == null || type.BaseType.FullName != "System.Object")
return false;
if ((type.Flags & ~TypeAttributes.Sealed) != TypeAttributes.NestedAssembly)
if ((type.Attributes & ~TypeAttributes.Sealed) != TypeAttributes.NestedAssembly)
return false;
MethodDef cctor = null, initMethod = null;

View File

@ -85,7 +85,7 @@ namespace de4dot.code.deobfuscators.CodeWall {
}
byte[] getPublicKeyToken() {
var module = method.OwnerModule;
var module = method.Module;
if (module.Assembly == null || PublicKeyBase.IsNullOrEmpty2(module.Assembly.PublicKey))
return null;
return module.Assembly.PublicKeyToken.Data;

View File

@ -107,7 +107,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
if (decrypterType == null)
return;
encryptedResource = CoUtils.getResource(module, DotNetUtils.getCodeStrings(decrypterType.FindClassConstructor()));
encryptedResource = CoUtils.getResource(module, DotNetUtils.getCodeStrings(decrypterType.FindStaticConstructor()));
constantsData = resourceDecrypter.decrypt(encryptedResource.Data.CreateStream());
}

View File

@ -73,7 +73,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
if (!new FieldTypes(type).all(requiredFields))
return false;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
return false;
var decryptMethodTmp = findDecryptMethod(type);
@ -169,7 +169,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
encMethodToken = 0;
encDeclaringTypeToken = 0;
var cctor = delegateType.FindClassConstructor();
var cctor = delegateType.FindStaticConstructor();
if (cctor == null)
return false;

View File

@ -78,7 +78,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
switch (ctx.proxyCreatorType) {
case ProxyCreatorType.CallOrCallvirt:
callOpcode = field.IsFamORAssem ? OpCodes.Callvirt : OpCodes.Call;
callOpcode = field.IsFamilyOrAssembly ? OpCodes.Callvirt : OpCodes.Call;
break;
case ProxyCreatorType.CallCtor:
callOpcode = OpCodes.Call;

View File

@ -84,7 +84,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
if (!new FieldTypes(type).exactly(requiredTypes))
continue;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
continue;

View File

@ -108,7 +108,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
resolverVersion = checkSetupMethod(initMethod);
if (resolverVersion == ResolverVersion.None)
resolverVersion = checkSetupMethod(initMethod.DeclaringType.FindClassConstructor());
resolverVersion = checkSetupMethod(initMethod.DeclaringType.FindStaticConstructor());
if (resolverVersion == ResolverVersion.None)
return false;

View File

@ -76,7 +76,7 @@ namespace de4dot.code.deobfuscators.CryptoObfuscator {
string getResourceName() {
var defaultName = module.Assembly.Name.String + module.Assembly.Name.String;
var cctor = stringDecrypterType.FindClassConstructor();
var cctor = stringDecrypterType.FindStaticConstructor();
if (cctor == null)
return defaultName;

View File

@ -298,9 +298,9 @@ done:
public static bool canInline(MethodDef method) {
if (method == null || method.Body == null)
return false;
if (method.Flags != (MethodAttributes.Assembly | MethodAttributes.Static))
if (method.Attributes != (MethodAttributes.Assembly | MethodAttributes.Static))
return false;
if (method.GenericParams.Count > 0)
if (method.GenericParameters.Count > 0)
return false;
if (method.Body.ExceptionHandlers.Count > 0)
return false;

View File

@ -79,7 +79,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
var fieldsDict = new FieldDefinitionAndDeclaringTypeDict<FieldDef>();
typeToFieldsDict.add(ownerType, fieldsDict);
foreach (var structField in structType.Fields) {
var newField = module.UpdateRowId(new FieldDefUser(structField.Name, structField.FieldSig.Clone(), structField.Flags));
var newField = module.UpdateRowId(new FieldDefUser(structField.Name, structField.FieldSig.Clone(), structField.Attributes));
ownerType.Fields.Add(newField);
fieldsDict.add(structField, newField);
}
@ -97,11 +97,11 @@ namespace de4dot.code.deobfuscators.DeepSea {
continue;
if (!checkBaseType(fieldType))
continue;
if ((fieldType.Flags & ~TypeAttributes.Sealed) != TypeAttributes.NestedAssembly)
if ((fieldType.Attributes & ~TypeAttributes.Sealed) != TypeAttributes.NestedAssembly)
continue;
if (fieldType.NestedTypes.Count > 0)
continue;
if (fieldType.GenericParams.Count > 0)
if (fieldType.GenericParameters.Count > 0)
continue;
if (fieldType.Fields.Count == 0)
continue;
@ -146,7 +146,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
IEnumerable<FieldDef> getPossibleFields(TypeDef type) {
var typeToFields = new TypeDefinitionDict<List<FieldDef>>();
foreach (var field in type.Fields) {
if (field.Flags != FieldAttributes.Private)
if (field.Attributes != FieldAttributes.Private)
continue;
var fieldType = DotNetUtils.getType(module, field.FieldSig.GetFieldType());
if (fieldType == null)
@ -187,7 +187,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
continue;
if (!method.IsStatic)
return true;
if (method.GenericParams.Count > 0)
if (method.GenericParameters.Count > 0)
return true;
if (method.Body == null)
return true;

View File

@ -318,9 +318,9 @@ namespace de4dot.code.deobfuscators.DeepSea {
}
short[] findKey() {
if (cctor.OwnerModule.Assembly == null)
if (cctor.Module.Assembly == null)
return null;
var pkt = cctor.OwnerModule.Assembly.PublicKeyToken;
var pkt = cctor.Module.Assembly.PublicKeyToken;
if (!PublicKeyBase.IsNullOrEmpty2(pkt))
return getPublicKeyTokenKey(pkt.Data);
return findKey(cctor);
@ -379,7 +379,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
public void cleanup() {
arrayInfo.initField.InitialValue = new byte[1];
arrayInfo.initField.FieldSig.Type = arrayInfo.initField.OwnerModule.CorLibTypes.Byte;
arrayInfo.initField.FieldSig.Type = arrayInfo.initField.Module.CorLibTypes.Byte;
removeInitializeArrayCall(cctor, arrayInfo.initField);
}
}
@ -501,9 +501,9 @@ namespace de4dot.code.deobfuscators.DeepSea {
}
short[] findKey() {
if (cctor.OwnerModule.Assembly == null)
if (cctor.Module.Assembly == null)
return null;
var pkt = cctor.OwnerModule.Assembly.PublicKeyToken;
var pkt = cctor.Module.Assembly.PublicKeyToken;
if (!PublicKeyBase.IsNullOrEmpty2(pkt))
return getPublicKeyTokenKey(pkt.Data);
return findKey(cctor);
@ -538,7 +538,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
public void cleanup() {
encryptedDataField.InitialValue = new byte[1];
encryptedDataField.FieldSig.Type = encryptedDataField.OwnerModule.CorLibTypes.Byte;
encryptedDataField.FieldSig.Type = encryptedDataField.Module.CorLibTypes.Byte;
removeInitializeArrayCall(cctor, encryptedDataField);
}
}
@ -628,9 +628,9 @@ namespace de4dot.code.deobfuscators.DeepSea {
}
short[] findKey() {
if (cctor.OwnerModule.Assembly == null)
if (cctor.Module.Assembly == null)
return null;
var pkt = cctor.OwnerModule.Assembly.PublicKeyToken;
var pkt = cctor.Module.Assembly.PublicKeyToken;
if (!PublicKeyBase.IsNullOrEmpty2(pkt))
return getPublicKeyTokenKey(pkt.Data);
return findKey(cctor);
@ -730,7 +730,7 @@ namespace de4dot.code.deobfuscators.DeepSea {
var pkt = module.Assembly.PublicKeyToken;
bool hasPublicKeyToken = !PublicKeyBase.IsNullOrEmpty2(pkt);
foreach (var type in module.GetTypes()) {
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
continue;

View File

@ -243,7 +243,7 @@ namespace de4dot.code.deobfuscators {
var entryPoint = module.EntryPoint;
if (entryPoint != null) {
cctor = entryPoint.DeclaringType.FindClassConstructor();
cctor = entryPoint.DeclaringType.FindStaticConstructor();
if (cctor != null)
yield return cctor;
}
@ -251,7 +251,7 @@ namespace de4dot.code.deobfuscators {
foreach (var type in module.GetTypes()) {
if (type == module.GlobalType)
continue;
cctor = type.FindClassConstructor();
cctor = type.FindStaticConstructor();
if (cctor == null)
continue;
yield return cctor;

View File

@ -212,7 +212,7 @@ namespace de4dot.code.deobfuscators {
foreach (var field in type.Fields) {
if (field.IsStatic)
continue;
field.IsRTSpecialName = true;
field.IsRuntimeSpecialName = true;
field.IsSpecialName = true;
}
}
@ -377,7 +377,7 @@ namespace de4dot.code.deobfuscators {
void deleteEmptyCctors() {
var emptyCctorsToRemove = new List<MethodDef>();
foreach (var type in module.GetTypes()) {
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor != null && DotNetUtils.isEmpty(cctor))
emptyCctorsToRemove.Add(cctor);
}

View File

@ -67,7 +67,7 @@ namespace de4dot.code.deobfuscators {
return;
ourType = new TypeDefUser("", string.Format("<PrivateImplementationDetails>{0}", getModuleId()), module.CorLibTypes.Object.TypeDefOrRef);
ourType.Flags = TypeAttributes.NotPublic | TypeAttributes.AutoLayout |
ourType.Attributes = TypeAttributes.NotPublic | TypeAttributes.AutoLayout |
TypeAttributes.Class | TypeAttributes.AnsiClass;
module.UpdateRowId(ourType);
module.Types.Add(ourType);
@ -99,7 +99,7 @@ namespace de4dot.code.deobfuscators {
valueType = DotNetUtils.findOrCreateTypeReference(module, module.CorLibTypes.AssemblyRef, "System", "ValueType", false);
arrayType = new TypeDefUser("", string.Format("__StaticArrayInitTypeSize={0}", size), valueType.TypeDefOrRef);
module.UpdateRowId(arrayType);
arrayType.Flags = TypeAttributes.NestedPrivate | TypeAttributes.ExplicitLayout |
arrayType.Attributes = TypeAttributes.NestedPrivate | TypeAttributes.ExplicitLayout |
TypeAttributes.Class | TypeAttributes.Sealed | TypeAttributes.AnsiClass;
ourType.NestedTypes.Add(arrayType);
sizeToArrayType[size] = arrayType;

View File

@ -36,7 +36,7 @@ namespace de4dot.code.deobfuscators {
continue;
if (!method.IsAssembly && !method.IsPrivateScope && !method.IsPrivate)
continue;
if (method.GenericParams.Count > 0)
if (method.GenericParameters.Count > 0)
continue;
if (method.Name == ".cctor")
continue;

View File

@ -161,7 +161,7 @@ namespace de4dot.code.deobfuscators {
TypeSig type;
Local local;
var corLibTypes = method.DeclaringType.OwnerModule.CorLibTypes;
var corLibTypes = method.DeclaringType.Module.CorLibTypes;
switch (pushInstr.OpCode.Code) {
case Code.Ldstr:
type = corLibTypes.String;

View File

@ -209,7 +209,7 @@ namespace de4dot.code.deobfuscators {
Logger.v("Finding all proxy delegates");
foreach (var tmp in getDelegateTypes()) {
var type = tmp;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null || !cctor.HasBody)
continue;
if (!type.HasFields)
@ -393,7 +393,7 @@ namespace de4dot.code.deobfuscators {
protected void find2() {
foreach (var type in getDelegateTypes()) {
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null || !cctor.HasBody)
continue;
if (!type.HasFields)

View File

@ -96,7 +96,7 @@ namespace de4dot.code.deobfuscators.Rummage {
static MethodDef checkType(TypeDef type) {
if (!new FieldTypes(type).exactly(requiredFields))
return null;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
return null;
if (!new LocalTypes(cctor).all(requiredLocals))
@ -161,7 +161,7 @@ namespace de4dot.code.deobfuscators.Rummage {
}
void initType(TypeDef type) {
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
return;
var info = getStringInfo(cctor);

View File

@ -97,7 +97,7 @@ namespace de4dot.code.deobfuscators.Skater_NET {
if (type.HasProperties || type.HasEvents)
continue;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
continue;

View File

@ -73,7 +73,7 @@ namespace de4dot.code.deobfuscators.Spices_Net {
return false;
if (type.HasProperties || type.HasEvents || type.HasFields)
return false;
if (type.InterfaceImpls.Count > 0)
if (type.Interfaces.Count > 0)
return false;
var method = type.FindMethod("GetResourceFileName");
if (!DotNetUtils.isMethod(method, "System.String", "(System.Globalization.CultureInfo)"))

View File

@ -113,7 +113,7 @@ namespace de4dot.code.deobfuscators.Spices_Net {
return false;
if (!calledMethod.IsStatic)
return false;
if (calledMethod.GenericParams.Count > 0)
if (calledMethod.GenericParameters.Count > 0)
return false;
if (calledMethod.Body == null || calledMethod.Body.Instructions.Count == 0)
return false;
@ -154,17 +154,17 @@ namespace de4dot.code.deobfuscators.Spices_Net {
static bool checkMethodsType(TypeDef type) {
if (!type.IsNested)
return false;
if ((type.Flags & ~TypeAttributes.BeforeFieldInit) != TypeAttributes.NestedAssembly)
if ((type.Attributes & ~TypeAttributes.BeforeFieldInit) != TypeAttributes.NestedAssembly)
return false;
if (type.HasProperties || type.HasEvents || type.HasFields || type.HasNestedTypes)
return false;
if (type.GenericParams.Count > 0)
if (type.GenericParameters.Count > 0)
return false;
if (type.IsValueType || type.IsInterface)
return false;
if (type.BaseType == null || type.BaseType.FullName != "System.Object")
return false;
if (type.InterfaceImpls.Count > 0)
if (type.Interfaces.Count > 0)
return false;
if (!checkMethods(type))
return false;
@ -185,11 +185,11 @@ namespace de4dot.code.deobfuscators.Spices_Net {
foundCtor = true;
continue;
}
if (method.Flags != (MethodAttributes.Assembly | MethodAttributes.Static | MethodAttributes.HideBySig))
if (method.Attributes != (MethodAttributes.Assembly | MethodAttributes.Static | MethodAttributes.HideBySig))
return false;
if (method.ImplMap != null)
return false;
if (method.GenericParams.Count > 0)
if (method.GenericParameters.Count > 0)
return false;
numMethods++;

View File

@ -64,7 +64,7 @@ namespace de4dot.code.deobfuscators.Spices_Net {
return null;
if (type.HasMethods || type.HasEvents || type.HasProperties || type.HasNestedTypes)
return null;
if (type.InterfaceImpls.Count > 0)
if (type.Interfaces.Count > 0)
return null;
return type;
@ -95,13 +95,13 @@ namespace de4dot.code.deobfuscators.Spices_Net {
continue;
if (type.Fields.Count != 2)
continue;
if ((type.Flags & ~TypeAttributes.Sealed) != 0)
if ((type.Attributes & ~TypeAttributes.Sealed) != 0)
continue;
if (type.BaseType == null || type.BaseType.FullName != "System.Object")
continue;
if (hasInstanceMethods(type))
continue;
var cctor = type.FindClassConstructor();
var cctor = type.FindStaticConstructor();
if (cctor == null)
continue;

View File

@ -142,7 +142,7 @@ namespace de4dot.code.renamer {
var outStream = new MemoryStream();
ResourceWriter.write(module, outStream, resourceSet);
var newResource = new EmbeddedResource(resource.Name, outStream.ToArray(), resource.Flags);
var newResource = new EmbeddedResource(resource.Name, outStream.ToArray(), resource.Attributes);
int resourceIndex = module.Resources.IndexOf(resource);
if (resourceIndex < 0)
throw new ApplicationException("Could not find index of resource");

View File

@ -403,7 +403,7 @@ namespace de4dot.code.renamer {
string getPinvokeName(MMethodDef methodDef) {
var entryPoint = methodDef.MethodDef.ImplMap.Name.String;
if (Regex.IsMatch(entryPoint, @"^#\d+$"))
entryPoint = DotNetUtils.getDllName(methodDef.MethodDef.ImplMap.Scope.Name.String) + "_" + entryPoint.Substring(1);
entryPoint = DotNetUtils.getDllName(methodDef.MethodDef.ImplMap.Module.Name.String) + "_" + entryPoint.Substring(1);
return entryPoint;
}

View File

@ -49,17 +49,17 @@ namespace de4dot.code.renamer {
string newName;
string asmFullName;
if (type.OwnerModule.Assembly != null)
asmFullName = type.OwnerModule.Assembly.FullName;
if (type.Module.Assembly != null)
asmFullName = type.Module.Assembly.FullName;
else
asmFullName = "<no assembly>";
// Make sure that two namespaces with the same names in different modules aren't renamed
// to the same name.
var key = string.Format(" [{0}] [{1}] [{2}] [{3}] ",
type.OwnerModule.Location,
type.Module.Location,
asmFullName,
type.OwnerModule.Name,
type.Module.Name,
ns);
if (namespaceToNewName.TryGetValue(key, out newName))
return newName;

View File

@ -244,8 +244,8 @@ namespace de4dot.code.renamer.asmmodules {
if (ca == null || customAttributes.ContainsKey(ca))
return;
customAttributes[ca] = true;
push(ca.Ctor);
add(ca.Arguments);
push(ca.Constructor);
add(ca.ConstructorArguments);
add(ca.NamedArguments);
}
@ -298,10 +298,10 @@ namespace de4dot.code.renamer.asmmodules {
void add(EventDef ed) {
if (ed == null || eventDefs.ContainsKey(ed))
return;
if (ed.DeclaringType != null && ed.DeclaringType.OwnerModule != validModule)
if (ed.DeclaringType != null && ed.DeclaringType.Module != validModule)
return;
eventDefs[ed] = true;
push(ed.Type);
push(ed.EventType);
add(ed.CustomAttributes);
add(ed.AddMethod);
add(ed.InvokeMethod);
@ -320,7 +320,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(FieldDef fd) {
if (fd == null || fieldDefs.ContainsKey(fd))
return;
if (fd.DeclaringType != null && fd.DeclaringType.OwnerModule != validModule)
if (fd.DeclaringType != null && fd.DeclaringType.Module != validModule)
return;
fieldDefs[fd] = true;
add(fd.CustomAttributes);
@ -363,7 +363,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(MemberRef mr) {
if (mr == null || memberRefs.ContainsKey(mr))
return;
if (mr.OwnerModule != validModule)
if (mr.Module != validModule)
return;
memberRefs[mr] = true;
push(mr.Class);
@ -381,12 +381,12 @@ namespace de4dot.code.renamer.asmmodules {
void add(MethodDef md) {
if (md == null || methodDefs.ContainsKey(md))
return;
if (md.DeclaringType != null && md.DeclaringType.OwnerModule != validModule)
if (md.DeclaringType != null && md.DeclaringType.Module != validModule)
return;
methodDefs[md] = true;
add(md.Signature);
add(md.ParamList);
add(md.GenericParams);
add(md.GenericParameters);
add(md.DeclSecurities);
add(md.MethodBody);
add(md.CustomAttributes);
@ -507,7 +507,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(MethodSpec ms) {
if (ms == null || methodSpecs.ContainsKey(ms))
return;
if (ms.Method != null && ms.Method.DeclaringType != null && ms.Method.DeclaringType.OwnerModule != validModule)
if (ms.Method != null && ms.Method.DeclaringType != null && ms.Method.DeclaringType.Module != validModule)
return;
methodSpecs[ms] = true;
push(ms.Method);
@ -525,7 +525,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(PropertyDef pd) {
if (pd == null || propertyDefs.ContainsKey(pd))
return;
if (pd.DeclaringType != null && pd.DeclaringType.OwnerModule != validModule)
if (pd.DeclaringType != null && pd.DeclaringType.Module != validModule)
return;
propertyDefs[pd] = true;
add(pd.Type);
@ -546,14 +546,14 @@ namespace de4dot.code.renamer.asmmodules {
void add(TypeDef td) {
if (td == null || typeDefs.ContainsKey(td))
return;
if (td.OwnerModule != validModule)
if (td.Module != validModule)
return;
typeDefs[td] = true;
push(td.BaseType);
add(td.Fields);
add(td.Methods);
add(td.GenericParams);
add(td.InterfaceImpls);
add(td.GenericParameters);
add(td.Interfaces);
add(td.DeclSecurities);
add(td.DeclaringType);
add(td.Events);
@ -579,7 +579,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(TypeRef tr) {
if (tr == null || typeRefs.ContainsKey(tr))
return;
if (tr.OwnerModule != validModule)
if (tr.Module != validModule)
return;
typeRefs[tr] = true;
push(tr.ResolutionScope);
@ -596,7 +596,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(TypeSig ts) {
if (ts == null || typeSigs.ContainsKey(ts))
return;
if (ts.OwnerModule != validModule)
if (ts.Module != validModule)
return;
typeSigs[ts] = true;
@ -664,7 +664,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(TypeSpec ts) {
if (ts == null || typeSpecs.ContainsKey(ts))
return;
if (ts.OwnerModule != validModule)
if (ts.Module != validModule)
return;
typeSpecs[ts] = true;
add(ts.TypeSig);
@ -681,7 +681,7 @@ namespace de4dot.code.renamer.asmmodules {
void add(ExportedType et) {
if (et == null || exportedTypes.ContainsKey(et))
return;
if (et.OwnerModule != validModule)
if (et.Module != validModule)
return;
exportedTypes[et] = true;
add(et.CustomAttributes);

View File

@ -65,7 +65,7 @@ namespace de4dot.code.renamer.asmmodules {
public MMethodDef(MethodDef methodDefinition, MTypeDef owner, int index)
: base(methodDefinition, owner, index) {
genericParams = MGenericParamDef.createGenericParamDefList(MethodDef.GenericParams);
genericParams = MGenericParamDef.createGenericParamDefList(MethodDef.GenericParameters);
visibleBaseIndex = methodDefinition.MethodSig != null && methodDefinition.MethodSig.HasThis ? 1 : 0;
for (int i = 0; i < methodDefinition.Parameters.Count; i++) {
var param = methodDefinition.Parameters[i];

View File

@ -205,7 +205,7 @@ namespace de4dot.code.renamer.asmmodules {
// Initialize interfaces
foreach (var typeDef in allTypes) {
foreach (var iface in typeDef.TypeDef.InterfaceImpls) {
foreach (var iface in typeDef.TypeDef.Interfaces) {
var ifaceTypeDef = resolveType(iface.Interface) ?? resolveOther(iface.Interface);
if (ifaceTypeDef != null)
typeDef.addInterface(ifaceTypeDef, iface.Interface);
@ -336,7 +336,7 @@ namespace de4dot.code.renamer.asmmodules {
typeDef = new MTypeDef(typeDefinition, null, 0);
typeDef.addMembers();
foreach (var iface in typeDef.TypeDef.InterfaceImpls) {
foreach (var iface in typeDef.TypeDef.Interfaces) {
var ifaceDef = resolveOther(iface.Interface);
if (ifaceDef == null)
continue;
@ -391,15 +391,15 @@ namespace de4dot.code.renamer.asmmodules {
if (scopeType == ScopeType.ModuleRef) {
var moduleRef = (ModuleRef)scope;
if (moduleRef.Name == type.OwnerModule.Name) {
var modules = findModules(type.OwnerModule);
if (moduleRef.Name == type.Module.Name) {
var modules = findModules(type.Module);
if (modules != null)
return modules;
}
}
if (scopeType == ScopeType.ModuleRef || scopeType == ScopeType.ModuleDef) {
var asm = type.OwnerModule.Assembly;
var asm = type.Module.Assembly;
if (asm == null)
return null;
var moduleHash = assemblyHash.lookup(asm.FullName);
@ -452,7 +452,7 @@ namespace de4dot.code.renamer.asmmodules {
Logger.e("Could not resolve TypeReference {0} ({1:X8}) (from {2} -> {3})",
Utils.removeNewlines(typeRef),
typeRef.MDToken.ToInt32(),
typeRef.OwnerModule,
typeRef.Module,
typeRef.Scope);
return null;
}
@ -473,7 +473,7 @@ namespace de4dot.code.renamer.asmmodules {
Logger.e("Could not resolve MethodReference {0} ({1:X8}) (from {2} -> {3})",
Utils.removeNewlines(methodRef),
methodRef.MDToken.ToInt32(),
methodRef.DeclaringType.OwnerModule,
methodRef.DeclaringType.Module,
methodRef.DeclaringType.Scope);
return null;
}
@ -494,7 +494,7 @@ namespace de4dot.code.renamer.asmmodules {
Logger.e("Could not resolve FieldReference {0} ({1:X8}) (from {2} -> {3})",
Utils.removeNewlines(fieldReference),
fieldReference.MDToken.ToInt32(),
fieldReference.DeclaringType.OwnerModule,
fieldReference.DeclaringType.Module,
fieldReference.DeclaringType.Scope);
return null;
}

View File

@ -298,7 +298,7 @@ namespace de4dot.code.renamer.asmmodules {
public MTypeDef(TypeDef typeDefinition, Module module, int index)
: base(typeDefinition, null, index) {
this.module = module;
genericParams = MGenericParamDef.createGenericParamDefList(TypeDef.GenericParams);
genericParams = MGenericParamDef.createGenericParamDefList(TypeDef.GenericParameters);
}
public void addInterface(MTypeDef ifaceDef, ITypeDefOrRef iface) {
@ -663,7 +663,7 @@ namespace de4dot.code.renamer.asmmodules {
return resolvedAllInterfacesResult.Value;
}
bool resolvedAllInterfacesInternal() {
if (TypeDef.InterfaceImpls.Count != interfaces.Count)
if (TypeDef.Interfaces.Count != interfaces.Count)
return false;
foreach (var ifaceInfo in interfaces) {
if (!ifaceInfo.typeDef.resolvedAllInterfaces())

2
dot10

@ -1 +1 @@
Subproject commit e17e420a2427869b70963756222518aa003f8aec
Subproject commit 4f392d624e7a9e23133801f2d18b0948e13e4411