Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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));
        }