Now using module.ResolveMethod(token) to resolve string decrypter methods

This commit is contained in:
de4dot 2011-10-06 08:59:05 +02:00
parent 1c721b017e
commit 820300e3b2
2 changed files with 7 additions and 20 deletions

View File

@ -71,9 +71,9 @@ namespace AssemblyData {
} }
} }
public int defineStringDecrypter(int methodToken, int typeToken) { public int defineStringDecrypter(int methodToken) {
checkStringDecrypter(); checkStringDecrypter();
var methodInfo = findMethod(methodToken, typeToken); var methodInfo = findMethod(methodToken);
if (methodInfo == null) if (methodInfo == null)
throw new ApplicationException(string.Format("Could not find method {0:X8}", methodToken)); throw new ApplicationException(string.Format("Could not find method {0:X8}", methodToken));
if (methodInfo.ReturnType != typeof(string)) if (methodInfo.ReturnType != typeof(string))
@ -100,26 +100,13 @@ namespace AssemblyData {
return null; return null;
} }
MethodInfo findMethod(int methodToken, int typeToken) { MethodInfo findMethod(int methodToken) {
checkAssembly(); checkAssembly();
const BindingFlags bindingFlags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static;
foreach (var module in assembly.GetModules()) { foreach (var module in assembly.GetModules()) {
foreach (var method in module.GetMethods(bindingFlags)) { var method = module.ResolveMethod(methodToken) as MethodInfo;
if (method.MetadataToken == methodToken) if (method != null)
return method; return method;
}
}
foreach (var type in assembly.GetTypes()) {
if (type.MetadataToken == typeToken || typeToken == 0) {
var methods = type.GetMethods(bindingFlags);
foreach (var method in methods) {
if (method.MetadataToken == methodToken)
return method;
}
}
} }
return null; return null;

View File

@ -27,7 +27,7 @@ namespace AssemblyData {
void doNothing(); void doNothing();
void loadAssembly(string filename); void loadAssembly(string filename);
void setStringDecrypterType(StringDecrypterType type); void setStringDecrypterType(StringDecrypterType type);
int defineStringDecrypter(int methodToken, int typeToken = 0); int defineStringDecrypter(int methodToken);
object[] decryptStrings(int stringDecrypterMethod, object[] args); object[] decryptStrings(int stringDecrypterMethod, object[] args);
void exit(); void exit();
} }