找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24606|回复: 1

[日期时间] 根据 %random% 随机数追溯 cmd 启动时间

[复制链接]
发表于 2014-7-20 02:27:29 | 显示全部楼层 |阅读模式
本帖最后由 CrLf 于 2014-7-20 04:14 编辑

基于批处理逆推随机数种子
基本上就加了修改自 plp626 日期算法的部分和网上淘来的 js 代码(作用类似于 ctime + formatdatetime)
写着玩的,在硬盘里搁了几个月,今天意外翻到...感觉有趣所以发粗来~
  1. @set @n=0;/*&echo off
  2. setlocal enabledelayedexpansion
  3. echo 实际开始于 %time%,以下将作延时和引用随机数处理,以测试 TrackBack 是否有效

  4. set /a 层数=200,时间范围=43200
  5. ::层数决定为一个初始种子检测多少层,时间范围设置的是向上追溯多少秒

  6. ping /n !time:~-1! 127.1 >nul
  7. ::随机延时 1 次 %random%,拉开时间差
  8. for /l %%a in (1 1 %random:~,2%) do break !random!
  9. ::随机引用 n 次 %random%,使种子偏离初始值,对 random 的所有引用次数不能超过预设的层数

  10. echo;
  11. echo 调用 :TrackBack 追溯随机数种子于 !time!
  12. echo ---------------------------------------
  13. call :TrackBack  %层数%  %时间范围%
  14. echo ---------------------------------------
  15. echo;

  16. if %errorlevel% neq 0 (
  17.         set 初始种子=%errorlevel%
  18.         cscript -nologo -e:javascript %0 !初始种子! "脚本起始运行的时间可能是 yyyy-MM-dd hh:mm:ss"
  19.         echo 结束于 !time!
  20.         echo;

  21.         pause>nul
  22.         echo !random!
  23. ) else (
  24.         echo 未能发现种子,可能是因为层数太浅或延时超过 !时间范围! 秒
  25. )
  26. pause
  27. exit /b

  28. :TrackBack  层数  时间范围
  29. setlocal

  30. set /a 层数=%1,时间范围=%2
  31. ::层数决定为一个初始种子检测多少层,时间范围设置的是向上追溯多少秒

  32. set /a rand1=%random%,rand2=%random%
  33. ::获取两个用于参照的随机数,与计算结果完全符合时认定为取得种子

  34. for /f "tokens=1-9 delims=:./\- " %%a in ("!date:~,10! !time!") do (
  35.         set /a "m=(1%%b+29)%%12,y=%%a-m/10,t=365*y+y/4-y/100+y/400+(m*306+5)/10+1%%c-719569"
  36.         set /a t=t*86400+%%d*3600+1%%e*60+1%%f-34900,end=t-t%% 时间范围
  37. )
  38. ::换算 1970.1.1 至今的总秒数

  39. for /l %%a in (!t! -1 !end!) do (
  40.         title %%a
  41.         set /a "seed=%%a*0x343fd+0x269ec3,r2=(seed>>0x10)&0x7fff"
  42.         for /l %%b in (1 1 %层数%) do (
  43.                 set /a "r1=r2,r2=(seed*0x343fd+0x269ec3>>0x10)&0x7fff,seed=seed*0x343fd+0x269ec3"
  44.                 if !r1!_!r2!==%rand1%_%rand2% (
  45.                         set /a 时间间隔=t-%%a
  46.                         echo 向前追溯共 !时间间隔! 秒
  47.                         echo 向上追溯第 %%b 层
  48.                         echo 初始种子为 %%a
  49.                         exit /b %%a
  50.                 )
  51.         )
  52. )
  53. exit /b 0
  54. */

  55. //format 方法引自网络
  56. Date.prototype.format = function(format){
  57.         var o = {
  58.                 "M+" : this.getMonth()+1, //month
  59.                 "d+" : this.getDate(), //day
  60.                 "h+" : this.getHours(), //hour
  61.                 "m+" : this.getMinutes(), //minute
  62.                 "s+" : this.getSeconds(), //second
  63.                 "q+" : Math.floor((this.getMonth()+3)/3), //quarter
  64.                 "S" : this.getMilliseconds() //millisecond
  65.         }

  66.         if(/(y+)/.test(format)) {
  67.                 format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  68.         }

  69.         for(var k in o) {
  70.                 if(new RegExp("("+ k +")").test(format)) {
  71.                         format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));
  72.                 }
  73.         }
  74.         return format;
  75. }

  76. WScript.Echo(new Date(WScript.Arguments(0)*1000).format(WScript.Arguments(1)))
复制代码

评分

参与人数 3PB +10 技术 +4 收起 理由
14270a + 1 研究大佬的代码
plp626 + 10 + 1 有空研究下..
cjiabing + 2 感谢分享

查看全部评分

发表于 2014-7-21 10:41:32 | 显示全部楼层
that sounds a little diao
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 00:16 , Processed in 0.010050 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表