BoxedApp SDK 2.1, BoxedApp Packer 2.2
Выпущены новый версии продуктов линейки BoxedApp: BoxedApp SDK 2.1, BoxedApp Packer 2.2.
[ Загрузить демо версии ]
Кратко о том, что сделано:
Редактор виртуального реестра в BoxedApp Packer
Прежде вся работа с виртуальным реестром проводилась в пользовательских плагинах. Если требовалось создать даже один виртуальный ключ реестра - надо было писать плагин, который использует функции BoxedApp SDK.
Теперь BoxedApp Packer содержит полноценный редактор виртуального реестра. Буквально за пару кликов можно создать требуемые виртуальные ключи и задать значения параметров.
API для перехвата функций
Для создания виртуальной файловой системы / реестра BoxedApp SDK (приложения, созданные BoxedApp Packer, кстати, используют именно его) использует технику перехвата системных функций. Несколько оригинальных идей позволили сделать систему перехвата совместимой с любым окружением, и теперь та часть SDK, которая отвечает за перехват, стала доступна для разработчиков - пользователей SDK.
Теперь BoxedApp SDK может рассматриваться как полноценная альтернатива Detours от Microsoft.
Напомним, что BoxedApp SDK поддерживает как 32-битное, так и 64-битное окружение, а также может быть статически прилинкован к приложениям, использующим VC++ / Delphi любых версий. И, конечно же, SDK может быть использован в любой программной среде, которая поддерживает использование DLL.
Пара примеров на C++ и Delphi, блокирующих возможность создания и открытия файла с названием “1.txt”:
typedef HANDLE (WINAPI *P_CreateFileW)(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile);
P_CreateFileW g_pCreateFileW;
HANDLE WINAPI My_CreateFileW(
LPCWSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile)
{
if (0 == lstrcmpiW(lpFileName, L"1.txt"))
{
SetLastError(ERROR_FILE_EXISTS);
return INVALID_HANDLE_VALUE;
}
else
return g_pCreateFileW(
lpFileName,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
hTemplateFile);
}
...
BoxedAppSDK_Init();
PVOID pCreateFileW = GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "CreateFileW");
HANDLE hHook__CreateFileW = BoxedAppSDK_HookFunction(pCreateFileW, &My_CreateFileW, TRUE);
g_pCreateFileW = (P_CreateFileW)BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW);
FILE* f = fopen("1.txt", "r");
// f is NULL
...
BoxedAppSDK_UnhookFunction(hHook__CreateFileW);
Аналогичный пример на Delphi:
type
TCreateFileW =
function(lpFileName: PWideChar;
dwDesiredAccess, dwShareMode: Integer;
lpSecurityAttributes: PSecurityAttributes;
dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle; stdcall;
var
OriginalCreateFileW: TCreateFileW;
function My_CreateFileW(
lpFileName: PWideChar;
dwDesiredAccess, dwShareMode: Integer;
lpSecurityAttributes: PSecurityAttributes;
dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle; stdcall;
begin
if 0 = lstrcmpiW(lpFileName, '1.txt') then
begin
Result := INVALID_HANDLE_VALUE;
SetLastError(ERROR_ALREADY_EXISTS);
end
else
Result :=
OriginalCreateFileW(
lpFileName,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
hTemplateFile);
end;
var
pCreateFileW: Pointer;
hHook__CreateFileW: THandle;
begin
Application.Initialize;
BoxedAppSDK_Init;
pCreateFileW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'CreateFileW');
hHook__CreateFileW := BoxedAppSDK_HookFunction(pCreateFileW, @My_CreateFileW, TRUE);
OriginalCreateFileW := BoxedAppSDK_GetOriginalFunction(hHook__CreateFileW);
// This line produces an exception because we prevent creating / opening '1.txt'
TFileStream.Create('1.txt', fmCreate or fmOpenRead);
BoxedAppSDK_UnhookFunction(hHook__CreateFileW);
end.
Мелкие доработки
- Добавлена поддержка флага FILE_FLAG_DELETE_ON_CLOSE для виртуальных файлов
- Исправлены небольшие проблемы с запуском виртуальных исполняемых файлов, созданных с помощью Delphi
- Сделана более гибкая система хранения виртуальных файлов в памяти


Написать комментарий
Вы должны залогиниться чтобы комментировать. Залогиниться