Во-первых всем добрый день. Я тут новенький. Постараюсь оправдать оказанное мне доверие.
Хочу предложить к обсуждения следующую тему, прочитав про Offline Checker, являющийся чем-то вспомогательным при разработке/использовании крипторов, вспомнил о своей недавней разработке инструмента из этой же области.
Назрела необходимость проверять криптованный файл на запуск на различных операционках. В моем распояжении есть достаточно мощьный сервер, на нем 7 виртуалок(XPx86 SP2, XPx64 SP2, XPx86 SP3, Vista x86, Vista x64, 7 x86, 7 x64). Все это добро крутится на VmWare ESXi
Работающие на "заказчика" саппорты, раз в 15 минут (время автоматического рекрипта), проверяли файл на запуск ручками. Я как человек ленивый по натуре не терплю монотонной работы взялся все это дело оптимизировать.
Используя VIX API был написан следующий скриптик
Суть проста. Подключаемся на виртуальную машину, копируем на нее (назовем его) "наш файл", запускаем его, выключаем машину.
Что в "нашем файле": Он представляет из себя простую программу, скачиваюшую тестируемый на запуск "зловред", запускает его, и по заранее известным признакам проверяет успешна ли произошла установка, коректно ли он работает. Далее удалет его из системы и отключает машину.
К чему это все... Недавно на check4me проводили опрос, нужна ли нам фича "тест на запуск". Большая часть опрашиваемых ответила положительно. Итак, если допилить к нашему лаунчеру АПИ, позволяющее заказчику указать признаки успешной установки, мы получим универсальную систему.
Есть коненчо и сложные моменты. Нужно как то почистить систему от "зловреда" после проверки и тут 3 пути:
- Снапшоты (недстаток: долго делаются, долго откатываются пордяка 20 секнуд на каждую машину),
- Софт типа DeepFreeze, ShadowUser, откатывающий все изменения в системе после перезарузки (недстаток: некоторый софт нужно проверять на работоспособность именно после перезапуска)
- АПИ, позволяющее в контрольной панели указать заказчику удалить свой софт после проверки (недстаток: недобропорядочные пользователи могут специально указать неверные значения чтобы остаться в системе)
Все это можно реализовать так же как и Offline Checker в рамках этого проэкта. Так же легко прикрутить и чекер не на голых машинах а на компьютерах с антивирусами. Реализованно так же, за исключением добавления скриптов запускающий софт в доверенные у песочниц.
P.S. Сам "запускатель" легко реализуется и на СИ
Хочу предложить к обсуждения следующую тему, прочитав про Offline Checker, являющийся чем-то вспомогательным при разработке/использовании крипторов, вспомнил о своей недавней разработке инструмента из этой же области.
Назрела необходимость проверять криптованный файл на запуск на различных операционках. В моем распояжении есть достаточно мощьный сервер, на нем 7 виртуалок(XPx86 SP2, XPx64 SP2, XPx86 SP3, Vista x86, Vista x64, 7 x86, 7 x64). Все это добро крутится на VmWare ESXi
Работающие на "заказчика" саппорты, раз в 15 минут (время автоматического рекрипта), проверяли файл на запуск ручками. Я как человек ленивый по натуре не терплю монотонной работы взялся все это дело оптимизировать.
Используя VIX API был написан следующий скриптик
Код:
@echo off
set URL=https://SERVER_IP/sdk
set API=http://CP_IP/launchcheck/
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP3 x86 Clean/Windows XP SP3 x86 Clean.vmx"
set username=user
set preambula=a
set OS=XP SP3 x86
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP2 x64 Clean/Windows XP SP2 x64 Clean.vmx"
set username=user
set preambula=b
set OS=XP Sp2 x64
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows XP SP2 x86 Clean/Windows XP SP2 x86 Clean.vmx"
set username=user
set preambula=c
set OS=XP sp2 x86
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Seven SP1 x64 Clean/Windows Seven SP1 x64 Clean.vmx"
set username=user
set preambula=d
set OS=Win7 x64
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Seven SP1 x86 Clean/Windows Seven SP1 x86 Clean.vmx"
set username=Win7
set preambula=e
set OS=Win7 x86
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Vista SP1 x64 Clean/Windows Vista SP1 x64 Clean.vmx"
set username=user
set preambula=f
set OS=Vista x64
call :Check
rem ------------------------------------------------------------------------------------------
set VirtPath="[Default Datastore] Windows Vista SP1 x86 Clean/Windows Vista SP1 x86 Clean.vmx"
set username=user
set preambula=g
set OS=Vista x86
call :Check
rem ------------------------------------------------------------------------------------------
pause
:Check
vmrun -T esx -h %URL% -u root -p PASSWORD start %VirtPath% nogui
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 deleteFileInGuest %VirtPath% c:\work\CheckThemAll.exe
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 deleteFileInGuest %VirtPath% c:\work\wally.ini
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% wally.ini c:\work\wally.ini
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% CheckThemAll.exe c:\work\CheckThemAll.exe
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 CopyFileFromHostToGuest %VirtPath% del.bat c:\work\del.bat
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 runProgramInGuest %VirtPath% -interactive -activeWindow c:\work\del.bat > NUL
:mark
vmrun -T esx -h %URL% -u root -p PASSWORD -gu %username% -gp 1 runProgramInGuest %VirtPath% -interactive -activeWindow c:\work\CheckThemAll.exe "c:\work\wally.ini" > NUL
if %ERRORLEVEL% LSS 0 goto mark:
set return=%ERRORLEVEL%
@echo on
@echo %OS%: %return%
@echo off
start system\wget.exe -q --spider %API%%preambula%%return%
start vmrun -T esx -h %URL% -u root -p PASSWORD stop %VirtPath% soft
exit /b
Суть проста. Подключаемся на виртуальную машину, копируем на нее (назовем его) "наш файл", запускаем его, выключаем машину.
Что в "нашем файле": Он представляет из себя простую программу, скачиваюшую тестируемый на запуск "зловред", запускает его, и по заранее известным признакам проверяет успешна ли произошла установка, коректно ли он работает. Далее удалет его из системы и отключает машину.
К чему это все... Недавно на check4me проводили опрос, нужна ли нам фича "тест на запуск". Большая часть опрашиваемых ответила положительно. Итак, если допилить к нашему лаунчеру АПИ, позволяющее заказчику указать признаки успешной установки, мы получим универсальную систему.
Есть коненчо и сложные моменты. Нужно как то почистить систему от "зловреда" после проверки и тут 3 пути:
- Снапшоты (недстаток: долго делаются, долго откатываются пордяка 20 секнуд на каждую машину),
- Софт типа DeepFreeze, ShadowUser, откатывающий все изменения в системе после перезарузки (недстаток: некоторый софт нужно проверять на работоспособность именно после перезапуска)
- АПИ, позволяющее в контрольной панели указать заказчику удалить свой софт после проверки (недстаток: недобропорядочные пользователи могут специально указать неверные значения чтобы остаться в системе)
Все это можно реализовать так же как и Offline Checker в рамках этого проэкта. Так же легко прикрутить и чекер не на голых машинах а на компьютерах с антивирусами. Реализованно так же, за исключением добавления скриптов запускающий софт в доверенные у песочниц.
P.S. Сам "запускатель" легко реализуется и на СИ
Код:
#define CONNTYPE VIX_SERVICEPROVIDER_VMWARE_VI_SERVER
#define HOSTNAME "https://VMWARE_IP/sdk"
#define HOSTPORT 443
#define USERNAME "root"
#define PASSWORD "PASSWORD"
#define VMPOWEROPTIONS VIX_VMPOWEROP_NORMAL
#define VMXPATH_INFO "[Default Datastore] Windows XP SP3 x86 + Essentials/Windows XP SP3 x86 + Essentials.vmx"
static char *progName;
////////////////////////////////////////////////////////////////////////////////
int main(int argc, char **argv)
{
VixError err;
char *vmxPath;
VixHandle hostHandle = VIX_INVALID_HANDLE;
VixHandle jobHandle = VIX_INVALID_HANDLE;
VixHandle vmHandle = VIX_INVALID_HANDLE;
progName = argv[0];
vmxPath = VMXPATH_INFO;
jobHandle = VixHost_Connect(VIX_API_VERSION,CONNTYPE,HOSTNAME,HOSTPORT,USERNAME,PASSWORD,0,VIX_INVALID_HANDLE,NULL,NULL);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_JOB_RESULT_HANDLE, &hostHandle,VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_Open(hostHandle,vmxPath,NULL,NULL);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_JOB_RESULT_HANDLE, &vmHandle,VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_PowerOn(vmHandle,VMPOWEROPTIONS,VIX_INVALID_HANDLE,NULL,NULL);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
Vix_ReleaseHandle(jobHandle);
jobHandle = VixVM_PowerOff(vmHandle,VIX_VMPOWEROP_NORMAL,NULL,NULL);
err = VixJob_Wait(jobHandle, VIX_PROPERTY_NONE);
if (VIX_FAILED(err))
{
goto abort;
}
abort:
Vix_ReleaseHandle(jobHandle);
Vix_ReleaseHandle(vmHandle);
VixHost_Disconnect(hostHandle);
return 0;
}