bool mimikatz::doCommandeKernel(std::wstring &commande) { if(!commande.empty()) { if(openKernel()) { DWORD dwReturn; if(WriteFile(Kmimikatz, commande.c_str(), (commande.size() + 1) * sizeof(wchar_t), &dwReturn, NULL)) { DWORD dwBuff = 0x40000; DWORD dwRead = 0; BYTE * buffer = new BYTE[dwBuff]; RtlZeroMemory(buffer, dwBuff); if(ReadFile(Kmimikatz, buffer, dwBuff, &dwRead, NULL)) { wcout << reinterpret_cast<wchar_t *>(buffer) << endl; } else wcout << L"ReadFile : " << mod_system::getWinError() << endl; delete[] buffer; } else wcout << L"WriteFile : " << mod_system::getWinError() << endl; } else wcout << L"Unable to communicate with the driver mimikatz"; } else { wcout << L"Empty command (forced close) received" << endl; closeKernel(); } return true; }
bool mimikatz::doCommandeKernel(std::wstring &commande) { if(!commande.empty()) { if(openKernel()) { DWORD dwReturn; /* (*outputStream) << L"DEBUG WriteFile " << endl << L"\tToWrite : " << (commande.size() + 1) * sizeof(wchar_t) << endl; */ if(WriteFile(Kmimikatz, commande.c_str(), (commande.size() + 1) * sizeof(wchar_t), &dwReturn, NULL)) { /*(*outputStream) << L"\tWriten : " << dwReturn << endl << endl;*/ DWORD dwBuff = 0x40000; DWORD dwRead = 0; BYTE * buffer = new BYTE[dwBuff]; RtlZeroMemory(buffer, dwBuff); /*(*outputStream) << L"DEBUG ReadFile " << endl << L"\tBuffSize : " << dwBuff << endl;*/ if(ReadFile(Kmimikatz, buffer, dwBuff, &dwRead, NULL)) { /*(*outputStream) << L"\tReaded : " << dwRead << endl << endl; */ wcout /*<< L"BUFF : " << endl*/ << reinterpret_cast<wchar_t *>(buffer) << endl; } else (*outputStream) << L"ReadFile : " << mod_system::getWinError() << endl; delete[] buffer; } else (*outputStream) << L"WriteFile : " << mod_system::getWinError() << endl; } else (*outputStream) << L"Impossible de communiquer avec le pilote mimikatz"; } else { (*outputStream) << L"Commande vide (fermeture forcée) reçue" << endl; closeKernel(); } return true; }