- Removed getting own WANIP before sending the No-Ip update request, it
will either way take the connecting WANIP according to
https://www.noip.com/integrate/response
Clone the Bitmap on the "UpdateImage" method. It should be the
responsibility of "UpdateImage" anyways because it is the method
responsible for specifying how to manage the Bitmap provided. This also
serves an issue where the call to clone the Bitmap and cast it to a
Bitmap object was no longer in a try-catch block as it used to be (and
should be once more).
Perfected how handling an exit command is determined.
Also removed a command to execute an "exit" command on the client
because we call "this.Close()". On FormClosing(object,
FormClosingEventArgs), we send an "exit" command anyways. Two of them
should not be sent to close the client's shell...
Added an "IsError" property to the ShellCommandResponse to denote if the
response should be handled a certain way (if it is a response to a
ShellCommand error, then print it differently).
Also correctly queues up two different threads on shell initialization.
These ManualResetEvents now will signal the Shell's redirected output to
handle either the output, or the error output. Not at the same time
(will cause deadlocking).
We now append the text instead of concatenating. Not sure how much more
efficient this is, but it is certainly more readable.
only try to remove upnp settings if the server is listening, if you have this checked, closing the form will stall for a second or two even if the server is not listening
Instead of wasting lots of time creating a string from a char array,
creating a string from another char array, concatenating them both into
a new string, and casting the keychar to a string to see if the string
contains it, make the operation natural and very efficient by creating a
new char array that has both invalid characters and making sure the
illegal character array does not contain the element.
Now we actually use the ListViewItem object we create on every iteration
instead of creating one and only passing the string property value. ~38%
speed increase each iteration on DEBUG and RELEASE configurations.
<h1>Reproduction of the issue</h1>
- Open up a keylogger form and make sure no entries are selected.
- Invoke the "ItemActivate" method by pressing enter.
- Since no items are selected, it cannot index the 0th item of lstLogs' SelectedItems, causing an exception that is uncaught and crashes the server.
Changing the way was used to calculate send/received data by reverse
proxy
-This change will view the value with decimal point (2 num) to make the
values more accurate
-Changing the func name used from "GetFileSize" to "GetDataSize" ( Found
in xServer.Core.Helper )
Added a Load Balancer, this will try balancing all the proxy connections
over multiple clients (keep refreshing ipchicken.com to see the cool
effect)
Resolve the DNS Hostname of the Target server at the Remote Client to
reduce DNS Leaks
Added FrmMain instance null check to safely exit a thread in the
FrmKeylogger form in the case of client-server disconnection. The
FrmKeylogger spawns a thread that waits for the enabled button to be set
to true, after successfully receiving all the log files from the client.
If the server were to somehow not process the button being enabled it
would hang in the while loop leaving the entire process to be left in
memory due to the thread being open.
-added hookless keylogger class with unicode support
-logs on keylogger class are saved in html format
-added keylogger form using webbrowser to load the log as an html file
-added context menu keylogger option under surveillance
-started keylogger setting enable/disable on client file execution
(didn't complete this, wasn't sure how to do it properly. just added
the setting in the settings class and in program class for the logic.
only thing left is the server side stuff)
left todo:
-encryption/decryption of logs if desired
-options to enable/disable when building client, etc...
There exists a bug, when you decline the license the server crashs. Safe
exit is not needed anyways in the terms of use form as nothing special
happend yet.
Rewrote the File Manager Form's 'lstDirectory_DoubleClick' method so it
is more clear, to prevent unnecessary strings being recreated, and
because it was making the same decision twice when it didn't need to.
Also placed the Setting Form's 'btnListen_Click' method in a try-finally
block so if anything goes wrong in the method, the state of it won't be
frozen (before, you would have to click out of the Form, discard
changes, then re-open. Perhaps it would be advisable to notify the user
of an issue with the listening if it failed...
Compacted the validation on frmBuilder's btnBuild_Click(object,
EventArgs) method. This is a slight optimization, but it does help
remove the repetitive else statements.
Fixed an issue where Remote Desktop would not work (threw infinite
InvalidOperationExceptions) because cbMonitors.SelectedIndex was trying
to be accessed on a different thread.
Moved code that gets the SelectedIndex inside the MethodInvoker.