[英]C CryptUnprotectData crashes Program
嗨,我正在嘗試編寫一個 C 程序來解密 Chrome 用來加密保存的密碼的密鑰。 密鑰用 CryptProtectData 加密,然后用 Base64 編碼,我已經成功解碼了密鑰,現在我想用 CryptUnprotectData 解密它,但是當我嘗試使用這個功能時,我的程序崩潰了,當我得到一個類似的問題時保存錯誤的加密數據的字節 * 的大小。 有誰知道我做錯了什么?
#include <stdio.h>
#include <base64.h>
#include <wincrypt.h>
void main()
{
//RFBBUEk = DPAPI
char B64[] = "BAAAA0Iyd3wEV0RGMegDAT8KX6wEAAAAYUduGi5FwQr1+XlafMqBZAAAAAAIAAAAAABBmAAAAAQAAIAAAALIvW98pXJMaQ0aJPpr40c12oSSRDg59tr+zaF+podlvAAAAAA6AAAAAAgAAIAAAAD2z5W4nMDHLOxthH8nXyxl+1hpRdY2BGHStxaDvgjSiMAAAAIKrcLbXw5WZCPjqyPtO/3QahMa0yMRC/CoMS/OoDw5j7fcZ8N31sIildXpN82egDEAAAAAvzHS7+Zf2IR05cggu1XHfNGknq3TKRHW37CVEktIHHu6yo1K0Q0r5YevYDUUNdhzlpJ+ynQUTBAS2Fa3PRR4V";
int len = sizeof(B64);
int * flen;
char * ergebnis;
ergebnis = unbase64(B64,len,flen);
DATA_BLOB Input,Output;
Input.pbData = (byte*)ergebnis;
Input.cbData = *flen;
CryptUnprotectData(&Input,NULL,NULL,NULL,NULL,0,&Output);
printf("%s",(char*)Output.pbData);
getchar();
}
printf("%s",(char*)Output.pbData);
首先,您不檢查CryptUnprotectData
成功。 如果失敗,您將垃圾指針傳遞給printf
。
其次,您如何期望printf
知道要打印多少字節? 您需要對Output.cbData
做一些事情。
最后, flen
永遠不會被賦值。 您將任何無意義的未初始化值傳遞給unbase64
,然后嘗試使用該值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.