[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 想用批处理写个简单的注册机

想用批处理写个简单的注册机

研究了好几天 没有头绪。
比如说
1、获取到网卡的mac地址
2、把mac地址进行计算得到一个数值A,客户把A的值告诉我们后
3、我们把A的值放进我们的算法里计算得到序列号,发给客户。客户输入序列号后程序正常运行。

把A 通过算法 +-*/ 后,得到序列号。
要注册的程序输入这个序列号后,程序会经过+-*/逆向算法到的MAC地址。
大师有没有算法,公布一个。或者大家在这里讨论一下

回复 2# HOPE2021


    辛苦了,我慢慢研究一下

TOP

本帖最后由 HOPE2021 于 2022-10-2 06:53 编辑

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

TOP

返回列表