public string ObfuscateName(string name, RenameMode mode) { string newName = null; name = ParseGenericName(name, out var count); if (string.IsNullOrEmpty(name)) { return(string.Empty); } if (mode == RenameMode.Empty) { return(""); } if (mode == RenameMode.Debug) { return("_" + name); } if (mode == RenameMode.Reversible) { if (reversibleRenamer == null) { throw new ArgumentException("Password not provided for reversible renaming."); } newName = reversibleRenamer.Encrypt(name); return(MakeGenericName(newName, count)); } if (nameMap1.ContainsKey(name)) { return(nameMap1[name]); } var hash = Utils.Xor(Utils.SHA1(Encoding.UTF8.GetBytes(name)), nameSeed); for (var i = 0; i < 100; i++) { newName = ObfuscateNameInternal(hash, mode); if (!identifiers.Contains(MakeGenericName(newName, count))) { break; } hash = Utils.SHA1(hash); } if ((mode & RenameMode.Decodable) != 0) { nameMap2[newName] = name; nameMap1[name] = newName; } return(MakeGenericName(newName, count)); }
public string ObfuscateName(string name, RenameMode mode) { string newName = null; name = ParseGenericName(name, out var count); if (string.IsNullOrEmpty(name)) { return(string.Empty); } if (mode == RenameMode.Empty) { return(""); } if (mode == RenameMode.Debug || mode == RenameMode.Retain) { // When flattening there are issues, in case there is a . in the name of the assembly. newName = MakeGenericName(name.Replace('.', '_'), count); return(mode == RenameMode.Debug ? "_" + newName : newName); } if (mode == RenameMode.Reversible) { if (reversibleRenamer == null) { throw new ArgumentException("Password not provided for reversible renaming."); } newName = reversibleRenamer.Encrypt(name); return(MakeGenericName(newName, count)); } if (nameMap1.ContainsKey(name)) { return(MakeGenericName(nameMap1[name], count)); } byte[] hash = Utils.Xor(Utils.SHA1(Encoding.UTF8.GetBytes(name)), nameSeed); for (int i = 0; i < 100; i++) { newName = ObfuscateNameInternal(hash, mode); if (!identifiers.Contains(MakeGenericName(newName, count))) { break; } hash = Utils.SHA1(hash); } if ((mode & RenameMode.Decodable) != 0) { nameMap2[newName] = name; nameMap1[name] = newName; } return(MakeGenericName(newName, count)); }
public string ObfuscateName(string name, RenameMode mode) { if (string.IsNullOrEmpty(name)) { return(string.Empty); } if (mode == RenameMode.Empty) { return(""); } if (mode == RenameMode.Debug) { return("_" + name); } byte[] hash = Utils.Xor(Utils.SHA1(Encoding.UTF8.GetBytes(name)), nameSeed); switch (mode) { case RenameMode.Empty: return(""); case RenameMode.Unicode: return(Utils.EncodeString(hash, unicodeCharset) + "\u202e"); case RenameMode.Letters: return(Utils.EncodeString(hash, letterCharset)); case RenameMode.ASCII: return(Utils.EncodeString(hash, asciiCharset)); case RenameMode.Decodable: { if (nameMap1.ContainsKey(name)) { return(nameMap1[name]); } IncrementNameId(); var newName = Utils.EncodeString(hash, alphaNumCharset); nameMap2[newName] = name; nameMap1[name] = newName; return(newName); } case RenameMode.Sequential: { if (nameMap1.ContainsKey(name)) { return(nameMap1[name]); } IncrementNameId(); var newName = Utils.EncodeString(nameId, alphaNumCharset); nameMap2[newName] = name; nameMap1[name] = newName; return(newName); } case RenameMode.Reversible: { if (reversibleRenamer == null) { throw new ArgumentException("Password not provided for reversible renaming."); } var newName = reversibleRenamer.Encrypt(name); return(newName); } } throw new NotSupportedException("Rename mode '" + mode + "' is not supported."); }
public string ObfuscateName(string format, string name, RenameMode mode, bool preserveGenericParams = false) { int genericParamsCount = 0; if (preserveGenericParams) { name = ParseGenericName(name, out genericParamsCount); } string newName; if (string.IsNullOrEmpty(name) || mode == RenameMode.Empty) { return(string.Empty); } if (mode == RenameMode.Debug || mode == RenameMode.Retain) { // When flattening there are issues, in case there is a . in the name of the assembly. newName = name.Replace('.', '_'); newName = mode == RenameMode.Debug ? "_" + newName : newName; } else if (mode == RenameMode.Reversible) { if (reversibleRenamer == null) { throw new ArgumentException("Password not provided for reversible renaming."); } newName = reversibleRenamer.Encrypt(name); } else if (!_originalToObfuscatedNameMap.TryGetValue(name, out newName)) { byte[] hash = Utils.Xor(Utils.SHA1(Encoding.UTF8.GetBytes(name)), nameSeed); while (true) { newName = ObfuscateNameInternal(hash, mode); try { if (!(format is null)) { newName = string.Format(CultureInfo.InvariantCulture, format, newName); } } catch (FormatException ex) { throw new ArgumentException( string.Format(CultureInfo.InvariantCulture, Resources.NameService_ObfuscateName_InvalidFormat, format), nameof(format), ex); } if (!identifiers.Contains(MakeGenericName(newName, genericParamsCount)) && !_obfuscatedToOriginalNameMap.ContainsKey(newName)) { break; } hash = Utils.SHA1(hash); } if (mode == RenameMode.Decodable || mode == RenameMode.Sequential) { _obfuscatedToOriginalNameMap.Add(newName, name); _originalToObfuscatedNameMap.Add(name, newName); } } return(MakeGenericName(newName, genericParamsCount)); }