root/honeyclient/branches/rel/1.0/Capture2/capture-client-xeno-mod/Logger.cpp

Revision 881, 3.9 kB (checked in by xkovah, 1 year ago)

adding all the changes for the new DB schema (revert to the prev if there are problems)

Line 
1 #include "Logger.h"
2
3 Logger::Logger(void)
4 {
5     fileOpen = false;
6     hLog = INVALID_HANDLE_VALUE;
7 }
8
9 Logger::~Logger(void)
10 {
11     instanceCreated = false;
12 }
13
14 Logger*
15 Logger::getInstance()
16 {
17     if(!instanceCreated)
18     {
19         logger = new Logger();
20         instanceCreated = true;
21     }
22     return logger;
23 }
24
25 char*
26 Logger::convertToMultiByteString(wstring* message, size_t* charsConverted)
27 {
28     *charsConverted = 0;
29     int length = static_cast<int>(message->length());
30     int mbsize = WideCharToMultiByte(CP_UTF8, 0, message->c_str(), length, NULL, 0, NULL, NULL);
31     if (mbsize > 0)
32     {
33         char* szMessage = (char*)malloc(mbsize);
34         int bytes = WideCharToMultiByte(CP_UTF8, 0, message->c_str(), length, szMessage, mbsize, NULL, NULL);
35         if(bytes == 0)
36         {
37             DebugPrint(L"Logger-convertToMultiByteString: WideCharToMultiByte ERROR - %08x allocated: %i\n", GetLastError(), mbsize);
38         }
39         *charsConverted = bytes;
40         return szMessage;
41     } else {
42         DebugPrint(L"Logger-convertToMultiByteString: WideCharToMultiByte ERROR - %08x allocated: %i\n", GetLastError(), mbsize);
43     }
44     return NULL;
45 }
46
47 void
48 Logger::writeSystemEventToLog(wstring* type, wstring* time,
49                               wstring* process, wstring* action,
50                               wstring* object, vector<wstring>* extra)
51 {
52     if(isFileOpen())
53     {
54         wstring message = L"\"";
55         if(type->compare(L"process") == 0){
56             message += *time;
57             message += L"\",\"";
58             message += *type;
59             message += L"\",\"";
60             message += *action;
61             message += L"\",\"";
62             message += extra->at(0); //Parent process ID
63             message += L"\",\"";
64             message += *process;
65             message += L"\",\"";
66             message += extra->at(1); //Child process ID
67             message += L"\",\"";
68             message += *object;
69         }
70         else if (type->compare(L"registry") == 0){
71             message += *time;
72             message += L"\",\"";
73             message += *type;
74             message += L"\",\"";
75             message += *action;
76             message += L"\",\"";
77             message += extra->at(0); //process ID
78             message += L"\",\"";
79             message += *process;
80             message += L"\",\"";
81             message += *object;
82             vector<wstring>::const_iterator itr = extra->begin();
83             itr++;
84             for(itr; itr != extra->end(); itr++ ) {
85                 message += L"\",\"";
86                 message += *itr;
87             }
88         }
89         else if (type->compare(L"file") == 0) {
90             message += *time;
91             message += L"\",\"";
92             message += *type;
93             message += L"\",\"";
94             message += *action;
95             message += L"\",\"";
96             message += extra->at(0); //process ID
97             message += L"\",\"";
98             message += *process;
99             message += L"\",\"";
100             message += *object;
101         }
102         else{
103             message += L"UNKNOWN EVENT TYPE IN writeSystemEventToLog()";
104         }
105         message += L"\"\r\n";
106
107         writeToLog(&message);
108     }
109 }
110
111 void 
112 Logger::writeToLog(wstring* message)
113 {
114     if(isFileOpen())
115     {
116         size_t charsConverted;
117         char* szMessage = convertToMultiByteString(message, &charsConverted);
118         if(szMessage != NULL)
119         {
120             DWORD bytesWritten;
121             WriteFile(
122                 hLog,
123                 szMessage,
124                 static_cast<unsigned long>(charsConverted), // Ignore null charater
125                 &bytesWritten,
126                 NULL
127                 );
128
129             free(szMessage);
130         }
131     }
132 }
133
134 void
135 Logger::openLogFile(wstring file)
136 {
137     if(!isFileOpen())
138     {
139         wchar_t* szFullPath = new wchar_t[4096];
140         wchar_t* pFileName;
141         GetFullPathName(
142             file.c_str(),
143             4096,
144             szFullPath,
145             &pFileName
146         );
147         logFullPath = szFullPath;
148         logFileName = pFileName;
149         std::transform(logFullPath.begin(),logFullPath.end(),logFullPath.begin(), towlower);
150         hLog = CreateFile(
151                     szFullPath,
152                     GENERIC_WRITE,
153                     FILE_SHARE_READ,
154                     NULL,
155                     CREATE_ALWAYS,
156                     FILE_ATTRIBUTE_NORMAL,
157                     NULL
158                     );
159         if(hLog != INVALID_HANDLE_VALUE)
160         {
161             DebugPrint(L"Logger-openLogFile: Log file successfully opened - %ls\n", szFullPath);
162             fileOpen = true;
163         } else {
164             printf("Logger: ERROR %08x - Could not open log file %ls\n", GetLastError(), szFullPath);
165         }
166         delete [] szFullPath;
167     }
168 }
169
170 void
171 Logger::closeLogFile()
172 {
173     if(isFileOpen())
174     {
175         CloseHandle(hLog);
176         fileOpen = false;
177     }
178 }
Note: See TracBrowser for help on using the browser.