diff --git a/G-WinMem/G-WinMem/G-WinMem.cpp b/G-WinMem/G-WinMem/G-WinMem.cpp
index a7ea953..826e0b0 100644
Binary files a/G-WinMem/G-WinMem/G-WinMem.cpp and b/G-WinMem/G-WinMem/G-WinMem.cpp differ
diff --git a/G-WinMem/G-WinMem/G-WinMem.vcxproj b/G-WinMem/G-WinMem/G-WinMem.vcxproj
index 5813a25..862b848 100644
--- a/G-WinMem/G-WinMem/G-WinMem.vcxproj
+++ b/G-WinMem/G-WinMem/G-WinMem.vcxproj
@@ -104,6 +104,7 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
+ stdcpp17
Console
diff --git a/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java b/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java
index 9a23016..969bf2b 100644
--- a/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java
+++ b/src/main/protocol/memory/habboclient/windows/WindowsHabboClient.java
@@ -1,208 +1,27 @@
package main.protocol.memory.habboclient.windows;
-//import com.sun.jna.Memory;
-//import com.sun.jna.Native;
-//import com.sun.jna.Pointer;
-//import com.sun.jna.platform.win32.Kernel32;
-//import com.sun.jna.platform.win32.User32;
-//import com.sun.jna.platform.win32.WinBase;
-//import com.sun.jna.platform.win32.WinNT;
-//import com.sun.jna.ptr.IntByReference;
-import com.sun.jna.Memory;
-import com.sun.jna.Native;
-import com.sun.jna.Pointer;
-import com.sun.jna.platform.win32.*;
-import com.sun.jna.ptr.IntByReference;
-import com.sun.jna.win32.StdCallLibrary;
import main.protocol.HConnection;
import main.protocol.memory.habboclient.HabboClient;
import javax.xml.bind.DatatypeConverter;
-import java.io.*;
-import java.lang.reflect.Array;
+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.HashMap;
-import java.util.HashSet;
-import java.util.List;
-
+import java.util.*;
/**
* Created by Jeunez on 27/06/2018.
*/
-
-/*
- * not functional class
- */
-
public class WindowsHabboClient extends HabboClient {
public WindowsHabboClient(HConnection connection) {
super(connection);
}
- private static final boolean DEBUG = false;
- private List possibleFlashTasks;
-
- static Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32",Kernel32.class);
- static User32 user32 = (User32) Native.loadLibrary("user32", User32.class);
-
- public static int PROCESS_VM_READ= 0x0010;
- public static int PROCESS_VM_WRITE = 0x0020;
- public static int PROCESS_VM_OPERATION = 0x0008;
-
- static class WindowsTask {
- public String name;
- public int PID;
- public String session_name;
- public int sessionNumber;
- public int mem_usage;
-
- public WindowsTask(String name, int PID, String sessions_name, int sessionNumber, int mem_usage) {
- this.name = name;
- this.PID = PID;
- this.session_name = sessions_name;
- this.sessionNumber = sessionNumber;
- this.mem_usage = mem_usage;
- }
-
- @Override
- public String toString() {
- return "name: " + name + ", PID: " + PID + ", memory: " + mem_usage;
- }
- }
-
- private static List execute_command(String command) {
- List result = new ArrayList<>();
- try {
- Process process = Runtime.getRuntime().exec(command);
- BufferedReader reader=new BufferedReader( new InputStreamReader(process.getInputStream()));
- String s;
- while ((s = reader.readLine()) != null){
- result.add(s);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- return result;
- }
- private static List splitStringExtra(String s, String regex ) {
- String[] split = s.split(regex);
-
- List realSplit = new ArrayList<>();
- for (String spli : split) {
- if (!spli.equals("") && !spli.equals(" ")) {
- realSplit.add(spli);
- }
- }
-
- return realSplit;
- }
- private static List parseTaskList(List lines) {
- List windowsTasks = new ArrayList<>();
-
- final int ARG_COUNT = 5;
- boolean listHasStarted = false;
- int[] paramLengths = new int[ARG_COUNT];
- for (String line : lines) {
-
- if (!listHasStarted && line.startsWith("=")) {
- List splitted = splitStringExtra(line, " ");
- if (splitted.size() == ARG_COUNT) {
- listHasStarted = true;
- for (int i = 0; i < ARG_COUNT; i++) {
- paramLengths[i] = splitted.get(i).length();
- }
- }
- }
- else if (listHasStarted && splitStringExtra(line, " ").size() >= 5) {
- int v = 0;
- String[] args = new String[ARG_COUNT];
- for (int i = 0; i < ARG_COUNT; i++) {
- int endindex = v + paramLengths[i];
- args[i] = trim(line.substring(v, endindex));
- v = endindex + 1;
- }
-
- WindowsTask task = new WindowsTask(
- args[0],
- Integer.parseInt(args[1]),
- args[2],
- Integer.parseInt(args[3]),
- obtainMemorySizeFromCMDString(args[4])
- );
-
- windowsTasks.add(task);
- }
-
- }
-
- return windowsTasks;
- }
- private static String trim(String s) {
- int start = 0;
- for (int i = 0; i < s.length(); i++) {
- if (s.charAt(i) == ' ') start++;
- else break;
- }
-
- int end = s.length();
- for (int i = s.length() - 1; i >= 0; i--) {
- if (s.charAt(i) == ' ') end--;
- else break;
- }
-
- return s.substring(start, end);
- }
- private static int obtainMemorySizeFromCMDString(String s) {
- s = s.replaceAll("[^0-9A-Z]","")
- .replace("K","000")
- .replace("M", "000000")
- .replace("G", "000000000");
- return Integer.parseInt(s);
- }
-
- private void obtain_PIDs() {
- int headPID = -1;
-
- String command1 = "cmd /C netstat -a -o -n | findstr "+hConnection.getClientHostAndPort()+" | findstr ESTABLISHED";
- List connections = execute_command(command1);
- for (String s : connections) {
- List realSplit = splitStringExtra(s, " ");
-
- if (realSplit.size() > 1 && realSplit.get(1).equals(hConnection.getClientHostAndPort())) {
- headPID = Integer.parseInt(realSplit.get(4));
- }
- }
-
-
-
- String command2 = "cmd /C tasklist";
- List tasks = execute_command(command2);
- List taskList = parseTaskList(tasks);
-
- WindowsTask matchWithPID = null;
- int i = 0;
- while (matchWithPID == null && i < taskList.size()) {
- WindowsTask task = taskList.get(i);
- if (task.PID == headPID) {
- matchWithPID = task;
- }
- i++;
- }
-
- possibleFlashTasks = new ArrayList<>();
- if (matchWithPID != null) {
- for (WindowsTask task : taskList) {
- if (task.name.equals(matchWithPID.name)) {
- possibleFlashTasks.add(task);
- }
- }
- }
- }
-
private ArrayList readPossibleBytes() throws IOException, URISyntaxException {
- ProcessBuilder pb = new ProcessBuilder(new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() + "\\G-WinMem.exe");
+ ProcessBuilder pb = new ProcessBuilder(new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() + "\\G-WinMem.exe", hConnection.getClientHostAndPort().substring(0, hConnection.getClientHostAndPort().indexOf(':')) , Integer.toString(hConnection.getPort()));
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
@@ -221,7 +40,6 @@ public class WindowsHabboClient extends HabboClient {
@Override
public List getRC4possibilities() {
- System.out.println("Getting Win Possibilities");
List result = new ArrayList<>();
try {
Thread.sleep(3000);
@@ -234,127 +52,5 @@ public class WindowsHabboClient extends HabboClient {
e.printStackTrace();
}
return result;
-
- /*
-
- enableDebugPrivilege();
- obtain_PIDs();
-
- List possibilities = new ArrayList<>();
-
- int[] count = {0};
- for (int i = 0; i < possibleFlashTasks.size(); i++) {
- WindowsTask task = possibleFlashTasks.get(i);
- if (DEBUG) System.out.println("Potential task " + task);
-
- new Thread(() -> {
- List sublist = getRC4possibilities(task.PID, task.mem_usage);
-
- synchronized (count) {
- possibilities.addAll(sublist);
- count[0] ++;
- }
-
- }).start();
- }
-
- while (count[0] != possibleFlashTasks.size() + 1) { // the +1 is temporary, to keep this function blocking untill it's functional
- try {
- Thread.sleep(1);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
-
- return possibilities;
- */
}
-
- public List getRC4possibilities(int processID, int processMemorySize) {
- List result = new ArrayList<>();
-
- WinNT.HANDLE process = kernel32.OpenProcess(PROCESS_VM_READ|PROCESS_VM_OPERATION, true, processID);
-
- Memory out = new Memory(processMemorySize);
- IntByReference t = new IntByReference();
- kernel32.ReadProcessMemory(process, process.getPointer(), out, processMemorySize, t);
-
-
- System.out.println("read " + t.getValue());
-
-
- int[] counter = new int[256];
- int p = 0;
- while (p < out.size()) {
- counter[((out.getByte(p)) + 256) % 256] ++;
- p += 4;
- }
-
- HashMap> mapper = new HashMap<>();
- HashSet allvalues = new HashSet<>();
- for (int i = 0; i < counter.length; i++) {
- if (!mapper.containsKey(counter[i])) {
- mapper.put(counter[i], new ArrayList<>());
- }
- mapper.get(counter[i]).add(i);
- allvalues.add(counter[i]);
- }
-// System.out.println(allvalues.size());
- ArrayList allvalues2 = new ArrayList<>(allvalues);
- allvalues2.sort(Integer::compareTo);
-
- StringBuilder sttt = new StringBuilder();
- sttt.append("process ").append(processID).append(", ");
- for (int i = 1; i < Math.min(4, allvalues2.size()+1); i++) {
- int occ = allvalues2.get(allvalues2.size() - i);
- sttt .append(i)
- .append(": ")
- .append(mapper.get(occ).get(0))
- .append(" with ")
- .append(occ)
- .append(" occurences, ");
- }
- System.out.println(sttt);
-
-
-
-
-
-
- System.out.println(process.getPointer());
-
- return result;
- }
-
- private static void enableDebugPrivilege() {
- WinNT.HANDLEByReference hToken = new WinNT.HANDLEByReference();
- boolean success = Advapi32.INSTANCE.OpenProcessToken(Kernel32.INSTANCE.GetCurrentProcess(),
- WinNT.TOKEN_QUERY | WinNT.TOKEN_ADJUST_PRIVILEGES, hToken);
- if (!success) {
- System.out.println("OpenProcessToken failed. Error: {}" + Native.getLastError());
- return;
- }
- WinNT.LUID luid = new WinNT.LUID();
- success = Advapi32.INSTANCE.LookupPrivilegeValue(null, WinNT.SE_DEBUG_NAME, luid);
- if (!success) {
- System.out.println("LookupprivilegeValue failed. Error: {}" + Native.getLastError());
- return;
- }
- WinNT.TOKEN_PRIVILEGES tkp = new WinNT.TOKEN_PRIVILEGES(1);
- tkp.Privileges[0] = new WinNT.LUID_AND_ATTRIBUTES(luid, new WinDef.DWORD(WinNT.SE_PRIVILEGE_ENABLED));
- success = Advapi32.INSTANCE.AdjustTokenPrivileges(hToken.getValue(), false, tkp, 0, null, null);
- if (!success) {
- System.out.println("AdjustTokenPrivileges failed. Error: {}" + Native.getLastError());
- }
- Kernel32.INSTANCE.CloseHandle(hToken.getValue());
- }
-
- public static void main(String[] args) {
- String command2 = "cmd /C tasklist";
- List tasks = execute_command(command2);
- List taskList = parseTaskList(tasks);
-
- System.out.println("t");
- }
-
-}
+}
\ No newline at end of file