Skip to content
This repository was archived by the owner on Oct 5, 2019. It is now read-only.

Commit e64ff98

Browse files
author
Zaczero
committed
Added variable injection
1 parent ce73d2d commit e64ff98

File tree

1 file changed

+110
-30
lines changed

1 file changed

+110
-30
lines changed

SharpLoader/Core/SourceRandomizer.cs

Lines changed: 110 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ private void Random(ref string str)
278278
}
279279

280280
// Replace
281-
str = str.Remove(tagIndex, tagLength + 1).Insert(tagIndex, outputValue.ToString());
281+
str = str.Remove(tagIndex, tagLength + 1).Insert(tagIndex, InjectInt(str, outputValue));
282282
}
283283
}
284284

@@ -353,7 +353,7 @@ private void RandomS(ref string str)
353353
}
354354

355355
// Replace
356-
str = str.Remove(tagIndex, tagLength + 1).Insert(tagIndex, output);
356+
str = str.Remove(tagIndex, tagLength + 1).Insert(tagIndex, InjectString(str, output));
357357
}
358358
}
359359

@@ -491,7 +491,7 @@ private void Trash(ref string str)
491491
}
492492
}
493493

494-
trash += $"\"{varValue}\".{operation};";
494+
trash += $"{InjectString(str, varValue)}.{operation};";
495495
}
496496
else if(rndValue < trashChances[trashChancesIndex++])
497497
{
@@ -532,7 +532,7 @@ private void Trash(ref string str)
532532
}
533533
}
534534

535-
trash += $"{varType} {varName}={varValue}\0{varName}{operation}={varChange};";
535+
trash += $"{varType} {varName}=({varType}){InjectInt(str, varValue)}\0{varName}{operation}=({varType}){InjectInt(str, varChange)};";
536536
}
537537
else if (rndValue < trashChances[trashChancesIndex++])
538538
{
@@ -651,12 +651,12 @@ private void Encrypt(ref string str)
651651
$"<trash>" +
652652
$"<swap/>" +
653653
$"<flow/>" +
654-
$"for(int {i} = 0; {i} < {baseEncrypted}.Length; {i}++)" +
654+
$"for(int {i} = {InjectInt(str, 0)}; {i} < {baseEncrypted}.Length; {i}++)" +
655655
$"{{" +
656656
$"<flow>" +
657-
$"{a} = {baseDecryptor}[0] % {baseDecryptor}[1];" +
657+
$"{a} = {baseDecryptor}[{InjectInt(str, 0)}] % {baseDecryptor}[{InjectInt(str, 1)}];" +
658658
$"<trash 4>" +
659-
$"{b} = {i} + {baseDecryptor}[1];" +
659+
$"{b} = {i} + {baseDecryptor}[{InjectInt(str, 1)}];" +
660660
$"<trash 4>" +
661661
$"{c} = {a} * {b};" +
662662
$"<trash 4>" +
@@ -710,8 +710,8 @@ private void Encrypt(ref string str)
710710

711711
var tmp2 = new[] { decryptorOne, decryptorTwo };
712712

713-
var baseEncrypted = ByteArrayToString(tmp1);
714-
var baseDecryptor = ByteArrayToString(tmp2);
713+
var baseEncrypted = ByteArrayToString(str, tmp1);
714+
var baseDecryptor = ByteArrayToString(str, tmp2);
715715

716716
var output = $"{_stringDecryptorFunction}({baseEncrypted},{baseDecryptor})";
717717

@@ -759,12 +759,12 @@ private void Encrypt(ref string str)
759759
$"<trash>" +
760760
$"<swap/>" +
761761
$"<flow/>" +
762-
$"for(int {i} = 0; {i} < {baseEncrypted}.Length; {i}++)" +
762+
$"for(int {i} = {InjectInt(str, 0)}; {i} < {baseEncrypted}.Length; {i}++)" +
763763
$"{{" +
764764
$"<flow>" +
765-
$"{a} = {baseDecryptor}[0] % {baseDecryptor}[1];" +
765+
$"{a} = {baseDecryptor}[{InjectInt(str, 0)}] % {baseDecryptor}[{InjectInt(str, 1)}];" +
766766
$"<trash 4>" +
767-
$"{b} = {i} + {baseDecryptor}[1];" +
767+
$"{b} = {i} + {baseDecryptor}[{InjectInt(str, 1)}];" +
768768
$"<trash 4>" +
769769
$"{c} = {a} * {b};" +
770770
$"<trash 4>" +
@@ -818,8 +818,8 @@ private void Encrypt(ref string str)
818818

819819
var tmp2 = new[] { decryptorOne, decryptorTwo };
820820

821-
var baseEncrypted = ByteArrayToString(tmp1);
822-
var baseDecryptor = ByteArrayToString(tmp2);
821+
var baseEncrypted = ByteArrayToString(str, tmp1);
822+
var baseDecryptor = ByteArrayToString(str, tmp2);
823823

824824
var output = $"{_charDecryptorFunction}({baseEncrypted},{baseDecryptor})";
825825

@@ -859,12 +859,12 @@ private void Encrypt(ref string str)
859859
$"{{" +
860860
$"<flow>" +
861861
$"<swap>" +
862-
$"{encrypted} = BitConverter.ToInt32({baseEncrypted}, 0);" +
862+
$"{encrypted} = BitConverter.ToInt32({baseEncrypted}, {InjectInt(str, 0)});" +
863863
$"<trash>" +
864864
$"<swap/>" +
865-
$"{a} = {baseDecryptor}[0] % {baseDecryptor}[1];" +
865+
$"{a} = {baseDecryptor}[{InjectInt(str, 0)}] % {baseDecryptor}[{InjectInt(str, 1)}];" +
866866
$"<trash 4>" +
867-
$"{b} = {a} * {baseDecryptor}[1];" +
867+
$"{b} = {a} * {baseDecryptor}[{InjectInt(str, 1)}];" +
868868
$"<trash 4>" +
869869
$"{c} = {b} ^ {encrypted};" +
870870
$"<trash 4>" +
@@ -919,8 +919,8 @@ private void Encrypt(ref string str)
919919
var tmp1 = BitConverter.GetBytes(encrypted);
920920
var tmp2 = new[] {decryptorOne, decryptorTwo};
921921

922-
var baseEncrypted = ByteArrayToString(tmp1);
923-
var baseDecryptor = ByteArrayToString(tmp2);
922+
var baseEncrypted = ByteArrayToString(str, tmp1);
923+
var baseDecryptor = ByteArrayToString(str, tmp2);
924924

925925
var output = $"{_valueDecryptorFunction}({baseEncrypted}, {baseDecryptor})";
926926

@@ -1055,21 +1055,21 @@ private void Flow(ref string str)
10551055
$"{{" +
10561056
$"public static class {className}" +
10571057
$"{{" +
1058-
$"private static byte[] {tmp1} = new byte[4];" +
1059-
$"private static byte[] {tmp2} = new byte[4];" +
1058+
$"private static byte[] {tmp1} = new byte[{InjectInt(str, 4)}];" +
1059+
$"private static byte[] {tmp2} = new byte[{InjectInt(str, 4)}];" +
10601060
$"private static int {decryptorOne};" +
10611061
$"private static int {decryptorTwo};" +
10621062
$"private static int {result};" +
10631063
$"public static int {funcName}(byte[] {baseDecryptor})" +
10641064
$"{{" +
10651065
$"<swap>" +
1066-
$"Array.Copy({baseDecryptor}, 0, {tmp1}, 0, 4);" +
1067-
$"Array.Copy({baseDecryptor}, 4, {tmp2}, 0, 4);" +
1066+
$"Array.Copy({baseDecryptor}, {InjectInt(str, 0)}, {tmp1}, {InjectInt(str, 0)}, {InjectInt(str, 4)});" +
1067+
$"Array.Copy({baseDecryptor}, {InjectInt(str, 4)}, {tmp2}, {InjectInt(str, 0)}, {InjectInt(str, 4)});" +
10681068
$"<trash>" +
10691069
$"<swap/>" +
10701070
$"<swap>" +
1071-
$"{decryptorOne} = BitConverter.ToInt32({tmp1}, 0);" +
1072-
$"{decryptorTwo} = BitConverter.ToInt32({tmp2}, 0);" +
1071+
$"{decryptorOne} = BitConverter.ToInt32({tmp1}, {InjectInt(str, 0)});" +
1072+
$"{decryptorTwo} = BitConverter.ToInt32({tmp2}, {InjectInt(str, 0)});" +
10731073
$"<trash>" +
10741074
$"<swap/>" +
10751075
$"<swap>" +
@@ -1140,7 +1140,7 @@ private void Flow(ref string str)
11401140
// Last
11411141
if (i + 1 == cases.Length)
11421142
{
1143-
cases[i] = $"case {switchValues[i]}:{{{finalBlocks[i]}{doLoopName}=false;break;}}";
1143+
cases[i] = $"case {switchValues[i]}:{{{finalBlocks[i]}{doLoopName}={InjectBool(str, false)};break;}}";
11441144
}
11451145
// Not last
11461146
else
@@ -1150,7 +1150,7 @@ private void Flow(ref string str)
11501150
var tmp1 = new byte[8];
11511151
Array.Copy(tmp2, 0, tmp1, 0, 4);
11521152
Array.Copy(tmp3, 0, tmp1, 4, 4);
1153-
var baseDecryptor = ByteArrayToString(tmp1);
1153+
var baseDecryptor = ByteArrayToString(str, tmp1);
11541154

11551155
cases[i] = $"case {switchValues[i]}:{{{finalBlocks[i]}{switchName}={_xorDecryptorFunction}({baseDecryptor});break;}}<block>";
11561156
}
@@ -1159,7 +1159,7 @@ private void Flow(ref string str)
11591159
// Generate output
11601160
var caseOutput = cases.Aggregate(string.Empty, (current, c) => current + c);
11611161
var innerOutput = cases.Length < 2 ? caseOutput : $"<swap>{caseOutput}<swap/>";
1162-
var output = $"<swap>int {switchName}={switchValues[0]};bool {doLoopName}=true;<swap/>while({doLoopName}){{switch({switchName}){{{innerOutput}}}}}";
1162+
var output = $"<swap>int {switchName}={InjectInt(str, switchValues[0])};bool {doLoopName}={InjectBool(str, true)};<swap/>while({doLoopName}){{switch({switchName}){{{innerOutput}}}}}";
11631163

11641164
// Replace
11651165
str = str.Remove(tagIndex, tagLength + endTagIndex + endTagLength).Insert(tagIndex, output);
@@ -1308,16 +1308,96 @@ private string[] GetCodeBlocks(string str)
13081308
return blocks;
13091309
}
13101310

1311-
private string ByteArrayToString(byte[] byteArray)
1311+
private string ByteArrayToString(string str, byte[] byteArray)
13121312
{
13131313
var returnSb = new StringBuilder("new byte[] {");
13141314
foreach (var b in byteArray)
13151315
{
1316-
returnSb.Append(' ' + b.ToString() + ',');
1316+
returnSb.Append(' ' + InjectByte(str, b) + ',');
13171317
}
13181318
returnSb.Remove(returnSb.Length - 1, 1);
13191319
returnSb.Append("}");
13201320
return returnSb.ToString();
13211321
}
1322+
1323+
private string InjectByte(string str, byte b)
1324+
{
1325+
//return b.ToString();
1326+
1327+
var namespaceName = GetVariableName(str);
1328+
var className = GetVariableName(str);
1329+
var propertyName = GetVariableName(str);
1330+
1331+
Inject.Add($"using System;" +
1332+
$"namespace {namespaceName}" +
1333+
$"{{" +
1334+
$"public static class {className}" +
1335+
$"{{" +
1336+
$"public static byte {propertyName} = {b};" +
1337+
$"}}" +
1338+
$"}}");
1339+
1340+
return $"{namespaceName}.{className}.{propertyName}";
1341+
}
1342+
1343+
private string InjectBool(string str, bool b)
1344+
{
1345+
//return b.ToString().ToLower();
1346+
1347+
var namespaceName = GetVariableName(str);
1348+
var className = GetVariableName(str);
1349+
var propertyName = GetVariableName(str);
1350+
1351+
Inject.Add($"using System;" +
1352+
$"namespace {namespaceName}" +
1353+
$"{{" +
1354+
$"public static class {className}" +
1355+
$"{{" +
1356+
$"public static bool {propertyName} = {b.ToString().ToLower()};" +
1357+
$"}}" +
1358+
$"}}");
1359+
1360+
return $"{namespaceName}.{className}.{propertyName}";
1361+
}
1362+
1363+
private string InjectInt(string str, int b)
1364+
{
1365+
//return b.ToString();
1366+
1367+
var namespaceName = GetVariableName(str);
1368+
var className = GetVariableName(str);
1369+
var propertyName = GetVariableName(str);
1370+
1371+
Inject.Add($"using System;" +
1372+
$"namespace {namespaceName}" +
1373+
$"{{" +
1374+
$"public static class {className}" +
1375+
$"{{" +
1376+
$"public static int {propertyName} = {b};" +
1377+
$"}}" +
1378+
$"}}");
1379+
1380+
return $"{namespaceName}.{className}.{propertyName}";
1381+
}
1382+
1383+
private string InjectString(string str, string b)
1384+
{
1385+
//return $"\"{b}\"";
1386+
1387+
var namespaceName = GetVariableName(str);
1388+
var className = GetVariableName(str);
1389+
var propertyName = GetVariableName(str);
1390+
1391+
Inject.Add($"using System;" +
1392+
$"namespace {namespaceName}" +
1393+
$"{{" +
1394+
$"public static class {className}" +
1395+
$"{{" +
1396+
$"public static string {propertyName} = \"{b}\";" +
1397+
$"}}" +
1398+
$"}}");
1399+
1400+
return $"{namespaceName}.{className}.{propertyName}";
1401+
}
13221402
}
13231403
}

0 commit comments

Comments
 (0)