mirror of
https://github.com/KingKDot/PowerCrypt
synced 2026-06-06 16:04:30 +00:00
73 lines
2.1 KiB
C#
73 lines
2.1 KiB
C#
namespace PowerCrypt.Obfuscator.Methods.StaticNumberObfuscation
|
|
{
|
|
public class NumberOBF
|
|
{
|
|
public static string ObfuscateNumber(string number)
|
|
{
|
|
if (!IsDecimalNumber(number))
|
|
{
|
|
return number;
|
|
}
|
|
|
|
return AddOrSubtractRandomEQ(number);
|
|
}
|
|
|
|
private static bool IsDecimalNumber(string number)
|
|
{
|
|
return int.TryParse(number, out _);
|
|
}
|
|
|
|
private static string AddOrSubtractRandomEQ(string numberToObf)
|
|
{
|
|
var random = new Random();
|
|
var number1 = random.Next(1, 10000);
|
|
var signs = new[] { "+", "-" };
|
|
var sign1 = signs[random.Next(0, 2)];
|
|
var oppositeSign1 = sign1 == "+" ? "-" : "+";
|
|
|
|
var finalNumber = $"{numberToObf} {sign1} {number1}";
|
|
var outFinal = EvaluateExpression(finalNumber);
|
|
|
|
//1/4 chance to include a third number
|
|
if (random.Next(0, 4) == 0)
|
|
{
|
|
var number2 = random.Next(1, 10000);
|
|
var sign2 = signs[random.Next(0, 2)];
|
|
var oppositeSign2 = sign2 == "+" ? "-" : "+";
|
|
|
|
finalNumber = $"{outFinal} {sign2} {number2}";
|
|
outFinal = EvaluateExpression(finalNumber);
|
|
|
|
var newProblem = $"{outFinal}{oppositeSign2}{number2}{oppositeSign1}{number1}";
|
|
return $"({newProblem})";
|
|
}
|
|
else
|
|
{
|
|
var newProblem = $"{outFinal}{oppositeSign1}{number1}";
|
|
return $"({newProblem})";
|
|
}
|
|
}
|
|
|
|
private static int EvaluateExpression(string expression)
|
|
{
|
|
var result = 0;
|
|
var data = expression.Split(' ');
|
|
result = int.Parse(data[0]);
|
|
|
|
var sign = data[1];
|
|
var number = int.Parse(data[2]);
|
|
|
|
if (sign == "+")
|
|
{
|
|
result += number;
|
|
}
|
|
else if (sign == "-")
|
|
{
|
|
result -= number;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|
|
}
|