本帖最后由 HOPE2021 于 2022-10-2 06:53 编辑
回复 1# andycker
如果不需要逆向就好办了,只需要用Certutil生成一个信息摘要(P.S. Windows Vista 及更高版本的 Windows 才自带 Certutil),然后变形(就是交换顺序),接着在客户端分析输入的密钥是否由信息摘要变形而成。
由于信息摘要算法不可逆,所以无法还原MAC地址,但能求出值A。
Certutil 关于信息摘要的帮助文档:- 用法:
- CertUtil [选项] -hashfile InFile [HashAlgorithm]
- 通过文件生成并显示加密哈希
-
- 选项:
- -Unicode -- 以 Unicode 编写重定向输出
- -gmt -- 将时间显示为 GMT
- -seconds -- 用秒和毫秒显示时间
- -v -- 详细操作
- -privatekey -- 显示密码和私钥数据
- -pin PIN -- 智能卡 PIN
- -sid WELL_KNOWN_SID_TYPE -- 数字 SID
- 22 -- 本地系统
- 23 -- 本地服务
- 24 -- 网络服务
-
- 哈希算法: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512
-
- CertUtil -? -- 显示动词列表(命名列表)
- CertUtil -hashfile -? -- 显示 "hashfile" 动词的帮助文本
- CertUtil -v -? -- 显示所有动词的所有帮助文本
复制代码 下面是一个简单的没有变形机制的注册码生成器,请您多多指教:- @Echo Off
- @Goto :Main
-
- :Main
- Cd. > Serial.Txt
- For /F %%_ in ('GetMac ^| FindStr /B "..-"') Do (
- Call :InitSerialNumber %%_
- )
- Pause > Nul
- @Exit /B
-
- :InitSerialNumber <MAC>
- If "%~1"=="" Then @Goto :Eof
- Set "MAC=%1"
- Echo.MAC 地址: %MAC%
- >> Serial.Txt Echo.==MAC 地址: %MAC% ================
- Set /P=%MAC:-=%< Nul > Temp.Txt
-
- %= 方法一:转换成十六进制 =%
- Certutil -EnCodeHex -F Temp.Txt Temp.Txt > Nul 2> Nul
- For /F "Tokens=2 Delims= " %%# in ('Type Temp.Txt') Do (
- Set SN[0]=%%#
- )
- Set SN[1]=%SN[0]:~0,36%
- Set SN[2]=%SN[1]:~0,25%
- Set SN[3]=%SN[1]:~-11%
- Echo. 序列号一:%SN[3]: =%-%SN[2]: =%
- >> Serial.Txt Echo. 序列号一:%SN[3]: =%-%SN[2]: =%
-
- %= 方法二:信息摘要 =%
- Set /P=%MAC%< Nul > Temp.Txt
- Set "Hash="
- For /F "Skip=1" %%# in ('Certutil -HashFile Temp.Txt MD5') Do (
- If Not Defined Hash Set Hash=%%#
- )
- Set SN[4]=%Hash:~0,8%
- Set SN[5]=%Hash:~8,8%
- Set SN[6]=%Hash:~16,8%
- Set SN[7]=%Hash:~24,8%
- Set /P=WScript.Echo UCase("%SN[4]%-%SN[5]%-%SN[6]%-%SN[7]%")<Nul > UCase.VBS
- For /F %%# in ('CScript //NoLogo UCase.VBS') Do (
- Set SN[8]=%%#
- )
- Echo. 序列号二:%SN[8]%
- >> Serial.Txt Echo. 序列号二:%SN[8]%
- @Goto :Eof
复制代码
|