Warn user if trying to rename an asm using XAML

This commit is contained in:
de4dot 2013-11-17 20:25:40 +01:00
parent b7eb39203a
commit 781ade32cd

View File

@ -23,6 +23,7 @@ using System.Text.RegularExpressions;
using dnlib.DotNet;
using dnlib.DotNet.Emit;
using de4dot.code.renamer.asmmodules;
using de4dot.code.resources;
using de4dot.blocks;
namespace de4dot.code.renamer {
@ -187,6 +188,8 @@ namespace de4dot.code.renamer {
public Renamer(IDeobfuscatorContext deobfuscatorContext, IEnumerable<IObfuscatedFile> files, RenamerFlags flags) {
RenamerFlags = flags;
WarnIfXaml(files);
modules = new Modules(deobfuscatorContext);
isDelegateClass = new DerivedFrom(delegateClasses);
mergeStateHelper = new MergeStateHelper(memberInfos);
@ -195,6 +198,39 @@ namespace de4dot.code.renamer {
modules.Add(new Module(file));
}
static void WarnIfXaml(IEnumerable<IObfuscatedFile> files) {
foreach (var file in files) {
foreach (var tmp in file.ModuleDefMD.Resources) {
var rsrc = tmp as EmbeddedResource;
if (rsrc == null)
continue;
if (UTF8String.IsNullOrEmpty(rsrc.Name))
continue;
if (!rsrc.Name.String.EndsWith(".g.resources"))
continue;
if (!HasXamlFiles(file.ModuleDefMD, rsrc))
continue;
Logger.w("File '{0}' contains XAML which isn't supported. Use --dont-rename.", file.Filename);
return;
}
}
}
static bool HasXamlFiles(ModuleDef module, EmbeddedResource rsrc) {
try {
rsrc.Data.Position = 0;
var rsrcSet = ResourceReader.Read(module, rsrc.Data);
foreach (var elem in rsrcSet.ResourceElements) {
if (elem.Name.EndsWith(".baml"))
return true;
}
}
catch {
}
return false;
}
public void Rename() {
if (modules.Empty)
return;