惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
博客园_首页
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Help Net Security
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
A
About on SuperTechFans
腾讯CDC
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
Jina AI
Jina AI
月光博客
月光博客
云风的 BLOG
云风的 BLOG
博客园 - 聂微东
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
C
Check Point Blog
V
V2EX
T
Tailwind CSS Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

博客园 - 高原

[转] 定义、注册和实现 GObject 类的子类 [转] GType 类型系统的功能 [转] Android FrameWork——Touch事件派发过程详解 [转] GObject对象系统 [转] GTYPE类型系统分析 VC里嵌汇编,获取寄存器的值 [转] 使用dbghelp获取调用堆栈--release下的调试方法学 [转] 探索Win32系统之窗口类(Window Classes in Win32) [转] 编译器开关参数集 [转] Nano-X的详细介绍 [转] 为MicroWindows添加透明绘图函数 [转] microwindows位图解析 [转] Microwindows及其中文化方法 [转] Nano-X显示系统的代码分析 [转] Nano-X图形引擎分析及其优化 [转] 使用 pq magic 分区出现 Error 983 报错信息的处理办法 [原创] MicroWindows学习笔记之底层消息的读取 [原创] MicroWindows学习笔记之对底层设备的管理 [转载] Makefile详解
[转] IncrediBuild 试用时间推迟的算法
高原 · 2010-05-04 · via 博客园 - 高原

转自http://www.cppblog.com/free2000fly/archive/2009/08/11/92966.html

    不同版本保存过期时间的注册表键的位置是不同的:
    2.40: HKCR\Interface\{E9B0227F-437C-4F7A-86D9-2676B83F359F}\ProxyStubClsid32 = {M1-M2-M3-T1-T2}

    3.10: HKLM\SOFTWARE\Classes\Interface\{156CCB3A-83E7-4BC1-B340-AF37F5C8BB0B}\ProxyStubClsid32 = {M1-M2-M3-T1-T2}
    3.20: HKCR\Interface\{B7348B5D-B65D-4BF5-AF63-A3135249ACA7}\ProxyStubClsid32 = {M1-M2-M3-T1-T2}
    3.31: HKCR\Interface\{6F8793A7-3226-4B51-98C1-476A0D1A7AFC}\ProxyStubClsid32
    3.40: HKCR\Interface\{48C6296A-4F4C-4238-A9E1-60E9A544A863}\ProxyStubClsid32 
  
    假设此时 Date 的值是 39598.999988425923 (0x37BA E7FFDF55E340)
    
    T1 = 37BA
    T2 = E7FFDF55E340
    M1 = 37 * BA * E7 * FF = 23EAEB06
    M2 = DF * 55 = 4A0B
    M3 = E3 * 40 = 38C0
    
    这样我们就可以把注册表中上述键值改为:{23EAEB06-4A0B-38C0-37BA-E7FFDF55E340}
//*/

EXTERN_C void GetIncrediBuildLicKey(DATE date, LPTSTR lpszKey, UINT cchMax)
{
    BYTE * pByte = (BYTE *)&date;

    BYTE * T1 = (BYTE *) (pByte);
    BYTE * T2 = (BYTE *) (pByte + 2);
    
    DWORD dwM1 = (DWORD) *pByte;
    dwM1 *= (DWORD) *(pByte + 1);
    dwM1 *= (DWORD) *(pByte + 2);
    dwM1 *= (DWORD) *(pByte + 3);
    
    WORD wM2 = (WORD) *(pByte + 4);
    wM2 *= (WORD) *(pByte + 5);
    
    WORD wM3 = (WORD) *(pByte + 6);
    wM3 *= (WORD) *(pByte + 7);
    
    TCHAR szOut[MAX_PATH] = { 0 };
    
    wsprintf(szOut, _T("{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"), 
        dwM1,
        wM2,
        wM3,
        *T1, *(T1+1),
        *T2, *(T2+1), *(T2+2), *(T2+3), *(T2+4), *(T2+5)
        );
    lstrcpyn(lpszKey, szOut, cchMax);
}

以上代码调用方法:
void CCrackibDlg::OnButton1()
{
    COleDateTime destTime = COleDateTime::GetCurrentTime();
   
    COleDateTime dateTime(destTime.GetYear(), destTime.GetMonth()+1, destTime.GetDay()-1, 23, 59, 59);
    DATE Date = (DATE)dateTime;

    TCHAR szOut[MAX_PATH] = { 0 };
    GetIncrediBuildLicKey((DATE)Date, szOut, MAX_PATH);

    SetDlgItemText(IDC_EDIT1, szOut);
}