探索Visual Studio密钥的秘密
每当有人问我,逆向过什么大型软件的时候,我就感觉到困惑。
逆向破解就像点穴,用的是巧劲。并在于眼前的是大象还是小老鼠。
调试过Windows系统?好吧。
我最早想的大型软件程序就是Visual Studio。因为它需要密钥。它是微软的杰作,我的谋生工具之一。
探索VS密钥的原理
方案1-寻找谁操纵了密钥
- 在密钥输入框中输入有特征的密钥。
12345-67890-ABCDE-FGHIJ-KLMNQ - 尝试暂停线程来确定哪些是工作线程。
减少不必要线程造成的影响。 - 记录执行流程。
使用代码执行记录功能来记录执行流程。
方案2-谁在每次打开VS解开了密钥
HKEY_CLASSES_ROOT\Licenses\77550D6B-6352-4E77-9DA3-537419DF564B
调试VS监控注册表的打开以上路径的逻辑。
最终了解到其使用了:
CRYPT32.dll:CryptUnprotectData()
来做验证操作。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa380882(v=vs.85).aspx
我们来看看对应的函数来自于哪里?
CRYPT32.dll:CryptProtectData()
从导入表发现,这个SystemFunction040来自:
cryptbase.dll
上图展示了 CryptProtectData
对内核设备的控制。
如果想了解它在内核中的代码部分就需要了解SymLink:\\Device\\KsecDD
所指向的内核代码。
接下来就是了解上面函数的原理和算法。
原理便于Patch,算法便于破解。
。。。。。。
待续