Page MenuHomedesp's stash

No OneTemporary

diff --git a/Scylla/ConfigurationHolder.cpp b/Scylla/ConfigurationHolder.cpp
index d7af60b..b051379 100644
--- a/Scylla/ConfigurationHolder.cpp
+++ b/Scylla/ConfigurationHolder.cpp
@@ -1,266 +1,259 @@
#include "ConfigurationHolder.h"
#include "resource.h"
+#include "definitions.h"
WCHAR ConfigurationHolder::configPath[MAX_PATH];
ConfigurationInitializer ConfigurationHolder::config;
//#define DEBUG_COMMENTS
ConfigurationInitializer::ConfigurationInitializer()
{
ConfigObject configObject;
mapConfig[USE_PE_HEADER_FROM_DISK] = configObject.newValues(L"USE_PE_HEADER_FROM_DISK", Boolean, IDC_CHECK_PE_HEADER_FROM_DISK);
mapConfig[DEBUG_PRIVILEGE] = configObject.newValues(L"DEBUG_PRIVILEGE", Boolean, IDC_CHECK_DEBUG_PRIVILEGES);
mapConfig[CREATE_BACKUP] = configObject.newValues(L"CREATE_BACKUP", Boolean, IDC_CHECK_CREATE_BACKUP);
mapConfig[DLL_INJECTION_AUTO_UNLOAD] = configObject.newValues(L"DLL_INJECTION_AUTO_UNLOAD", Boolean, IDC_CHECK_UNLOAD_DLL);
mapConfig[UPDATE_HEADER_CHECKSUM] = configObject.newValues(L"UPDATE_HEADER_CHECKSUM", Boolean, IDC_CHECK_HEADER_CHECKSUM);
mapConfig[IAT_SECTION_NAME] = configObject.newValues(L"IAT_SECTION_NAME", String, IDC_OPTIONS_SECTIONNAME);
}
bool ConfigurationHolder::loadConfiguration()
{
std::map<Configuration, ConfigObject>::iterator mapIter;
if (!buildConfigFilePath())
{
return false;
}
for (mapIter = config.mapConfig.begin() ; mapIter != config.mapConfig.end(); mapIter++)
{
if (!loadConfig((*mapIter).second))
{
return false;
}
}
return true;
}
bool ConfigurationHolder::saveConfiguration()
{
std::map<Configuration, ConfigObject>::iterator mapIter;
if (!buildConfigFilePath())
{
return false;
}
for (mapIter = config.mapConfig.begin() ; mapIter != config.mapConfig.end(); mapIter++)
{
if (!saveConfig((*mapIter).second))
{
return false;
}
}
return true;
}
bool ConfigurationHolder::saveNumericToConfigFile(ConfigObject & configObject, int nBase)
{
if (nBase == 16)
{
-#ifdef _WIN64
- swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%016I64X"),configObject.valueNumeric);
-#else
- swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%08X"),configObject.valueNumeric);
-#endif
+ swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT(PRINTF_DWORD_PTR_FULL),configObject.valueNumeric);
}
else
{
-#ifdef _WIN64
- swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%I64u"),configObject.valueNumeric);
-#else
- swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%u"),configObject.valueNumeric);
-#endif
+ swprintf_s(configObject.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT(PRINTF_INTEGER),configObject.valueNumeric);
}
if (WritePrivateProfileString(TEXT(CONFIG_FILE_SECTION_NAME), configObject.name, configObject.valueString, configPath))
{
return true;
}
else
{
return false;
}
}
bool ConfigurationHolder::readNumericFromConfigFile(ConfigObject & configObject, int nBase)
{
GetPrivateProfileString(TEXT(CONFIG_FILE_SECTION_NAME),configObject.name,TEXT(""),configObject.valueString, 100, configPath);
if (wcslen(configObject.valueString) > 0)
{
#ifdef _WIN64
configObject.valueNumeric = _wcstoui64(configObject.valueString, NULL, nBase);
#else
configObject.valueNumeric = wcstoul(configObject.valueString, NULL, nBase);
#endif
if (configObject.valueNumeric)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
bool ConfigurationHolder::saveStringToConfigFile(ConfigObject & configObject)
{
if (WritePrivateProfileString(TEXT(CONFIG_FILE_SECTION_NAME), configObject.name, configObject.valueString, configPath))
{
return true;
}
else
{
return false;
}
}
bool ConfigurationHolder::readStringFromConfigFile(ConfigObject & configObject)
{
GetPrivateProfileString(TEXT(CONFIG_FILE_SECTION_NAME),configObject.name,TEXT(""),configObject.valueString, 100, configPath);
if (wcslen(configObject.valueString) > 0)
{
return true;
}
else
{
return false;
}
}
bool ConfigurationHolder::readBooleanFromConfigFile(ConfigObject & configObject)
{
if (GetPrivateProfileInt(TEXT(CONFIG_FILE_SECTION_NAME), configObject.name, 0, configPath) != 0)
{
configObject.valueNumeric = 1;
}
else
{
configObject.valueNumeric = 0;
}
return true;
}
bool ConfigurationHolder::saveBooleanToConfigFile(ConfigObject & configObject)
{
WCHAR *boolValue = 0;
if (configObject.valueNumeric == 0)
{
boolValue = L"0";
}
else
{
boolValue = L"1";
}
if (WritePrivateProfileString(TEXT(CONFIG_FILE_SECTION_NAME), configObject.name, boolValue, configPath))
{
return true;
}
else
{
return false;
}
}
bool ConfigurationHolder::loadConfig(ConfigObject & configObject)
{
switch (configObject.configType)
{
case String:
return readStringFromConfigFile(configObject);
break;
case Boolean:
return readBooleanFromConfigFile(configObject);
break;
case Decimal:
return readNumericFromConfigFile(configObject, 10);
break;
case Hexadecimal:
return readNumericFromConfigFile(configObject, 16);
break;
default:
return false;
}
}
bool ConfigurationHolder::saveConfig(ConfigObject & configObject)
{
switch (configObject.configType)
{
case String:
return saveStringToConfigFile(configObject);
break;
case Boolean:
return saveBooleanToConfigFile(configObject);
break;
case Decimal:
return saveNumericToConfigFile(configObject, 10);
break;
case Hexadecimal:
return saveNumericToConfigFile(configObject, 16);
break;
default:
return false;
}
}
ConfigObject * ConfigurationHolder::getConfigObject(Configuration configuration)
{
return &(config.mapConfig[configuration]);
}
bool ConfigurationHolder::buildConfigFilePath()
{
ZeroMemory(configPath, sizeof(configPath));
if (!GetModuleFileName(0, configPath, _countof(configPath)))
{
#ifdef DEBUG_COMMENTS
Logger::debugLog("buildConfigFilePath :: GetModuleFileName failed %d\r\n",GetLastError());
#endif
return false;
}
//remove exe file name
for (size_t i = wcslen(configPath) - 1; i >= 0; i--)
{
if (configPath[i] == L'\\')
{
configPath[i + 1] = 0;
break;
}
}
wcscat_s(configPath, _countof(configPath), TEXT(CONFIG_FILE_NAME) );
//wprintf(L"configPath %s\n\n", configPath);
return true;
}
std::map<Configuration, ConfigObject> & ConfigurationHolder::getConfigList()
{
return config.mapConfig;
}
\ No newline at end of file
diff --git a/Scylla/OptionsGui.cpp b/Scylla/OptionsGui.cpp
index 5289648..c4b9b98 100644
--- a/Scylla/OptionsGui.cpp
+++ b/Scylla/OptionsGui.cpp
@@ -1,164 +1,158 @@
#include "OptionsGui.h"
-
#include "ConfigurationHolder.h"
+#include "definitions.h"
BOOL OptionsGui::OnInitDialog(CWindow wndFocus, LPARAM lInitParam)
{
EditSectionName.Attach(GetDlgItem(IDC_OPTIONS_SECTIONNAME));
EditSectionName.LimitText(IMAGE_SIZEOF_SHORT_NAME);
loadOptions();
CenterWindow();
return TRUE;
}
void OptionsGui::OnOK(UINT uNotifyCode, int nID, CWindow wndCtl)
{
saveOptions();
ConfigurationHolder::saveConfiguration();
EndDialog(0);
}
void OptionsGui::OnCancel(UINT uNotifyCode, int nID, CWindow wndCtl)
{
EndDialog(0);
}
void OptionsGui::saveOptions()
{
std::map<Configuration, ConfigObject>::iterator mapIter;
for (mapIter = ConfigurationHolder::getConfigList().begin() ; mapIter != ConfigurationHolder::getConfigList().end(); mapIter++)
{
getConfigOptionsFromDlg((*mapIter).second);
}
}
void OptionsGui::loadOptions()
{
std::map<Configuration, ConfigObject>::iterator mapIter;
for (mapIter = ConfigurationHolder::getConfigList().begin() ; mapIter != ConfigurationHolder::getConfigList().end(); mapIter++)
{
displayConfigInDlg((*mapIter).second);
}
}
void OptionsGui::setCheckBox( int nIDDlgItem, bool bValue )
{
CButton Button(GetDlgItem(nIDDlgItem));
Button.SetCheck(bValue ? BST_CHECKED : BST_UNCHECKED);
}
void OptionsGui::displayConfigInDlg( ConfigObject & config )
{
switch (config.configType)
{
case String:
{
setEditControl(config.dialogItemValue, config.valueString);
}
break;
case Boolean:
{
setCheckBox(config.dialogItemValue, config.isTrue());
}
break;
case Decimal:
{
-#ifdef _WIN64
- swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%I64u"),config.valueNumeric);
-#else
- swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%u"),config.valueNumeric);
-#endif
+ swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT(PRINTF_INTEGER),config.valueNumeric);
+
setEditControl(config.dialogItemValue, config.valueString);
}
break;
case Hexadecimal:
{
-#ifdef _WIN64
- swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%016I64X"),config.valueNumeric);
-#else
- swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT("%08X"),config.valueNumeric);
-#endif
+ swprintf_s(config.valueString, CONFIG_OPTIONS_STRING_LENGTH, TEXT(PRINTF_DWORD_PTR_FULL),config.valueNumeric);
+
setEditControl(config.dialogItemValue, config.valueString);
}
break;
}
}
void OptionsGui::setEditControl( int nIDDlgItem, const WCHAR * valueString )
{
CEdit Edit(GetDlgItem(nIDDlgItem));
Edit.SetWindowText(valueString);
}
void OptionsGui::getConfigOptionsFromDlg( ConfigObject & config )
{
switch (config.configType)
{
case String:
{
getEditControl(config.dialogItemValue, config.valueString);
}
break;
case Boolean:
{
getCheckBox(config.dialogItemValue, &config.valueNumeric);
}
break;
case Decimal:
{
getEditControlNumeric(config.dialogItemValue, &config.valueNumeric, 10);
}
break;
case Hexadecimal:
{
getEditControlNumeric(config.dialogItemValue, &config.valueNumeric, 16);
}
break;
}
}
bool OptionsGui::getEditControl( int nIDDlgItem, WCHAR * valueString )
{
CEdit Edit(GetDlgItem(nIDDlgItem));
return (Edit.GetWindowText(valueString, CONFIG_OPTIONS_STRING_LENGTH) > 0);
}
void OptionsGui::getCheckBox( int nIDDlgItem, DWORD_PTR * valueNumeric )
{
CButton Button(GetDlgItem(nIDDlgItem));
switch (Button.GetCheck())
{
case BST_CHECKED:
*valueNumeric = 1;
return;
case BST_UNCHECKED:
*valueNumeric = 0;
return;
default:
*valueNumeric = 0;
}
}
void OptionsGui::getEditControlNumeric( int nIDDlgItem, DWORD_PTR * valueNumeric, int nBase )
{
WCHAR temp[CONFIG_OPTIONS_STRING_LENGTH] = {0};
if (getEditControl(nIDDlgItem, temp))
{
#ifdef _WIN64
*valueNumeric = _wcstoui64(temp, NULL, nBase);
#else
*valueNumeric = wcstoul(temp, NULL, nBase);
#endif
}
else
{
*valueNumeric = 0;
}
}
diff --git a/Scylla/definitions.h b/Scylla/definitions.h
index 93a7f44..448778b 100644
--- a/Scylla/definitions.h
+++ b/Scylla/definitions.h
@@ -1,35 +1,37 @@
#pragma once
#define APPNAME "Scylla"
#ifdef _WIN64
#define ARCHITECTURE "x64"
#define PRINTF_DWORD_PTR "%I64X"
#define PRINTF_DWORD_PTR_FULL "%016I64X"
#define PRINTF_DWORD_PTR_HALF "%08I64X"
+#define PRINTF_INTEGER "%I64u"
#define MAX_HEX_VALUE_EDIT_LENGTH 16
#else
#define ARCHITECTURE "x86"
#define PRINTF_DWORD_PTR "%X"
#define PRINTF_DWORD_PTR_FULL "%08X"
#define PRINTF_DWORD_PTR_HALF "%08X"
+#define PRINTF_INTEGER "%u"
#define MAX_HEX_VALUE_EDIT_LENGTH 8
#endif
-#define APPVERSION "v0.3"
+#define APPVERSION "v0.4"
#define RECOMMENDED_OS "This tool was designed to work with Windows 7 x64"
#define DEVELOPED "Developed with Microsoft Visual Studio 2010, written in pure C/C++"
#define CREDIT_DISTORM "This tool uses the diStorm disassembler library -> http://code.google.com/p/distorm/"
#define CREDIT_YODA "The PE Rebuilder engine is based on the Realign DLL version 1.5 by yoda"
#define CREDIT_SILK "The small icons are taken from the Silk icon package -> http://www.famfamfam.com"
#define GREETINGS "Greetz: metr0, G36KV and all from the gRn Team"
#define VISIT "Visit http://kickme.to/grn and http://forum.tuts4you.com "
#define PLUGIN_MENU_BASE_ID 0x10
\ No newline at end of file

File Metadata

Mime Type
text/x-diff
Expires
Sat, Jul 5, 7:10 PM (1 d, 11 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
d7/3e/d977a718343c9bf6878f92bf0483

Event Timeline