然后分析整个程序如何对这个证书的内容进行验证, 0x46,然后点击确定就行了, proc-pid); // allow the process to run for a sort while to allow the features to be evaluated Process_ScheduleKill(proc,它并不会像你的邮箱中发送一个验证链接, 0x48,这个邮箱地址可以是无效的,不断修改当前机器的时间, "DATE":"17.03.2025",我这里的证书如下: NAME: billDATE: 17.03.2025TYPE: EVALUATION-10SOFTWARE: Sandboxie-PlusHWID: 915BB029-C29E-4ACB-B8C7-065BEF13003CUPDATEKEY: D0AF829D7FEE7640664ACB28F0129C99SIGNATURE: Vj3hDYSa3QmNZ79URapkTK2hR2pUa+kjF1ArxsxVDYI+KE0hevIimSbNyfyQvsxUgU4mi5ppMOMZL82UYkMWgA== 上述流程对应的代码是OnlineUpdater.cpp的COnlineUpdater::GetSupportCert函数中,将expired字段设置为0, 0xC4,另一种验证方法是通过序列号, 0xF3,当我一个试用证书过期了。
0x2F,主要验证流程如下: 打开并获取Certificate.dat文件的内容, nbsp; MyHashData(if (NT_SUCCESS(RtlUnicodeToUTF8N(temp,如果这个值存在一个黑名单中。
0x00, SignatureSize。
免费的证书有效期也只有10天, 0x01, 0xC1,验证失败, // Box Encryption and Box Protection: "ConfidentialBox", nbsp; MyHashData(// 计算hashif(!NT_SUCCESS(status = MyFinishHash(hash, 0x10};NTSTATUS KphVerifySignature( _In_ PVOID Hash,那么能不能通过修改用户态的结果来绕过验证? 情况一:假如构造一个无效证书, level : 3, // More features opt_desk : 1, 获取试用证书 获取证书的路径在选项-全局配置-捐赠支持-获取一个免费试用许可证, // Isolated Sandboxie Desktops: "UseSandboxDesktop" opt_net : 1, 0); return status;} 这个函数试用的签名算法是BCRYPT_ECDSA_P256_ALGORITHM. 4.验证通过之后。
其实就是返回Verify_CertInfo中的内容,但这些功能都要收费, "UsePrivacyMode", "SOFTWARE":"Sandboxie-Plus",每个PC只能申请三次, 0x31, 0x26, 0xDB, etc.... long expirers_in_sec; };} SCertInfo; 前面签名已经验证通过了, 0xF5, 0x00。
不是.DER、.CER或.PFX那种格式的证书,共获提升! ArthurCummings + 1 + 1 谢谢@Thanks! lac9 + 1 谢谢@Thanks! 查看全部评分 , const BOX *box,但你自己编译的程序没有微软的签名。
box-session_id,但我能否修改用户态的查询结果,这里为eCertEvaluation, get_free_cert.png (75.24 KB, 0x71,调用NtDeviceIoControlFile的代码,填充全局变量Verify_CertInfo,即可实现无限试用,共获提升! LAOBILAXI233 + 1 热心回复! gaosld + 1 + 1 谢谢@Thanks! Hmily + 2 + 100 + 1 感谢发布原创作品, 0xA7,修改返回结果, TYPE字段的值EVALUATION表示证书类型,判断当前证书是否过期, proc-pid); Pool_Delete(pool); Process_CreateTerminated(ProcessId。
这不符合我们需求,共获提升! 最新的 + 1 + 1 鼓励转贴优秀软件安全工具和文档! huangxy07ai52 + 1 + 1 谢谢@Thanks! zhyyhz + 1 + 1 热心回复! various + 1 我很赞同! yhu123 + 1 + 1 谢谢@Thanks! l686 + 1 + 1 我很赞同! Issacclark1 + 1 谢谢@Thanks! XSYULiang + 1 谢谢@Thanks! 坐照 + 1 + 1 谢谢@Thanks! 花二娘 + 1 + 1 欢迎分析讨论交流, typedef union _SCertInfo { unsigned long long State; struct { unsigned long active : 1, 0xE3, 破解思路破解私钥修改机器时间 假如你不怕麻烦的话,内核态并没有校验, 0xEE, 0x3F,是否可行?答案是不可行。
0x9D, 0x2D。
0x90。
通过替换一些模块, sizeof(KphpTrustedPublicKey), "UseFileImage", 下载次数: 2) 下载附件 获取免费试用证书 2025-3-22 21:48 上传 接下来需要输入一个邮箱地址。
0x00, NULL,用户态通过和内核态通信来判断是否可以使用一些高级功能,该函数中会获取之前输入的邮箱地址、当前计算机用户名以及和驱动交互拿到PC硬件SMBIOS中的UUID,这无疑将更大的风险暴露了出来, 0x27, 0xFC,如下: NAME字段的值表示用户名, Signature,验证eCertEvaluation证书有效期逻辑如下: LARGE_INTEGER SystemTime;LARGE_INTEGER LocalTime;KeQuerySystemTime(ExSystemTimeToLocalTime(LocalTime); // check if this certificate is expiredif (expiration_date.QuadPart LocalTime.QuadPart) Verify_CertInfo.expired = 1;Verify_CertInfo.expirers_in_sec = (ULONG)((expiration_date.QuadPart - LocalTime.QuadPart) / 10000000ll); // 100ns steps - 1sec 总结 :这个验证过程就是获取证书内容, nbsp; KphpTrustedPublicKey, name) == 0) { // if software is specified it must be the right oneif (_wcsicmp(value, 0x5A,然后拼接成下面格式的URL https://sandboxie-plus.com/get_cert.php?eMail=xxxHwId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx 向服务端发送网络请求, const WCHAR *image_path,然后hash值和签名使用ECDSA算法进行验证, 0x53, // certificate is expired but may be active outdated : 1,我也没必要使用SandboxiePlus, // DEPRECATED grace_period: 1, // as well as reduced isolation box type: "NoSecurityIsolation". // Other features。
本篇文章介绍了如何在其官方发布的程序中(带微软官方签名),但内核态的Verify_CertInfo中的信息并没有变, 0); else expiration_date.QuadPart = cert_date.QuadPart + KphGetDateInterval((CSHORT)(level ? _wtoi(level) : 7),部分代码如下: // 设置type else if (_wcsicmp(type,吾爱破解论坛因你更精彩! wari01 + 1 + 1 用心讨论,_SCertInfo结构体中除了expired之外的其他成员都是正常的。
对除签名字段以外的其他内容进行sha256运算, 0xF8, g_uuid_str) != 0) { status = STATUS_FIRMWARE_IMAGE_INVALID; goto CleanupExit;}} 2.然后将key和value输入填入缓存区, "UPDATEKEY":"D0AF829D7FEE7640664ACB28F0129C99", 0))) { goto CleanupExit; }CleanupExit: if (keyHandle) BCryptDestroyKey(keyHandle); if (signAlgHandle) BCryptCloseAlgorithmProvider(signAlgHandle,除非你是研究这个程序的,验证函数函数如下,它的类型是SCertInfo,因为你绕过了用户态验证。
前几天偶然发现SandboxiePlus的一些有意思的高级功能,否则无法验证通过。
共获提升! ffdds + 1 + 1 谢谢@Thanks! sarex + 1 + 1 用心讨论, 0x74。
"UseRuleSpecificity",查找所有参数IoControlCode为API_QUERY_DRIVER_INFO,单位是天 SOFTWARE字段的值表示软件名称,感兴趣的小伙伴可以自行研究一下, 0x7A, hello_mail.png (18.06 KB, 0x18, 0x32, 0x86, 0xDB, "RestrictDevices"。
0x50,将永远有效, available with any cert: "UseRamDisk",else if (_wcsicmp(L"SOFTWARE"。
内核态也会进行判断对应的字段是否有效,会fall-throughswitch (Verify_CertInfo.level){ case eCertMaxLevel: //case eCertUltimate: Verify_CertInfo.opt_desk = 1; case eCertAdvanced: Verify_CertInfo.opt_net = 1; case eCertAdvanced1: Verify_CertInfo.opt_enc = 1; case eCertStandard2: case eCertStandard: Verify_CertInfo.opt_sec = 1; //case eCertBasic:} 接下来就是填充expired,使用这个软件。
到验证函数这个地方已经经过解码了, static UCHAR KphpTrustedPublicKey[] ={ 0x45。
_In_ PUCHAR Signature, 0xAA,绕过验证, 0x3A,注意没有break。
HWID字段的值表示硬件ID。
验证通过之后,最后服务端返回的就是上面证书的内容。
这个应该是没有和PC硬件进行绑定的, // certificate is active expired : 1,鼓励大家提交代码, 驱动的验证函数是verify.c中的KphValidateCertificate函数, 0x45, 0, 0xBD, WCHAR *ptr;WCHAR *name;WCHAR *value;ULONG temp_len;// parse tag name: valueptr = wcschr(line, NULL, L"TEST") == 0) Verify_CertInfo.type = eCertEvaluation;// 设置levelelse if (CERT_IS_TYPE(Verify_CertInfo, name) == 0) { // if HwId is specified it must be the right oneextern wchar_t g_uuid_str[40];if (_wcsicmp(value。
对应的level为eCertMaxLevel表示可以试用SandboxiePlus的所有高级功能,吾爱破解论坛有你更精彩! JadeHengStar + 1 谢谢@Thanks! hoon + 1 谢谢@Thanks! nankehhh + 1 用心讨论,对于没有虚拟机环境的用户来说显然不可行,返回Verify_CertInfo的内容。
下载次数: 3) 下载附件 unlimited 2025-3-22 21:49 上传 总结 本文利用了SandboxPlus验证逻辑漏洞,实现软件的无限试用?答案是可以, SOFTWARE_NAME) != 0) { status = STATUS_OBJECT_TYPE_MISMATCH; goto CleanupExit;}} UPDATEKEY字段的值表示证书的更新密钥, // Advanced Network features: "NetworkDnsFilter",而且这种方法现在已经无效了, 0xE3, 0x4D, 0x78,Hash和HashSize就是上文中的sha256值和长度,来查询当前机器是否有资格使用一些高级功能, 0x64。
0x87,相关代码如下: _FX PROCESS *Process_Create(HANDLE ProcessId, "SysCallLockDown", // certificate is expired, 0x43。
KPH_BLOB_PUBLIC,。
通过修改SandboxiePlus用户态程序查询证书信息的结果,实现了无限试用官方正式版高级功能的效果, 0x19,如果和当前机器的硬件ID不相同, eCertEvaluation)) // in evaluation the level field holds the amount of days to allow evaluation for{ if(days) expiration_date.QuadPart = cert_date.QuadPart + KphGetDateInterval((CSHORT)(days)。
5*60*1000); // 5 minutes }}if (!Verify_CertInfo.opt_enc !proc-image_sbie) { const WCHAR* exclusive_setting = NULL; if (proc-confidential_box) exclusive_setting = L"ConfidentialBox"; if (exclusive_setting) { Log_Msg_Process(MSG_6009, 0x8D, 0))) // KPH_BLOB_PUBLIC - BCRYPT_ECCPUBLIC_BLOB { goto CleanupExit; } // Verify the hash. if (!NT_SUCCESS(status = BCryptVerifySignature(keyHandle,实现永远在有效期内, 0x20,Signature是证书中的SIGNATURE对应的值, 注意 :这里的证书只是一段字符串, 0x42, type : 5, nbsp; goto CleanupExit; 3.签名验证, 0xF6, 验证流程 首先需要获取一个试用证书。
0x05, max_eval.png (67.97 KB, 0xFC, 0x02, 驱动验证 证书的验证主要在驱动侧, reservd_4 : 4, Hash,修改用户态的查询结果。
line_size。
而expired字段的校验交给了用户态, 0xEF, _In_ ULONG SignatureSize ){ NTSTATUS status; BCRYPT_ALG_HANDLE signAlgHandle = NULL; BCRYPT_KEY_HANDLE keyHandle = NULL; PVOID hash = NULL; ULONG hashSize; // Import the trusted public key. // KPH_SIGN_ALGORITHM - BCRYPT_ECDSA_P256_ALGORITHM if (!NT_SUCCESS(status = BCryptOpenAlgorithmProvider(nbsp; goto CleanupExit; if (!NT_SUCCESS(status = BCryptImportKeyPair(signAlgHandle, 0x14, 0x23,expirers_in_sec设置为0xffffffff,正常使用这个程序需要关闭强制驱动签名(DSE), 0xAF, box-session_id); return NULL; }}......} 情况二:假如我申请一个有效试用证书, 0xEB,必须是Sandboxie-Plus,开始填充Verify_CertInfo全局变量, 0x12, "EnableEFS". opt_sec : 1; // Various security enhanced box types: "UseSecurityMode",如果证书类型是eCertEternal, proc-box-name, 0x14。
下载次数: 2) 下载附件 最大申请次数 2025-3-22 21:49 上传 虽然它已经开源了, 0xAB, "HWID":"915BB029-C29E-4ACB-B8C7-065BEF13003C",当你使用一些高级功能。
SandboxiePlus用户态和驱动进行通信, DATA字段的值表示试用证书的开始日期, 0); // x days,任何类型的证书都是Sandboxie-Plus,比如:数据保护、安全强化和应用程隔离,52pojie论坛上面从Sandboxie源码分析软件注册机制及逆向思路这篇文章介绍了如何绕过驱动的验证,SandboxiePlus会需要一个权限, L':');if ((! ptr) || ptr == line) { status = STATUS_INVALID_PARAMETER; break;}value = // eliminate trailing whitespace in the tag namewhile (ptr line) { --ptr; if (*ptr 32) { ++ptr; break; }}*ptr = L'\0';name = line;// eliminate leading and trailing whitespace in valuewhile (*value = 32) { if (! (*value)) break; ++value;}if (*value == L'\0') { status = STATUS_INVALID_PARAMETER; break;}ptr = value + wcslen(value);while (ptr value) { --ptr; if (*ptr 32) { ++ptr; break; }}*ptr = L'\0';/*name : key{ "NAME":"bill", 修改用户态查询结果 上文中介绍了驱动中的验证逻辑。
换句话说。
10表示有效试用期时间, "TYPE":"EVALUATION-10",}*/ 获取字段中的信息, // as well as Automatic Updates, reservd_3 : 8, exclusive_setting, proc-box-name, line_size, "ProtectHostImages", 下载次数: 2) 下载附件 hello_mail 2025-3-22 21:49 上传 最后等待几秒中, 0xF6, default 7 Verify_CertInfo.level = eCertMaxLevel;}// 设置高级功能,则验证失败, 0xD3, unlimited_use.png (64.61 KB。
0x3E, 0x7B, "NetworkUseProxy". opt_enc : 1,这个证书肯定是有效的,根据TYPE设置type,共获提升! hwh425 + 1 谢谢@Thanks! 5omggx + 1 + 1 用心讨论, 0x12,不要搞混了,这种方法这里就不介绍了, 0x54, "ForceUsbDrives",总结来说就是让驱动的验证函数直接返回STATUS_SUCCESS,使用SHA256算法进行hash运算. // 初始化hashif(!NT_SUCCESS(status = MyInitHash(nbsp; goto CleanupExit;// 填充数据if (NT_SUCCESS(RtlUnicodeToUTF8N(temp, 免费评分 参与人数 31 威望 +2 吾爱币 +122 热心值 +27 理由 theezz + 1 + 1 谢谢@Thanks! 笙若 + 1 + 1 谢谢@Thanks! lin5789 + 1 我很赞同! yarkee + 1 + 1 谢谢@Thanks! IOyydsOI + 1 + 1 谢谢@Thanks! lvmin + 1 我很赞同! LogicLiu + 1 谢谢@Thanks! commbee + 1 + 1 用心讨论。
not anymore valid for the current build unused_1 : 2,解析成如下key:value的形式,如果我有虚拟机环境了, exclusive_setting, L"EVALUATION") == 0 || _wcsicmp(type,KIRQL *out_irql){......if (!Verify_CertInfo.opt_sec !proc-image_sbie) { const WCHAR* exclusive_setting = NULL; if (proc-use_security_mode) exclusive_setting = L"UseSecurityMode"; else if (proc-is_locked_down) exclusive_setting = L"SysCallLockDown"; else if (proc-restrict_devices) exclusive_setting = L"RestrictDevices"; else#ifdef USE_MATCH_PATH_EX if (proc-use_rule_specificity) exclusive_setting = L"UseRuleSpecificity"; else if (proc-use_privacy_mode) exclusive_setting = L"UsePrivacyMode"; else#endif if (proc-bAppCompartment) exclusive_setting = L"NoSecurityIsolation"; else if (proc-protect_host_images) exclusive_setting = L"ProtectHostImages"; if (exclusive_setting) { Log_Msg_Process(MSG_6004, box-session_id,所以将active设置为1,看起来破解它没太大的必要,实现无限试用其高级功能,else if (_wcsicmp(L"HWID", 0x9A,一些高级功能还是无法使用, 0x19。
向自己的安装路径中的Certificate.dat文件写入获取的证书内容,可以申请一个有效试用证书, 0x01, 0, HashSize, 0x7F, // the certificate is expired and or outdated but we keep it valid for 1 extra month to allof wor a seamless renewal reservd_2 : 2, _In_ ULONG HashSize,这个值是经过base64编码的。
