修复在Unity 2019上的编译错误

backup
walon 2025-05-16 17:44:28 +08:00
parent 2921f83fb8
commit d8537e17b5
12 changed files with 59 additions and 52 deletions

View File

@ -189,9 +189,9 @@ namespace Obfuz
ObfuscationPassType passType = ObfuscationPassType.None;
foreach (var passName in obfuscationPassTypesStr.Split('|'))
{
if (Enum.TryParse(typeof(ObfuscationPassType), passName, out var pass))
if (Enum.TryParse< ObfuscationPassType>(passName, out var pass))
{
passType |= (ObfuscationPassType)pass;
passType |= pass;
}
else
{

View File

@ -77,7 +77,7 @@ namespace Obfuz.EncryptionVM
{");
foreach (var opCode in _vm.opCodes)
{
lines.Add(@$" case {opCode.code}:
lines.Add($@" case {opCode.code}:
{{
// {opCode.function.GetType().Name}");
AppendEncryptCode(lines, opCode.function);
@ -101,7 +101,7 @@ namespace Obfuz.EncryptionVM
{");
foreach (var opCode in _vm.opCodes)
{
lines.Add(@$" case {opCode.code}:
lines.Add($@" case {opCode.code}:
{{
// {opCode.function.GetType().Name}");
AppendDecryptCode(lines, opCode.function);
@ -132,7 +132,7 @@ namespace Obfuz.EncryptionVM
{
public class GeneratedEncryptionVirtualMachine : Obfuz.EncryptorBase
{");
lines.Add(@$"
lines.Add($@"
private const int kOpCodeBits = {_opCodeBits};
private const int kOpCodeCount = {_opCodeCount};

View File

@ -213,22 +213,22 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
{
case "int":
{
notEncryptInts.AddRange(value.Split(",").Select(s => int.Parse(s.Trim())));
notEncryptInts.AddRange(value.Split(',').Select(s => int.Parse(s.Trim())));
break;
}
case "long":
{
notEncryptLongs.AddRange(value.Split(",").Select(s => long.Parse(s.Trim())));
notEncryptLongs.AddRange(value.Split(',').Select(s => long.Parse(s.Trim())));
break;
}
case "string":
{
notEncryptStrings.AddRange(value.Split(",").Select(s => s.Trim()));
notEncryptStrings.AddRange(value.Split(',').Select(s => s.Trim()));
break;
}
case "int-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, int-range {value} is invalid");
@ -238,7 +238,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
}
case "long-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, long-range {value} is invalid");
@ -248,7 +248,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
}
case "float-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, float-range {value} is invalid");
@ -258,7 +258,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
}
case "double-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, double-range {value} is invalid");
@ -268,7 +268,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
}
case "string-length-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, string-length-range {value} is invalid");
@ -278,7 +278,7 @@ namespace Obfuz.ObfusPasses.ConstEncrypt
}
case "array-length-range":
{
var parts = value.Split(",");
var parts = value.Split(',');
if (parts.Length != 2)
{
throw new Exception($"Invalid xml file, array-length-range {value} is invalid");

View File

@ -711,7 +711,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
public ConfigurableRenamePolicy(List<string> obfuscationAssemblyNames, List<string> xmlFiles)
{
this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet();
_obfuscationAssemblyNames = new HashSet<string>(obfuscationAssemblyNames);
LoadXmls(xmlFiles);
}

View File

@ -69,7 +69,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
_assemblyCache = ctx.assemblyCache;
_toObfuscatedModules = ctx.toObfuscatedModules;
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
_toObfuscatedModuleSet = new HashSet<ModuleDef>(ctx.toObfuscatedModules);
var obfuscateRuleConfig = new ConfigurableRenamePolicy(ctx.toObfuscatedAssemblyNames, _obfuscationRuleFiles);
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SupportPassPolicy(ctx.passPolicy), new SystemRenamePolicy(), new UnityRenamePolicy(), obfuscateRuleConfig));
BuildCustomAttributeArguments();

View File

@ -1,5 +1,4 @@
using dnlib.DotNet;
using dnlib.Protection;
using Obfuz.Data;
using Obfuz.Emit;
using Obfuz.EncryptionVM;
@ -14,7 +13,6 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
using static UnityEditor.ObjectChangeEventStream;
namespace Obfuz
{

View File

@ -27,7 +27,11 @@ namespace Obfuz.Unity
public void OnPostBuildPlayerScriptDLLs(BuildReport report)
{
#if UNITY_2019
RunObfuscate(report.files);
#else
RunObfuscate(report.GetFiles());
#endif
}
private static void BackupOriginalDlls(string srcDir, string dstDir, HashSet<string> dllNames)
@ -57,7 +61,7 @@ namespace Obfuz.Unity
Debug.Log("Obfuscation begin...");
var buildTarget = EditorUserBuildSettings.activeBuildTarget;
var obfuscationRelativeAssemblyNames = settings.assemblySettings.GetObfuscationRelativeAssemblyNames().ToHashSet();
var obfuscationRelativeAssemblyNames = new HashSet<string>(settings.assemblySettings.GetObfuscationRelativeAssemblyNames());
string stagingAreaTempManagedDllDir = Path.GetDirectoryName(files.First(file => file.path.EndsWith(".dll")).path);
string backupPlayerScriptAssembliesPath = settings.GetOriginalAssemblyBackupDir(buildTarget);
BackupOriginalDlls(stagingAreaTempManagedDllDir, backupPlayerScriptAssembliesPath, obfuscationRelativeAssemblyNames);

View File

@ -4,7 +4,6 @@ using Obfuz.Utils;
using System.IO;
using UnityEditor;
using UnityEngine;
using static UnityEditor.ObjectChangeEventStream;
using FileUtil = Obfuz.Utils.FileUtil;
namespace Obfuz.Unity

View File

@ -13,7 +13,8 @@ namespace Obfuz.Utils
public static byte[] GenerateKey(string initialString, int keyLength)
{
byte[] initialBytes = Encoding.UTF8.GetBytes(initialString);
using var sha512 = SHA512.Create();
using (var sha512 = SHA512.Create())
{
byte[] hash = sha512.ComputeHash(initialBytes);
byte[] key = new byte[keyLength];
int bytesCopied = 0;
@ -30,6 +31,7 @@ namespace Obfuz.Utils
}
return key;
}
}
public static int[] ConvertToIntKey(byte[] key)
{

View File

@ -55,24 +55,28 @@ namespace Obfuz
Buffer.BlockCopy(data, offset, array, 0, length);
}
public static int CastFloatAsInt(float value)
public static unsafe int CastFloatAsInt(float value)
{
return UnsafeUtility.As<float, int>(ref value);
int* intValue = (int*)&value;
return *intValue;
}
public static float CastIntAsFloat(int value)
public static unsafe float CastIntAsFloat(int value)
{
return UnsafeUtility.As<int, float>(ref value);
float* floatValue = (float*)&value;
return *floatValue;
}
public static long CastDoubleAsLong(double value)
public static unsafe long CastDoubleAsLong(double value)
{
return UnsafeUtility.As<double, long>(ref value);
long* longValue = (long*)&value;
return *longValue;
}
public static double CastLongAsDouble(long value)
public static unsafe double CastLongAsDouble(long value)
{
return UnsafeUtility.As<long, double>(ref value);
double* doubleValue = (double*)&value;
return *doubleValue;
}
}
}

View File

@ -40,49 +40,49 @@ namespace Obfuz
return ((long)decryptedHigh << 32) | (uint)decryptedLow;
}
public virtual float Encrypt(float value, int opts, int salt)
public virtual unsafe float Encrypt(float value, int opts, int salt)
{
if (float.IsNaN(value) || float.IsInfinity(value))
{
return value;
}
ref int intValue = ref UnsafeUtility.As<float, int>(ref value);
ref int intValue = ref *(int*)&value;
int xorValue = ((1 << 23) - 1) & Decrypt(0xABCD, opts, salt);
intValue ^= xorValue;
return value;
}
public virtual float Decrypt(float value, int opts, int salt)
public virtual unsafe float Decrypt(float value, int opts, int salt)
{
if (float.IsNaN(value) || float.IsInfinity(value))
{
return value;
}
ref int intValue = ref UnsafeUtility.As<float, int>(ref value);
ref int intValue = ref *(int*)&value;
int xorValue = ((1 << 23) - 1) & Decrypt(0xABCD, opts, salt);
intValue ^= xorValue;
return value;
}
public virtual double Encrypt(double value, int opts, int salt)
public virtual unsafe double Encrypt(double value, int opts, int salt)
{
if (double.IsNaN(value) || double.IsInfinity(value))
{
return value;
}
ref long longValue = ref UnsafeUtility.As<double, long>(ref value);
ref long longValue = ref *(long*)&value;
long xorValue = ((1L << 52) - 1) & Decrypt(0xAABBCCDDL, opts, salt);
longValue ^= xorValue;
return value;
}
public virtual double Decrypt(double value, int opts, int salt)
public virtual unsafe double Decrypt(double value, int opts, int salt)
{
if (double.IsNaN(value) || double.IsInfinity(value))
{
return value;
}
ref long longValue = ref UnsafeUtility.As<double, long>(ref value);
ref long longValue = ref *(long*)&value;
long xorValue = ((1L << 52) - 1) & Decrypt(0xAABBCCDDL, opts, salt);
longValue ^= xorValue;
return value;

View File

@ -24,9 +24,9 @@ namespace Obfuz
double Decrypt(double value, int opts, int salt);
byte[] Encrypt(byte[] value, int offset, int length, int opts, int salt);
public byte[] Decrypt(byte[] value, int offset, int byteLength, int ops, int salt);
byte[] Decrypt(byte[] value, int offset, int byteLength, int ops, int salt);
public byte[] Encrypt(string value, int ops, int salt);
public string DecryptString(byte[] value, int offset, int stringBytesLength, int ops, int salt);
byte[] Encrypt(string value, int ops, int salt);
string DecryptString(byte[] value, int offset, int stringBytesLength, int ops, int salt);
}
}