Linking with new module (incomplete)

This commit is contained in:
binarymaster 2014-12-04 01:23:10 +03:00
parent d2449ccdd6
commit bc84ee3ac4
1 changed files with 54 additions and 35 deletions

View File

@ -15,6 +15,7 @@
*/
#include "stdafx.h"
#include "IniFile.h"
typedef struct
{
@ -54,9 +55,7 @@ struct FARJMP
FARJMP Old_SLGetWindowsInformationDWORD, Stub_SLGetWindowsInformationDWORD;
SLGETWINDOWSINFORMATIONDWORD _SLGetWindowsInformationDWORD;
// Implement this
INIFile INI;
// Correct this
INI_FILE *IniFile;
LPCTSTR LogFile = L"\\rdpwrap.txt";
HMODULE hTermSrv;
HMODULE hSLC;
@ -240,9 +239,9 @@ BOOL __stdcall GetFileVersion(LPCWSTR lptstrFilename, FILE_VERSION *FileVersion)
bool OverrideSL(LPWSTR ValueName, DWORD *Value)
{
if (INIValueExists(INI, "SLPolicy", ValueName))
if (IniFile->VariableExists(INI, "SLPolicy", ValueName))
{
*Value = INIReadDWord(INI, "SLPolicy", ValueName, 0);
if (!(IniFile->GetVariableInSection("SLPolicy", ValueName, Value))) *Value = 0;
return true;
}
return false;
@ -371,7 +370,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
Sect = new char[1024];
wsprintfA(Sect, "%d.%d.%d.%d-SLInit", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build);
if (INISectionExists(INI, Sect))
if (IniFile->SectionExists(Sect))
{
#ifdef _WIN64
bServerSku = (DWORD*)(TermSrvBase + INIReadDWordHex(INI, Sect, "bServerSku.x64", 0));
@ -397,7 +396,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
if (bServerSku)
{
*bServerSku = INIReadDWord(INI, "SLInit", "bServerSku", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bServerSku", bServerSku))) *bServerSku = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bServerSku = %d\r\n", bServerSku, *bServerSku);
@ -406,7 +405,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (bRemoteConnAllowed)
{
*bRemoteConnAllowed = INIReadDWord(INI, "SLInit", "bRemoteConnAllowed", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bRemoteConnAllowed", bRemoteConnAllowed))) *bRemoteConnAllowed = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bRemoteConnAllowed = %d\r\n", bRemoteConnAllowed, *bRemoteConnAllowed);
@ -415,7 +414,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (bFUSEnabled)
{
*bFUSEnabled = INIReadDWord(INI, "SLInit", "bFUSEnabled", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bFUSEnabled", bFUSEnabled))) *bFUSEnabled = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bFUSEnabled = %d\r\n", bFUSEnabled, *bFUSEnabled);
@ -424,7 +423,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (bAppServerAllowed)
{
*bAppServerAllowed = INIReadDWord(INI, "SLInit", "bAppServerAllowed", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bAppServerAllowed", bAppServerAllowed))) *bAppServerAllowed = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bAppServerAllowed = %d\r\n", bAppServerAllowed, *bAppServerAllowed);
@ -433,7 +432,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (bMultimonAllowed)
{
*bMultimonAllowed = INIReadDWord(INI, "SLInit", "bMultimonAllowed", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bMultimonAllowed", bMultimonAllowed))) *bMultimonAllowed = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bMultimonAllowed = %d\r\n", bMultimonAllowed, *bMultimonAllowed);
@ -442,7 +441,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (lMaxUserSessions)
{
*lMaxUserSessions = INIReadDWord(INI, "SLInit", "lMaxUserSessions", 0);
if (!(IniFile->GetVariableInSection("SLInit", "lMaxUserSessions", lMaxUserSessions))) *lMaxUserSessions = 0;
Log = new char[1024];
wsprintfA(Log, "[0x%p] lMaxUserSessions = %d\r\n", lMaxUserSessions, *lMaxUserSessions);
@ -451,7 +450,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (ulMaxDebugSessions)
{
*ulMaxDebugSessions = INIReadDWord(INI, "SLInit", "ulMaxDebugSessions", 0);
if (!(IniFile->GetVariableInSection("SLInit", "ulMaxDebugSessions", ulMaxDebugSessions))) *ulMaxDebugSessions = 0;
Log = new char[1024];
wsprintfA(Log, "[0x%p] ulMaxDebugSessions = %d\r\n", ulMaxDebugSessions, *ulMaxDebugSessions);
@ -460,7 +459,7 @@ HRESULT WINAPI New_CSLQuery_Initialize()
}
if (bInitialized)
{
*bInitialized = INIReadDWord(INI, "SLInit", "bInitialized", 1);
if (!(IniFile->GetVariableInSection("SLInit", "bInitialized", bInitialized))) *bInitialized = 1;
Log = new char[1024];
wsprintfA(Log, "[0x%p] bInitialized = %d\r\n", bInitialized, *bInitialized);
@ -483,12 +482,17 @@ void Hook()
AlreadyHooked = true;
WriteToLog("Loading configuration...\r\n");
if (!INILoad(INI, ExtractFilePath(GetBinaryPath()) + "rdpwrap.ini"))
*IniFile = new INI_FILE(ExtractFilePath(GetBinaryPath()) + L"rdpwrap.ini");
if (*IniFile == NULL)
{
WriteToLog("Error: Failed to load configuration\r\n");
return;
}
LogFile = INIReadString(INI, "Main", "LogFile", ExtractFilePath(GetBinaryPath()) + "rdpwrap.txt");
if(!(IniFile->GetVariableInSection("Main", "LogFile", &LogFile)))
{
LogFile = ExtractFilePath(GetBinaryPath()) + L"rdpwrap.txt";
}
bool Result;
char *Log;
@ -559,17 +563,23 @@ void Hook()
SetThreadsState(false);
WriteToLog("Loading patch codes...\r\n");
PatchList = INIReadSection(INI, "PatchCodes");
//SetLength(Patch, Length(PatchList));
INI->ReadSection("PatchCodes", &PatchList);
INI_VAR_BYTEARRAY Patch[PatchList.length];
for (int i = 0; i < Patch.length; i++)
{
Patch[i] = INIReadBytes(INI, "PatchCodes", PatchList[i]);
if (IniFile->GetVariableInSection("PatchCodes", PatchList[i], &Patch[i]))
{
// for security reasons
// not more than 16 bytes
if (Patch[i].length > 16) SetLength(Patch[i], 16);
}
}
if ((Ver == 0x0600) && (INIReadBool(INI, "Main", "SLPolicyHookNT60", true)))
bool bSLHook;
if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true;
if ((Ver == 0x0600) && bSLHook)
{
// Windows Vista
// uses SL Policy API (slc.dll)
@ -598,7 +608,10 @@ void Hook()
WriteProcessMemory(GetCurrentProcess(), _SLGetWindowsInformationDWORD, &Stub_SLGetWindowsInformationDWORD, sizeof(FARJMP), &bw);
}
}
if ((Ver == 0x0601) && (INIReadBool(INI, "Main", "SLPolicyHookNT61", true)))
if (!(IniFile->GetVariableInSection("Main", "SLPolicyHookNT60", &bSLHook))) bSLHook = true;
if ((Ver == 0x0601) && bSLHook)
{
// Windows 7
// uses SL Policy API (slc.dll)
@ -651,15 +664,17 @@ void Hook()
char *Sect;
Sect = new char[1024];
wsprintfA(Sect, "%d.%d.%d.%d", FV.wVersion.Major, FV.wVersion.Minor, FV.Release, FV.Build);
if (INISectionExists(INI, Sect))
if (IniFile->SectionExists(Sect))
{
if (GetModuleCodeSectionInfo(hTermSrv, &TermSrvBase, &TermSrvSize))
{
bool Bool;
#ifdef _WIN64
if (INIReadBool(INI, Sect, "LocalOnlyPatch.x64", false))
if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x64", &Bool))) Bool = true;
#else
if (INIReadBool(INI, Sect, "LocalOnlyPatch.x86", false))
if (!(IniFile->GetVariableInSection(Sect, "LocalOnlyPatch.x86", &Bool))) Bool = true;
#endif
if (Bool)
{
WriteToLog("Patch CEnforcementCore::GetInstanceOfTSLicense\r\n");
int i = -1;
@ -673,10 +688,11 @@ void Hook()
if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw);
}
#ifdef _WIN64
if (INIReadBool(INI, Sect, "SingleUserPatch.x64", false))
if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x64", &Bool))) Bool = true;
#else
if (INIReadBool(INI, Sect, "SingleUserPatch.x86", false))
if (!(IniFile->GetVariableInSection(Sect, "SingleUserPatch.x86", &Bool))) Bool = true;
#endif
if (Bool)
{
WriteToLog("Patch CSessionArbitrationHelper::IsSingleSessionPerUserEnabled\r\n");
int i = -1;
@ -690,10 +706,11 @@ void Hook()
if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw);
}
#ifdef _WIN64
if (INIReadBool(INI, Sect, "DefPolicyPatch.x64", false))
if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x64", &Bool))) Bool = true;
#else
if (INIReadBool(INI, Sect, "DefPolicyPatch.x86", false))
if (!(IniFile->GetVariableInSection(Sect, "DefPolicyPatch.x86", &Bool))) Bool = true;
#endif
if (Bool)
{
WriteToLog("Patch CDefPolicy::Query\r\n");
int i = -1;
@ -707,10 +724,11 @@ void Hook()
if (i >= 0) WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Patch[i], sizeof(Patch[i]), &bw);
}
#ifdef _WIN64
if (INIReadBool(INI, Sect, "SLPolicyInternal.x64", false))
if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x64", &Bool))) Bool = true;
#else
if (INIReadBool(INI, Sect, "SLPolicyInternal.x86", false))
if (!(IniFile->GetVariableInSection(Sect, "SLPolicyInternal.x86", &Bool))) Bool = true;
#endif
if (Bool)
{
WriteToLog("Hook SLGetWindowsInformationDWORDWrapper\r\n");
char *FuncName;
@ -746,10 +764,11 @@ void Hook()
WriteProcessMemory(GetCurrentProcess(), (LPVOID)SignPtr, &Jump, sizeof(FARJMP), &bw);
}
#ifdef _WIN64
if (INIReadBool(INI, Sect, "SLInitHook.x64", false))
if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x64", &Bool))) Bool = true;
#else
if (INIReadBool(INI, Sect, "SLInitHook.x86", false))
if (!(IniFile->GetVariableInSection(Sect, "SLInitHook.x86", &Bool))) Bool = true;
#endif
if (Bool)
{
WriteToLog("Hook CSLQuery::Initialize\r\n");
char *FuncName;