diff --git a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/HabboClientFactory.java b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/HabboClientFactory.java index 1f96de9..48cba93 100644 --- a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/HabboClientFactory.java +++ b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/HabboClientFactory.java @@ -17,6 +17,8 @@ public class HabboClientFactory { if (OSValidator.isWindows()) return new WindowsHabboClient(connection); if (OSValidator.isMac()) return new MacOsHabboClient(connection); + // todo use rust if beneficial + return null; } diff --git a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/rust/RustHabboClient.java b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/rust/RustHabboClient.java new file mode 100644 index 0000000..a246b2f --- /dev/null +++ b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/rust/RustHabboClient.java @@ -0,0 +1,65 @@ +package gearth.protocol.memory.habboclient.rust; + +import gearth.protocol.HConnection; +import gearth.protocol.memory.habboclient.HabboClient; + +import java.io.BufferedReader; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; + +public class RustHabboClient extends HabboClient { + public RustHabboClient(HConnection connection) { + super(connection); + } + + @Override + public List getRC4cached() { + return new ArrayList<>(); + } + + public List getRC4possibilities() { + ArrayList possibleData = new ArrayList<>(); + + try { + String g_mem = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() + "/G-Mem"; + ProcessBuilder pb = new ProcessBuilder(g_mem, hConnection.getClientHostAndPort().substring(0, hConnection.getClientHostAndPort().indexOf(':')) , Integer.toString(hConnection.getPort())); + + + Process p = pb.start(); + BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); + + String line; + + while((line = reader.readLine()) != null) { + if (line.length() > 1) { + System.out.println("[+] " + line); + possibleData.add(line); + } + } + + } catch (URISyntaxException | IOException e) { + e.printStackTrace(); + } + + List ret = new ArrayList<>(); + + for (String possibleHexStr : possibleData) + ret.add(hexStringToByteArray(possibleHexStr)); + + return ret; + } + + private static byte[] hexStringToByteArray(String s) { + int len = s.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + + Character.digit(s.charAt(i+1), 16)); + } + return data; + } +}