mirror of https://github.com/tp4a/teleport
139 lines
3.3 KiB
C++
139 lines
3.3 KiB
C++
// #include <unistd.h>
|
||
#include "ts_utils.h"
|
||
|
||
#include <WinCrypt.h>
|
||
|
||
#pragma comment(lib, "Crypt32.lib")
|
||
|
||
//connect to console:i:%d
|
||
//compression:i:1
|
||
//bitmapcachepersistenable:i:1
|
||
|
||
// https://www.donkz.nl/overview-rdp-file-settings/
|
||
//
|
||
// authentication level:i:2\n
|
||
//
|
||
//
|
||
// negotiate security layer:i:1\n
|
||
// 0 = negotiation is not enabled and the session is started by using Secure Sockets Layer (SSL).
|
||
// 1 = negotiation is enabled and the session is started by using x.224 encryption.
|
||
|
||
|
||
//redirectdirectx:i:0\n\
|
||
//prompt for credentials on client:i:0\n\
|
||
|
||
std::string rdp_content = "\
|
||
administrative session:i:%d\n\
|
||
screen mode id:i:%d\n\
|
||
use multimon:i:0\n\
|
||
desktopwidth:i:%d\n\
|
||
desktopheight:i:%d\n\
|
||
session bpp:i:16\n\
|
||
winposstr:s:0,1,%d,%d,%d,%d\n\
|
||
bitmapcachepersistenable:i:1\n\
|
||
bitmapcachesize:i:32000\n\
|
||
compression:i:1\n\
|
||
keyboardhook:i:2\n\
|
||
audiocapturemode:i:0\n\
|
||
videoplaybackmode:i:1\n\
|
||
connection type:i:7\n\
|
||
networkautodetect:i:1\n\
|
||
bandwidthautodetect:i:1\n\
|
||
disableclipboardredirection:i:0\n\
|
||
displayconnectionbar:i:1\n\
|
||
enableworkspacereconnect:i:0\n\
|
||
disable wallpaper:i:1\n\
|
||
allow font smoothing:i:0\n\
|
||
allow desktop composition:i:0\n\
|
||
disable full window drag:i:1\n\
|
||
disable menu anims:i:1\n\
|
||
disable themes:i:1\n\
|
||
disable cursor setting:i:1\n\
|
||
full address:s:%s:%d\n\
|
||
audiomode:i:0\n\
|
||
redirectprinters:i:0\n\
|
||
redirectcomports:i:0\n\
|
||
redirectsmartcards:i:0\n\
|
||
redirectclipboard:i:%d\n\
|
||
redirectposdevices:i:0\n\
|
||
autoreconnection enabled:i:0\n\
|
||
authentication level:i:2\n\
|
||
prompt for credentials:i:0\n\
|
||
negotiate security layer:i:1\n\
|
||
remoteapplicationmode:i:0\n\
|
||
alternate shell:s:\n\
|
||
shell working directory:s:\n\
|
||
gatewayhostname:s:\n\
|
||
gatewayusagemethod:i:4\n\
|
||
gatewaycredentialssource:i:4\n\
|
||
gatewayprofileusagemethod:i:0\n\
|
||
promptcredentialonce:i:0\n\
|
||
gatewaybrokeringtype:i:0\n\
|
||
use redirection server name:i:0\n\
|
||
rdgiskdcproxy:i:0\n\
|
||
kdcproxyname:s:\n\
|
||
drivestoredirect:s:%s\n\
|
||
username:s:%s\n\
|
||
password 51:b:%s\n\
|
||
";
|
||
|
||
bool calc_psw51b(const char* password, std::string& ret) {
|
||
DATA_BLOB DataIn;
|
||
DATA_BLOB DataOut;
|
||
|
||
ex_wstr w_pswd;
|
||
ex_astr2wstr(password, w_pswd, EX_CODEPAGE_ACP);
|
||
|
||
DataIn.cbData = w_pswd.length() * sizeof(wchar_t);
|
||
DataIn.pbData = (BYTE*)w_pswd.c_str();
|
||
|
||
|
||
if (!CryptProtectData(&DataIn, L"psw", nullptr, nullptr, nullptr, 0, &DataOut))
|
||
return false;
|
||
|
||
char szRet[5] = { 0 };
|
||
for (DWORD i = 0; i < DataOut.cbData; ++i) {
|
||
sprintf_s(szRet, 5, "%02X", DataOut.pbData[i]);
|
||
ret += szRet;
|
||
}
|
||
|
||
LocalFree(DataOut.pbData);
|
||
return true;
|
||
}
|
||
|
||
|
||
bool is_digital(std::string str) {
|
||
for (int i = 0; i < str.size(); i++) {
|
||
if (str.at(i) == '-' && str.size() > 1) // <20>п<EFBFBD><D0BF>ܳ<EFBFBD><DCB3>ָ<EFBFBD><D6B8><EFBFBD>
|
||
continue;
|
||
if (str.at(i) > '9' || str.at(i) < '0')
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
std::string strtolower(std::string str) {
|
||
for (int i = 0; i < str.size(); i++)
|
||
{
|
||
str[i] = tolower(str[i]);
|
||
}
|
||
return str;
|
||
}
|
||
|
||
|
||
void SplitString(const std::string& s, std::vector<std::string>& v, const std::string& c)
|
||
{
|
||
std::string::size_type pos1, pos2;
|
||
pos2 = s.find(c);
|
||
pos1 = 0;
|
||
while (std::string::npos != pos2)
|
||
{
|
||
v.push_back(s.substr(pos1, pos2 - pos1));
|
||
|
||
pos1 = pos2 + c.size();
|
||
pos2 = s.find(c, pos1);
|
||
}
|
||
if (pos1 != s.length())
|
||
v.push_back(s.substr(pos1));
|
||
}
|