public static DPAPI_MODULE dpapiDecryptModule(DPAPI_MODULE oEncMod) { DPAPI_MODULE oMod = new DPAPI_MODULE(); Byte[] bEncrypted = new Byte[oEncMod.iModSize]; Marshal.Copy(oEncMod.pMod, bEncrypted, 0, oEncMod.iModSize); DATA_BLOB oPlainText = new DATA_BLOB(); DATA_BLOB oCipherText = makeBlob(bEncrypted); DATA_BLOB oEntropy = makeBlob(bEntropy); String sDescription = String.Empty; Boolean bStatus = CryptUnprotectData(ref oCipherText, ref sDescription, ref oEntropy, IntPtr.Zero, IntPtr.Zero, 0, ref oPlainText); if (bStatus) { oMod.pMod = oPlainText.pbData; oMod.bMod = new Byte[oPlainText.cbData]; Marshal.Copy(oPlainText.pbData, oMod.bMod, 0, oPlainText.cbData); oMod.iModSize = oPlainText.cbData; oMod.iModVersion = oEncMod.iModVersion; } return(oMod); }
public static DPAPI_MODULE dpapiEncryptModule(Byte[] bMod, String sModName, Int32 iModVersion = 0) { DPAPI_MODULE dpMod = new DPAPI_MODULE(); DATA_BLOB oPlainText = makeBlob(bMod); DATA_BLOB oCipherText = new DATA_BLOB(); DATA_BLOB oEntropy = makeBlob(bEntropy); Boolean bStatus = CryptProtectData(ref oPlainText, sModName, ref oEntropy, IntPtr.Zero, IntPtr.Zero, CRYPTPROTECT_LOCAL_MACHINE, ref oCipherText); if (bStatus) { dpMod.sModName = sModName; dpMod.iModVersion = iModVersion; dpMod.iModSize = oCipherText.cbData; dpMod.pMod = oCipherText.pbData; } return(dpMod); }
public static void freeMod(DPAPI_MODULE oMod) { //IntPtr piLen = (IntPtr)oMod.iModSize; //NtFreeVirtualMemory((IntPtr)(-1), ref oMod.pMod, ref piLen, AllocationType.Release); LocalFree(oMod.pMod); }