Skip to content

Commit cc888e5

Browse files
committed
[bugfix] fixed issue where if there were 2 strings in one line it wouldn't encode
1 parent 3820384 commit cc888e5

File tree

11 files changed

+70
-49
lines changed

11 files changed

+70
-49
lines changed

Output.py

Lines changed: 5 additions & 5 deletions
Large diffs are not rendered by default.

assets/Classes.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Example,w3FfEMSoZGDSAcEhfDZozB
1+
Example,w3HSFklzFzqCKtRADniqNO

assets/Vars.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
test,w3zcvDodboCrfsjNQephoV
1+
test,w3ZCkzEvYgyfFPLaktvDxk

assets/test3.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
class Example():
44
def __init__(self):
5-
print("#test#") # test
5+
print("#test#" + ' asdasd') # test
66
print(random.seed(7))
77

88
test = Example()

src/main/java/org/madmeg/api/obfuscator/FindString.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
package org.madmeg.api.obfuscator;
22

3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
36
/**
47
* @author Madmegsox1
58
* @since 29/12/2021
69
*
7-
* bunch of shit code but idk
10+
* bunch of shit code, need to improve this as its very slow
811
*/
912

1013
public final class FindString {
1114
private final String line;
12-
private String foundLine;
15+
private ArrayList<String> foundLine;
1316
private int start;
1417
private final boolean keepChar;
1518

@@ -20,28 +23,38 @@ public FindString(String line, boolean keepChar){
2023
this.foundLine = find();
2124
}
2225

23-
private String find(){
24-
if(!line.contains("\"") && !line.contains("'"))return "";
26+
private ArrayList<String> find(){
27+
if(!line.contains("\"") && !line.contains("'"))return null;
2528
boolean open = false;
2629
boolean open2 = false;
2730

28-
final StringBuilder toReturn = new StringBuilder();
31+
32+
ArrayList<String> strings = new ArrayList<>();
33+
34+
35+
StringBuilder toReturn = new StringBuilder();
2936
for(int i = 0; i < line.length(); i++){
3037
final char val = line.charAt(i);
3138
if(val == '"' && !open2){
3239
open = !open;
40+
if(!open){
41+
if(keepChar) toReturn.append('"');
42+
strings.add(toReturn.toString());
43+
toReturn = new StringBuilder();
44+
}
3345
if(!keepChar) {
3446
continue;
35-
}else if(!open){
36-
toReturn.append('"');
3747
}
3848
}
3949
if(val == '\'' && !open){
4050
open2 = !open2;
51+
if(!open2){
52+
if(keepChar) toReturn.append("'");
53+
strings.add(toReturn.toString());
54+
toReturn = new StringBuilder();
55+
}
4156
if(!keepChar) {
4257
continue;
43-
}else if(!open2){
44-
toReturn.append("'");
4558
}
4659
}
4760

@@ -52,10 +65,10 @@ private String find(){
5265
toReturn.append(val);
5366
}
5467
}
55-
return toReturn.toString();
68+
return strings;
5669
}
5770

58-
public String getFoundLine() {
71+
public ArrayList<String> getFoundLine() {
5972
return foundLine;
6073
}
6174

src/main/java/org/madmeg/api/obfuscator/tasks/TaskFactory.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ public void poolTasks(){
2424
if(Core.CONFIG.isRemoveComments()){
2525
this.queueTask(new RemoveComments(Loader.FILE));
2626
}
27+
if(Core.CONFIG.isEncodeStrings()){
28+
this.queueTask(new EncodeString(Loader.FILE));
29+
}
2730
if(Core.CONFIG.isEncodeImports()){
2831
this.queueTask(new EncodeImports(Loader.FILE));
2932
}
@@ -39,9 +42,6 @@ public void poolTasks(){
3942
if(Core.CONFIG.isInsertGarbage()){
4043
this.queueTask(new AddGarbage(Loader.FILE));
4144
}
42-
if(Core.CONFIG.isEncodeStrings()){
43-
this.queueTask(new EncodeString(Loader.FILE));
44-
}
4545
if(Core.CONFIG.isEncodeCode()){
4646
//this.queueTask(new EncodeCode(Loader.FILE));
4747
}

src/main/java/org/madmeg/impl/tasks/EncodeString.java

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import java.util.ArrayList;
1010
import java.util.HashMap;
1111
import java.util.Map;
12-
import java.util.Objects;
1312

1413
/**
1514
* @author Madmegsox1
@@ -31,28 +30,37 @@ public void completeTask() {
3130
int i = 0;
3231
Map<Integer, String> renameMap = new HashMap<>();
3332
for(String line : lines){
33+
3434
final FindString findString = new FindString(line, true);
3535
final FindString replaceString = new FindString(line, false);
36-
if(Objects.equals(findString.getFoundLine(), "")){
36+
37+
if(findString.getFoundLine() == null || findString.getFoundLine().isEmpty()){
3738
i++;
3839
continue;
3940
}
40-
String encoded = "";
41-
switch (Core.CONFIG.getEncoderType().toLowerCase()){
42-
case "hex" -> encoded = "(bytes.fromhex(('" + (EncodingUtils.stringToHex(replaceString.getFoundLine()).replaceFirst("^0*", "")) + "').replace('', ''))).decode('utf-8')";
43-
case "base64" -> encoded = "base64.b64decode('" + (EncodingUtils.stringToBase64(replaceString.getFoundLine())) + "')";
44-
case "bin" -> {
45-
encoded = "''.join(chr(int(('";
46-
encoded += (EncodingUtils.prettyBinary(EncodingUtils.stringToBinary(replaceString.getFoundLine()), 8, Core.CONFIG.getBinarySplitter()));
47-
encoded += "').replace('" + Core.CONFIG.getBinarySplitter() + "', '')";
48-
encoded += "[i*0x0008:i*0x0008+0x0008],(0x0003 - 0x0001))) for i in range(len(('";
49-
encoded += (EncodingUtils.prettyBinary(EncodingUtils.stringToBinary(replaceString.getFoundLine()), 8, Core.CONFIG.getBinarySplitter()));
50-
encoded += "').replace('" + Core.CONFIG.getBinarySplitter() + "', ''))";
51-
encoded += "//(0x0004 + 0x0004)))";
41+
42+
int x = 0;
43+
for(String s : findString.getFoundLine()){
44+
String encoded = "";
45+
switch (Core.CONFIG.getEncoderType().toLowerCase()){
46+
case "hex" -> encoded = "(bytes.fromhex(('" + (EncodingUtils.stringToHex(replaceString.getFoundLine().get(x)).replaceFirst("^0*", "")) + "').replace('', ''))).decode('utf-8')";
47+
case "base64" -> encoded = "base64.b64decode('" + (EncodingUtils.stringToBase64(replaceString.getFoundLine().get(x))) + "')";
48+
case "bin" -> {
49+
encoded = "''.join(chr(int(('";
50+
encoded += (EncodingUtils.prettyBinary(EncodingUtils.stringToBinary(replaceString.getFoundLine().get(x)), 8, Core.CONFIG.getBinarySplitter()));
51+
encoded += "').replace('" + Core.CONFIG.getBinarySplitter() + "', '')";
52+
encoded += "[i*0x0008:i*0x0008+0x0008],(0x0003 - 0x0001))) for i in range(len(('";
53+
encoded += (EncodingUtils.prettyBinary(EncodingUtils.stringToBinary(replaceString.getFoundLine().get(x)), 8, Core.CONFIG.getBinarySplitter()));
54+
encoded += "').replace('" + Core.CONFIG.getBinarySplitter() + "', ''))";
55+
encoded += "//(0x0004 + 0x0004)))";
56+
}
5257
}
58+
x++;
59+
line = line.replace(s, encoded);
5360
}
54-
renameMap.put(i, line.replace(findString.getFoundLine(), encoded));
5561

62+
63+
renameMap.put(i, line);
5664
i++;
5765
}
5866

src/main/java/org/madmeg/impl/tasks/RemoveComments.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ public void completeTask() {
3535
}
3636
final FindString findString = new FindString(line, false); // shit fix
3737
boolean removedString = false;
38-
if(findString.getFoundLine().contains("#")){
39-
line = line.replace(findString.getFoundLine(), "[+|---|.]");
38+
if(findString.getFoundLine() != null && findString.getFoundLine().get(0).contains("#")){
39+
line = line.replace(findString.getFoundLine().get(0), "[+|---|.]");
4040
removedString = true;
4141
}
4242

4343
line = line.split("#")[0];
4444
if(removedString){
45-
line = line.replace("[+|---|.]", findString.getFoundLine());
45+
line = line.replace("[+|---|.]", findString.getFoundLine().get(0));
4646
}
4747
newLines.put(i, line);
4848
i++;

src/main/java/org/madmeg/impl/tasks/RenameClass.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ private void findRef(Collection<RenameObject> renameObject){
7878

7979
final FindString findString = new FindString(line, false); // shit fix
8080
boolean removedString = false;
81-
if(findString.getFoundLine().contains(name.getOldName() + "()")){
82-
line = line.replace(findString.getFoundLine(), "[+|---|.]");
81+
if(findString.getFoundLine() != null && findString.getFoundLine().get(0).contains(name.getOldName() + "()")){
82+
line = line.replace(findString.getFoundLine().get(0), "[+|---|.]");
8383
removedString = true;
8484
}
8585

@@ -88,7 +88,7 @@ private void findRef(Collection<RenameObject> renameObject){
8888
line = line.replaceAll(name.getOldName(), name.getNewName() + "()" + ((oldLine[1].contains(":")) ? ":" : ""));
8989

9090
if(removedString){
91-
line = line.replace("[+|---|.]", findString.getFoundLine());
91+
line = line.replace("[+|---|.]", findString.getFoundLine().get(0));
9292
}
9393
map.put(i, line);
9494
i++;

src/main/java/org/madmeg/impl/tasks/RenameFunction.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,8 @@ private void findRef(Collection<RenameObject> renameObject){
8585

8686
final FindString findString = new FindString(line, false); // shit fix
8787
boolean removedString = false;
88-
if(findString.getFoundLine().contains(name.getOldName() + "()")){
89-
line = line.replace(findString.getFoundLine(), "[+|---|.]");
88+
if(findString.getFoundLine() != null && findString.getFoundLine().get(0).contains(name.getOldName() + "()")){
89+
line = line.replace(findString.getFoundLine().get(0), "[+|---|.]");
9090
removedString = true;
9191
}
9292

@@ -95,7 +95,7 @@ private void findRef(Collection<RenameObject> renameObject){
9595
line = line.replaceAll(name.getOldName(), name.getNewName() + "()" + ((oldLine[1].contains(":")) ? ":" : ""));
9696

9797
if(removedString){
98-
line = line.replace("[+|---|.]", findString.getFoundLine());
98+
line = line.replace("[+|---|.]", findString.getFoundLine().get(0));
9999
}
100100
map.put(i, line);
101101
i++;

0 commit comments

Comments
 (0)