diff --git a/src/main/protocol/memory/Rc4Obtainer.java b/src/main/protocol/memory/Rc4Obtainer.java index bf6d571..355bf02 100644 --- a/src/main/protocol/memory/Rc4Obtainer.java +++ b/src/main/protocol/memory/Rc4Obtainer.java @@ -1,18 +1,16 @@ package main.protocol.memory; -import main.Cacher; -import main.protocol.HConnection; -import main.protocol.HMessage; import main.protocol.HPacket; import main.protocol.crypto.RC4; +import main.protocol.memory.habboclient.HabboClient; +import main.protocol.memory.habboclient.HabboClientFactory; +import main.protocol.memory.habboclient.linux.LinuxHabboClient; import main.protocol.packethandler.IncomingHandler; import main.protocol.packethandler.OutgoingHandler; import main.protocol.packethandler.PayloadBuffer; import java.util.Arrays; import java.util.List; -import java.util.Random; -import java.util.function.Consumer; public class Rc4Obtainer { @@ -23,7 +21,7 @@ public class Rc4Obtainer { IncomingHandler incomingHandler = null; public Rc4Obtainer() { - client = HabboClient.create(); + client = HabboClientFactory.get(); } private boolean hashappened1 = false; diff --git a/src/main/protocol/memory/habboclient/HabboClient.java b/src/main/protocol/memory/habboclient/HabboClient.java new file mode 100644 index 0000000..a013873 --- /dev/null +++ b/src/main/protocol/memory/habboclient/HabboClient.java @@ -0,0 +1,11 @@ +package main.protocol.memory.habboclient; + +import java.util.List; + +/** + * Created by Jonas on 13/06/18. + */ +public interface HabboClient { + + List getRC4possibilities(); +} diff --git a/src/main/protocol/memory/habboclient/HabboClientFactory.java b/src/main/protocol/memory/habboclient/HabboClientFactory.java new file mode 100644 index 0000000..09b4707 --- /dev/null +++ b/src/main/protocol/memory/habboclient/HabboClientFactory.java @@ -0,0 +1,19 @@ +package main.protocol.memory.habboclient; + +import main.OSValidator; +import main.protocol.memory.habboclient.linux.LinuxHabboClient; + +/** + * Created by Jonas on 13/06/18. + */ +public class HabboClientFactory { + + + public static HabboClient get() { + if (OSValidator.isUnix()) return new LinuxHabboClient(); + + return null; + } + + +} diff --git a/src/main/protocol/memory/HabboClient.java b/src/main/protocol/memory/habboclient/linux/LinuxHabboClient.java similarity index 81% rename from src/main/protocol/memory/HabboClient.java rename to src/main/protocol/memory/habboclient/linux/LinuxHabboClient.java index 277ee66..2406f20 100644 --- a/src/main/protocol/memory/HabboClient.java +++ b/src/main/protocol/memory/habboclient/linux/LinuxHabboClient.java @@ -1,10 +1,12 @@ -package main.protocol.memory; +package main.protocol.memory.habboclient.linux; + +import main.protocol.memory.habboclient.HabboClient; import java.io.*; import java.nio.file.Files; import java.util.*; -public class HabboClient { +public class LinuxHabboClient implements HabboClient { private static final String[] potentialProcessNames = {"--ppapi-flash-args", "plugin-container"}; @@ -14,9 +16,10 @@ public class HabboClient { private static final boolean DEBUG = false; - static HabboClient create() { + public LinuxHabboClient() { File folder = new File("/proc"); - HabboClient client = null; + + boolean found = false; do { File[] fileList = folder.listFiles(); @@ -31,18 +34,18 @@ public class HabboClient { } } if (isHabboProcess) { - client = new HabboClient(); - client.PID = Integer.parseInt(file.getName()); - client.maps = new ArrayList<>(); + this.PID = Integer.parseInt(file.getName()); + this.maps = new ArrayList<>(); + found = true; } } } - } while (client == null); + } while (!found); - - if (DEBUG) System.out.println("* Found flashclient process: " + client.PID); - return client; + if (DEBUG) System.out.println("* Found flashclient process: " + PID); } + + private void refreshMemoryMaps() { String filename = "/proc/"+this.PID+"/maps"; BufferedReader reader; @@ -76,25 +79,25 @@ public class HabboClient { if (DEBUG) System.out.println("* Found memory maps (amount: " + maps.size() + ")"); } - private static List createMemorySnippetList (List maps) { - List result = new ArrayList<>(); + private static List createMemorySnippetList (List maps) { + List result = new ArrayList<>(); for (long[] map : maps) { long begin = map[0]; long end = map[1]; - MemorySnippet snippet = new MemorySnippet(begin, new byte[(int)(end - begin)] ); + LinuxMemorySnippet snippet = new LinuxMemorySnippet(begin, new byte[(int)(end - begin)] ); result.add(snippet); } return result; } - private void fetchMemory(List snippets) { - for (MemorySnippet snippet : snippets) { + private void fetchMemory(List snippets) { + for (LinuxMemorySnippet snippet : snippets) { fetchMemory(snippet); } } - private void fetchMemory(MemorySnippet snippet) { + private void fetchMemory(LinuxMemorySnippet snippet) { String memoryPath = "/proc/" + PID + "/mem"; long begin = snippet.offset; try { @@ -129,15 +132,15 @@ public class HabboClient { } - List getRC4possibilities() { + public List getRC4possibilities() { int offset = 4; - List possibilities = createMemorySnippetListForRC4(); + List possibilities = createMemorySnippetListForRC4(); fetchMemory(possibilities); List resultSet = new ArrayList<>(); - for (MemorySnippet snippet : possibilities) { + for (LinuxMemorySnippet snippet : possibilities) { if (snippet.getData().length >= 1024 && snippet.getData().length <= 1024+2*offset) { for (int i = 0; i < (snippet.getData().length - ((256 - 1) * offset)); i+=offset) { byte[] wannabeRC4data = Arrays.copyOfRange(snippet.getData(), i, 1025 + i); @@ -150,14 +153,14 @@ public class HabboClient { return resultSet; } - private List createMemorySnippetListForRC4() { + private List createMemorySnippetListForRC4() { int offset = 4; refreshMemoryMaps(); String memoryPath = "/proc/" + PID + "/mem"; - List result = new ArrayList<>(); + List result = new ArrayList<>(); for (long[] map : maps) { long start = map[0]; long end = map[1]; @@ -215,7 +218,7 @@ public class HabboClient { } if (matchEnd < i - ((256 - 1) * offset)) { - result.add(new MemorySnippet(start + matchStart, new byte[matchEnd - matchStart + 4])); + result.add(new LinuxMemorySnippet(start + matchStart, new byte[matchEnd - matchStart + 4])); matchStart = i - ((256 - 1) * offset); } matchEnd = i; @@ -224,7 +227,7 @@ public class HabboClient { } if (matchStart != -1) { - result.add(new MemorySnippet(start + matchStart, new byte[matchEnd - matchStart + 4])); + result.add(new LinuxMemorySnippet(start + matchStart, new byte[matchEnd - matchStart + 4])); } } return result; diff --git a/src/main/protocol/memory/MemorySnippet.java b/src/main/protocol/memory/habboclient/linux/LinuxMemorySnippet.java similarity index 60% rename from src/main/protocol/memory/MemorySnippet.java rename to src/main/protocol/memory/habboclient/linux/LinuxMemorySnippet.java index aca539a..84b4b05 100644 --- a/src/main/protocol/memory/MemorySnippet.java +++ b/src/main/protocol/memory/habboclient/linux/LinuxMemorySnippet.java @@ -1,10 +1,10 @@ -package main.protocol.memory; +package main.protocol.memory.habboclient.linux; -public class MemorySnippet { +public class LinuxMemorySnippet { long offset; byte[] data; - public MemorySnippet(long offset, byte[] data) { + public LinuxMemorySnippet(long offset, byte[] data) { this.offset = offset; this.data = data; }