This project is a simple remote-control tool with GUI written by Qt. It only works for Windows platform. The project still remains some bugs. One of them is: TRANSFER BIG FILE (eg. OVER 200MB) MAY CAUSE CRASH IN CLIENT. If you have any good ideas, please contact me, or open your PR. I feel honored to learn from your help.
- This project contains two parts. The SERVER , which should be executed in remote hosts, is in folder
server, and the CLIENT, is in folderclient, used to control the remote hosts. - The Visual Studio project file
remote.slnis in folderserver. I wrote this project with VS Ultimate 2013, version12.0.21005.1 REL. - The Visual Studio project file
client.slnis in folderclient. I wrote this project with Qt-windows-x86-msvc2013_64, version5.6.0. The Qt Creator is 32bits based on MSVC2013, version3.6.1. Some configurations may have relationship with the tool. - I compressed the
remote.exeandclient.exeintocompiled.tar, which can be downloaded from my cloud storage: here
- Compile: I remove the
remote.sdffrom the repository since it's too large. If you haveVS2013(or higher version), just openremote.sln, else please build a new project with other IDEs. - Assume the program we get after released is
remote.exe, it's exactly a CMD window, however, I hide the window at the entrance of functionmain(). You can change the first two lines code in functionmain()into comments, then its form will appear. Even it's hidding itself, you can stil find it byCTRL+ALT+DEL. I didn't hide the process from taskmgr. - Usage: Just run the executable file
remote.exe( you need to compile it yourself ). If you delete the code for hidding inmain.cpp, you can see it printServer run at IPv4 address <your-ip-address>.... - Attention: If you want to use
remote.exeunder x64 system, I suggest that you should compile it as x64. - Two files will be created under
E:\in remote hosts, I didn't hide these files. You can use the function provided introjan.cppwhich definition isbool hideFile(const char *path). The two files areE:\key.logandE:\screen.tmp, which will be created byremote.exewhen client ask for keyboard record or screenshots. If you want to hide them, remember to use functionhideFileto hideE:\screen.tmpwhenever you ask for screenshot. Since the new screenshot overrides the past screenshot, but the keyboard record is an append operation. - TO HIDE: I didn't do anything protecting
remote.exe, any common anti-virus software like 360 or Avira can easily kill it. Good news is the Windows Defender doesn't notice this program. To pack the server program, I recommand theiexpress, since every Windows system has it as a built-in application, and it's easy, most important. However, packer is not enough for protect this program from anti-virus software. Instead of packer, you can also use DLL-Injection( only works for Windows lower than Windows7 ), which is also provided in this repository. But, PLEASE REMEMBER SELF-DISCIPLINE. - The executable file is in
compiled.tar, you can just runremote.exeto have a look.
- Compile: I put all files needed in folder
client, if you haveQt Creator, just openclient.pro, else please build a new project with other IDEs. - The executable file is in
compiled.tar, you can just runclient.exeto have a look. - Assume the program we get after released is
client.exe, it will show you a window like this. Buttons left areRefreshandCreate. You can clickCreateto add a remote host, clickRefreshto refresh all hosts' status.
- You can right click under a remote host, several functions provided like the following picture. Since the remote host you choose is not connected yet, you cannot do any operation to the remote host before you connect it.
- After connect to a remote host such as the picture followed, you can do some basic operations to the remote host.
- Functions
- Connect/Disconnect: Build or release connections with selected remote host.
- Set IPv4 Address: Set Ipv4 address for remote host. The IPv4 address must be valid or the table won't accept.
- Modify Notes: Make notes for the selected remote host.
- Get Username: Get the remote host's username.
- Get File: Input the absolute path of file you want to get in remote host, then click
Get File. The client will ask you to confirm your operation since the client will change into disabled mode when transferring files. That means, when receiving file from remote host, you cannot operate it. Also, this function remains a serious bug, very big file (perhaps over 200MB) transmission will cause crash. Be careful when using this function, if crashed, restart the client. - Get Processes List: Get all the processes running in remote host, the client will display these information in the
QTextEdit, which is the widget with>in the last picture. That widget cannot be edited, but you can copy its content. - Get ScreenShot: Get the screenshot of remote host. After receving the screenshot, client will open it automaticly.
- Get Keyboard Record: Get the remote host's keyboard record, records will be displayed in
QTextEdittoo. - Export Logs: Export your operation history for the selected remote host to a
.logfile. - Delete: Delete the remote host from your database.
- Send Shell Command: You can input shell commands (not CMD commands, I use powershell to execute these commands) in the
QLineEditwidget, and pressEnteror clickSendto execute the commands in remote hosts. The results will displayed inQTextEdit.
- Project Configuration: Since I use
QSqlDatabaseto query and store data, a lineQt += sqlhas been added to the project fileclient.pro. - Icon Configuration: The client's icon can be changed, you just need to replace my
icon.icowith your ownicon.ico. However, my girlfriend likesV for Vendetta, I don't think other icons could be better. - Path: Several files and directories will be created when
client.exeis running, I list them below. - files: Directory for storing the files you get from remote hosts. They are stored just as they like in remote hosts. So remember when you want to get a new file from remote hosts, make sure there is no file with same name in dir
filesalready. - screenshots: Directory for storing the screenshots you get from remote hosts. They are stored with name format:
<remote-ip-address>-yyyy-MM-dd-hh-mm-ss.bmp. - logs: Logs you exported will store in this directory. Their names are same with their related ip addresses.
- data.db: The sqlite3 database we use to store all the remote hosts' informations( ip address, notes, status, names...).
- temp.tmp: Used to buffer data. Don't care about it.
- Get Processes List. As you can see, I ran
remote.exein my PC to show how the client works. It can still work well in remote hosts.
- Get KeyBoard Record. Here I hide my record in the picture.
- Get File. Here I get
G:\Backup\Wireshark-win64-2.0.0.exefrom remote host. It's 38.9 MB, and the client saves it as%PATH_TO_CLIENT%/files/Wireshark-win64-2.0.0.exe.
- After the client got the file.
- Get Screenshot. The client opens the screenshot after it received.
- Send Commands. I send
cd ..; ls; mkdir test, then the remote creates a folder namedtestin the%PATH_TO_REMOTE%/../.
- When sending big files, the client and remote server are hard to synchronizate. Temporarily, when sending data, I ask both the client and remote server waiting for a response to send next packet. Obviously it's not a correct method. So crash happened when transmitting big files.
- TODO: It should be possible that user can get remote file and do other operations at the same time. However, to achieve this function, I need to start another thread, it's not hard, but the current function is enough for temporary use, so I didn't add this part. Maybe later.
- TODO: The shell function is not very convenient, since the path
remote.exeexecutes commands is%PATH_TO_REMOTE%, and each time you want to execute a new command, the path will go back to the dir. To change the path, addcd PATHat first, and use;to append other commands.
- 2016-9-11~12: Write GUI for client, with some basic tests.
- 2016-9-14: Add
trojan.h/cpp, with basic functions includingstringToLPCWSTR,sendFile,readFileIntoBuf, etc. - 2016-9-15: Add several main functions, deal with keyboard, get screenshot, etc.
- 2016-9-16: Finish all functions, fix some bugs, improve the client. Some basic tests passed.
- 2016-9-17: Fix some problems in
README.md. - 2016-9-23: Fix links and move
compiled.tarto cloud storage. - 2016-10-7: Build repository.
All codes in this repository are licensed under the terms you may find in the file named "LICENSE" in this directory.








