diff --git a/G-Earth/pom.xml b/G-Earth/pom.xml
index fc67310..6858daa 100644
--- a/G-Earth/pom.xml
+++ b/G-Earth/pom.xml
@@ -11,7 +11,7 @@
1.0
- 12
+ 11
@@ -36,7 +36,7 @@
true
true
lib/
- gearth.J12Main
+ gearth.J11Main
false
@@ -58,7 +58,7 @@
${project.build.directory}/bin
- gearth.J12Main
+ gearth.J11Main
diff --git a/G-Earth/src/main/java/gearth/J12Main.java b/G-Earth/src/main/java/gearth/J11Main.java
similarity index 80%
rename from G-Earth/src/main/java/gearth/J12Main.java
rename to G-Earth/src/main/java/gearth/J11Main.java
index 3f17e16..7fc0e6c 100644
--- a/G-Earth/src/main/java/gearth/J12Main.java
+++ b/G-Earth/src/main/java/gearth/J11Main.java
@@ -1,6 +1,6 @@
package gearth;
-public class J12Main {
+public class J11Main {
public static void main(String[] args) {
Main.main(args);
}
diff --git a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
index eafa8e3..cfd4649 100644
--- a/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
+++ b/G-Earth/src/main/java/gearth/protocol/memory/habboclient/windows/WindowsHabboClient.java
@@ -79,7 +79,7 @@ public class WindowsHabboClient extends HabboClient {
}
}
- String g_winmem = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() + "\\G-WinMem.exe";
+ String g_winmem = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParent() + "\\G-Mem.exe";
if (!useCache)
pb = new ProcessBuilder(g_winmem, hConnection.getClientHostAndPort().substring(0, hConnection.getClientHostAndPort().indexOf(':')) , Integer.toString(hConnection.getPort()));
else
diff --git a/G-Mem/Cargo.lock b/G-Mem/Cargo.lock
index e8778c5..aee657d 100644
--- a/G-Mem/Cargo.lock
+++ b/G-Mem/Cargo.lock
@@ -2,11 +2,13 @@
# It is not intended for manual editing.
[[package]]
name = "G-Mem"
-version = "0.1.0"
+version = "0.2.0"
dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"netstat 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "procfs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "procfs 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)",
"read-process-memory 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -16,7 +18,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "autocfg"
-version = "0.1.7"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -36,12 +38,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "chrono"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -123,29 +124,29 @@ dependencies = [
[[package]]
name = "num-integer"
-version = "0.1.41"
+version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-traits"
-version = "0.2.8"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "procfs"
-version = "0.6.0"
+version = "0.7.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
"hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -220,11 +221,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[metadata]
"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
-"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
-"checksum chrono 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e8493056968583b0193c1bb04d6f7684586f3726992d6c573261941a895dbd68"
+"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
"checksum hex 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "023b39be39e3a2da62a94feb433e91e8bcd37676fbc8bea371daf52b7a769a3e"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
@@ -235,9 +236,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
"checksum mach 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "196697f416cf23cf0d3319cf5b2904811b035c82df1dfec2117fb457699bf277"
"checksum netstat 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "48b71f6e2443299ba97e8c834edcd4724be71da3a751b1be75d8b67022801bf3"
-"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
-"checksum num-traits 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "6ba9a427cfca2be13aa6f6403b0b7e7368fe982bfa16fccc450ce74c46cd9b32"
-"checksum procfs 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "911881246ca41baceae6921e32f9f5542c83713e3825b57adedb6afeb48a23a1"
+"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
+"checksum procfs 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "e767ab205e4b292ea2c8e9fa454efe7e66e35026432eef34fed7daa763136d09"
"checksum read-process-memory 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "950b829b2477880c74aaed706d681bc8d50d4e2b15b5e4d98ed33d5d4f93712e"
"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
"checksum rle-decode-fast 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cabe4fa914dec5870285fa7f71f602645da47c486e68486d2b4ceb4a343e90ac"
diff --git a/G-Mem/Cargo.toml b/G-Mem/Cargo.toml
index db58763..8b376e8 100644
--- a/G-Mem/Cargo.toml
+++ b/G-Mem/Cargo.toml
@@ -1,15 +1,32 @@
[package]
name = "G-Mem"
-version = "0.1.0"
+version = "0.2.0"
authors = ["G-Earth contributors"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
+kernel32-sys = "0.2.2"
netstat = "0.7.0"
read-process-memory = "0.1.2"
-procfs = "0.6.0"
+
+[target.'cfg(unix)'.dependencies]
+procfs = "0.7.7"
+
+[target.'cfg(windows)'.dependencies]
+winapi = {version = "0.3.8", features = ["winnt", "minwindef", "memoryapi", "sysinfoapi", "processthreadsapi"]}
[profile.dev]
-opt-level = 3
\ No newline at end of file
+opt-level = 3
+
+[profile.release]
+opt-level = 3
+debug = false
+rpath = false
+lto = false
+debug-assertions = false
+codegen-units = 16
+panic = 'unwind'
+incremental = false
+overflow-checks = false
diff --git a/G-Mem/src/main.rs b/G-Mem/src/main.rs
index 3206bbc..1b8bc2a 100644
--- a/G-Mem/src/main.rs
+++ b/G-Mem/src/main.rs
@@ -1,31 +1,26 @@
+use std::thread::JoinHandle;
+use std::{thread, io, env, mem};
+use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
+use std::sync::mpsc;
+use std::convert::TryInto;
+
+#[cfg(unix)]
+use procfs::MemoryMap;
+
use netstat::*;
use read_process_memory::*;
-use std::io;
-use std::thread;
-use std::sync::mpsc;
-use procfs::MemoryMap;
-use std::thread::JoinHandle;
-fn main() {
-// get_rc4_possibilities();
- let pid = get_proc_id() as Pid;
- get_snippet_list(get_mem_maps(pid), pid);
- print!("\n");
-}
-
-fn get_mem_maps(pid: Pid) -> Vec{
- let mut ret: Vec = Vec::new();
- let habbo_proc = procfs::Process::new(pid as i32).unwrap();
-
- let maps = habbo_proc.maps().unwrap();
-
- for map in maps {
- if map.perms == String::from("rw-p") {
- ret.push(map);
- }
- }
- return ret;
-}
+#[cfg(windows)]
+use winapi::um::winnt::{MEMORY_BASIC_INFORMATION, PMEMORY_BASIC_INFORMATION, MEM_COMMIT, PAGE_GUARD, PAGE_NOACCESS, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_READ, HANDLE};
+#[cfg(windows)]
+use winapi::um::processthreadsapi::OpenProcess;
+#[cfg(windows)]
+use winapi::um::memoryapi::VirtualQueryEx;
+#[cfg(windows)]
+use winapi::um::sysinfoapi::{SYSTEM_INFO, GetSystemInfo, LPSYSTEM_INFO};
+#[cfg(windows)]
+use winapi::shared::minwindef::LPVOID;
+use std::str::FromStr;
struct MemMap {
start: usize,
@@ -33,6 +28,47 @@ struct MemMap {
mem: Vec
}
+#[cfg(windows)]
+struct MemoryMap {
+ address: (u64, u64)
+}
+
+fn main() {
+ let args: Vec = env::args().collect();
+
+ if args.len() < 3 {
+ println!("Usage: G-Mem ");
+ return;
+ }
+ let habbo_pid = get_proc_id(args[1].clone(), args[2].parse::().unwrap());
+ get_snippet_list(get_mem_maps(habbo_pid.try_into().unwrap()), habbo_pid.try_into().unwrap());
+}
+
+
+fn read_mem(pid: Pid, address: usize, size: usize) -> io::Result> {
+ let handle = pid.try_into_process_handle()?;
+ let _bytes = copy_address(address, size, &handle)?;
+ Ok(_bytes)
+}
+
+fn get_proc_id(ip: String, port: u16) -> u32 {
+ let af_flags = AddressFamilyFlags::IPV4;
+ let proto_flags = ProtocolFlags::TCP;
+ let sockets_info = get_sockets_info(af_flags, proto_flags).unwrap();
+
+ for si in sockets_info {
+ match si.protocol_socket_info {
+ ProtocolSocketInfo::Tcp(tcp_si) => {
+ if tcp_si.remote_port == port && tcp_si.remote_addr == ip.parse::().unwrap() {
+ return si.associated_pids[0];
+ }
+ }
+ ProtocolSocketInfo::Udp(_) => {}
+ }
+ }
+ return 0;
+}
+
fn get_snippet_list(maps: Vec, pid: Pid) {
let (tx, rx) = mpsc::channel();
@@ -47,8 +83,8 @@ fn get_snippet_list(maps: Vec, pid: Pid) {
let mut match_start : i64 = -1;
let mut match_end: i64 = -1;
- let mem = read_mem(pid, map.address.0 as usize, (map.address.1 - map.address.0) as usize).
- unwrap();
+ let size = ((map.address.1 as u64) - (map.address.0 as u64)) as usize;
+ let mem = read_mem(pid, map.address.0 as usize, size).unwrap();
for (i, data) in mem.iter().step_by(4).enumerate() {
let offset = 4;
@@ -80,7 +116,7 @@ fn get_snippet_list(maps: Vec, pid: Pid) {
if match_end < (i*4 - (256 - 1) * offset) as i64 {
let m = MemMap {
- start: (map.address.0 + match_start as u64) as usize,
+ start: (map.address.0 as u64 + match_start as u64) as usize,
len: (match_end - match_start as i64 + 4) as usize,
mem: mem[match_start as usize..(match_end + 4) as usize].to_vec()
};
@@ -92,7 +128,7 @@ fn get_snippet_list(maps: Vec, pid: Pid) {
}
if match_start != -1 {
let m = MemMap {
- start: (map.address.0 + match_start as u64) as usize,
+ start: (map.address.0 as u64 + match_start as u64) as usize,
len: (match_end - match_start + 4) as usize,
mem: mem[match_start as usize..(match_end + 4) as usize].to_vec()
};
@@ -123,52 +159,83 @@ fn get_snippet_list(maps: Vec, pid: Pid) {
fn get_rc4_possibilities(snippet: MemMap) {
let offset = 4;
- if snippet.len >= 1024 && snippet.len <= 1024 + 2 * offset {
+ if snippet.len >= 1024 && snippet.len <= 1024 + 2 * offset {
- for i in (0..snippet.len - ((256 - 1) * offset)).step_by(4) {
- let wannabe_rc4_data = snippet.mem[i..1024 + i].to_vec();
- let mut data: [u8; 256] = [0xff; 256];
+ for i in (0..snippet.len - ((256 - 1) * offset)).step_by(4) {
+ let wannabe_rc4_data = snippet.mem[i..1024 + i].to_vec();
+ let mut data: [u8; 256] = [0xff; 256];
- let mut is_valid = true;
- for j in 0..1024 {
- if j % 4 != 0 && wannabe_rc4_data[j] != 0 {
- is_valid = false;
- break;
- }
- if j % 4 == 0 {
- data[j / 4] = wannabe_rc4_data[j];
- }
+ let mut is_valid = true;
+ for j in 0..1024 {
+ if j % 4 != 0 && wannabe_rc4_data[j] != 0 {
+ is_valid = false;
+ break;
}
- if is_valid == true {
- for byte in data.iter() {
- print!("{:02x}", byte);
- }
- print!("\n");
+ if j % 4 == 0 {
+ data[j / 4] = wannabe_rc4_data[j];
}
}
- }
-}
-
-
-fn read_mem(pid: Pid, address: usize, size: usize) -> io::Result> {
- let handle = pid.try_into_process_handle()?;
- let _bytes = copy_address(address, size, &handle)?;
- Ok(_bytes)
-}
-
-fn get_proc_id() -> u32 {
- let sockets_info = get_sockets_info(AddressFamilyFlags::IPV4,
- ProtocolFlags::TCP).unwrap();
- for si in sockets_info {
- match si.protocol_socket_info {
- ProtocolSocketInfo::Tcp(tcp_si) => {
- if tcp_si.remote_port == 30000 {
- return si.associated_pids[0];
+ if is_valid == true {
+ for byte in data.iter() {
+ print!("{:02x}", byte);
}
+ print!("\n");
}
- ProtocolSocketInfo::Udp(_) => {}
}
}
-
- return 0;
}
+
+#[cfg(windows)]
+fn get_handle(pid: Pid) -> HANDLE {
+ unsafe {
+ return OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_VM_OPERATION, 0, pid);
+ }
+}
+
+#[cfg(windows)]
+fn get_mem_maps(pid: Pid) -> Vec {
+
+ let mut s_info: SYSTEM_INFO = unsafe {mem::zeroed()};
+ let s_info_ptr = &mut s_info as LPSYSTEM_INFO;
+
+ let mut maps : Vec = Vec::new();
+ unsafe {
+ GetSystemInfo(s_info_ptr);
+
+ let mut addr = s_info.lpMinimumApplicationAddress;
+ let end = s_info.lpMaximumApplicationAddress;
+ let handle = get_handle(pid);
+
+
+ while (addr as u64) < (end as u64) {
+ let mut mbi: MEMORY_BASIC_INFORMATION = mem::zeroed();
+ let mbi_ptr = &mut mbi as PMEMORY_BASIC_INFORMATION;
+
+ VirtualQueryEx(handle, addr, mbi_ptr, mem::size_of::());
+
+ if mbi.State == MEM_COMMIT && ((mbi.Protect & PAGE_GUARD) == 0) && ((mbi.Protect & PAGE_NOACCESS) == 0) {
+ maps.push(MemoryMap{
+ address: (addr as u64, (addr as u64) + mbi.RegionSize as u64)
+ });
+ }
+
+ addr = (addr as u64 + mbi.RegionSize as u64) as LPVOID;
+ }
+ }
+ return maps;
+}
+
+#[cfg(unix)]
+fn get_mem_maps(pid: Pid) -> Vec{
+ let mut ret: Vec = Vec::new();
+ let habbo_proc = procfs::Process::new(pid as i32).unwrap();
+
+ let maps = habbo_proc.maps().unwrap();
+
+ for map in maps {
+ if map.perms == String::from("rw-p") {
+ ret.push(map);
+ }
+ }
+ return ret;
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 825d6d7..6cc079c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,11 +9,6 @@
pom
1.0
-
- 12
- 12
-
-
G-Earth-Parent
https://github.com/sirjonasxx/G-Earth
Cross Platform Habbo packetlogger/manipulator
@@ -35,27 +30,11 @@
maven-compiler-plugin
3.7.0
-
- 12
+
+ 11
-
-
- maven-dependency-plugin
-
-
- package
-
- copy-dependencies
-
-
- ${project.build.directory}/bin/lib
-
-
-
-
-
maven-resources-plugin
3.1.0