[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aa77dd@163.com 于 2015-6-15 15:41 编辑

CHCP 37 代码页
IBM EBCDIC (US-Canada)

好象前半段为 437 编码页, CLS 之后, 后半段 37 代码页

  1. *%~n1"%~x1..fajwp%3ojch%~9alksdjff%2jsdgvsf"ajedf^ioe%time%fafwbv
  2. %.:~7,1%s%.:~-5,3%/a%:%;=%~z0^^502%2c:
  3. %.:~7,1%^e%.:~10,2%%.:*#=% o%.:~18,3%%cd:~,1%h%cd:~,1%p %;%|cls
  4. Ž(d%.:~-5,1%l "%~f0%.:~-17,1%%2s%.:~-5,1%tlocal en%~n0bled^
  5. el%~n0%time:~0,0%yed%.:~-5,1%xp%~n0nsion
  6. se%.:~-4,0%t/pah%~n0=P%.:~3,1%s%cd:~2,0%swo%cd:~1,0%rd%cd:~4,0%:
  7. if %.:~-17,1%!aha!"=%cd:~1,0%="[!%~t0]CrLf!%.:~-17,1% ec%cd:~,0%ho;Bi%cd:~-1,0%ngo%cd:~,0%~
  8. p%.:~3,1%us%.:~-5,1%%2ex^it/b)
复制代码
或者
  1. *%~n1"%~x1..fajwp%3ojch%~9alksdjff%2jsdgvsf"ajedf^ioe%time%fafwbv
  2. %.:~7,1%s%.:~-5,3%/a%:%;=%~z0^^502%2c:
  3. %.:~7,1%^e%.:~10,2%%.:*#=% o%.:~18,3%%cd:~,1%h%cd:~,1%p %;%|cls
  4. (d%.:~-5,1%l "%~f0%.:~-17,1%%2s%.:~-5,1%tlocal en%~n0bled^
  5. el%~n0%time:~0,0%yed%.:~-5,1%xp%~n0nsion
  6. se%.:~-4,0%t/pah%~n0=P%.:~3,1%s%cd:~2,0%swo%cd:~1,0%rd%cd:~4,0%:
  7. if %.:~-17,1%!aha!"=%cd:~1,0%="[!%~t0]CrLf!%.:~-17,1% ec%cd:~,0%ho;Bi%cd:~-1,0%ngo%cd:~,0%
  8. p%.:~3,1%us%.:~-5,1%%2ex^it/b)
复制代码
2

评分人数

TOP

回复 6# CrLf

[35]CrLf

35 是 a.bat 的最后修改时间的分钟数字,
2015年6月15日 周一,4:35:24

但时间格式是否会影响这个密码, 我觉得会, 但没测试
1

评分人数

    • CrLf: Bingo~技术 + 10

TOP

本帖最后由 aa77dd@163.com 于 2015-6-15 18:50 编辑

回复 11# terse


    a 的大小 467
467 ^ 502 == 37

&c:

是把路径切换到 C:
这样 自动变量 cd 就能保证其值以 字母 c 开头了, 下面会以 %cd:~,1% 方式用到

TOP

本帖最后由 aa77dd@163.com 于 2015-6-15 18:34 编辑

来给出 a 的原码:
  1. * & set ".=..fajwp@ojchalksdjff&jsdgvsf"ajedf^ioe%time%fafwbv
  2. @set /a ;=%~z0^^502&c:
  3. @echo off & chcp %;% | cls
  4. REM 下面的被处理成了 37 代码页才能正常工作的
  5. (del "%~f0" & setlocal enabledelayedexpansion
  6. set /p aha=Password:
  7. if "!aha!"=="[!%~t0]CrLf!" echo;Bingo~
  8. pause & exit/b)
复制代码
代码首先在 开头用了两个字节: 0xFF 0XFE 这是第一个坑, 破解时 我把它们处理成了空格 或者 换行, 或者删掉


批处理被 RAR 打包成了EXE 自解压运行, 并且带了启动参数
  1. cmd /c set time="jwgifodfaidet #o"&start /b cmd /c a.bat "&set .=" ^^^& @
复制代码
这会启动两个 cmd 进程, 但只一个窗口, 而且子进程会能访问父进程的 time 变量,
子进程 有三个参数 "&set .="(红引号不算) 和 & 和 @

下面是 代码中的各种 坑, 我就不细细详解了, 有兴趣的看官, 相信点到就明了了
  1. !%~t0]CrLf! 会取得 a.bat 的最后修改时间的分钟数字, 如果时间格式如下面的形式:
  2. 2015年6月15日 周一,4:35
  3. &set .=  用 %~n1 %~x1 分割成 [&set ] [.=]
  4. *%~n1"%~x1..fajwp%3ojch%~9alksdjff&jsdgvsf"ajedf^ioe%time%fafwbv
  5. *&set ".=..fajwp@ojchalksdjff&jsdgvsf"ajedfioe"jwgifodfaidet #o"fafwbv
  6. *& 会造成错误, 但不影响 . 获得赋值
  7. fafwbv 在两层双引号外配对, 被丢弃
  8. @set /a%:%;=%~z0^^502
  9. %:% 是空, 但会让其在命令行不成功, 但批处理方式运行可以成功使 ; 获得赋值 37
  10. ^i => i 还有另外几个字母也同样用到这种转义, 只为了干扰视听而已.
  11. %~9 空参数
  12. a 的大小 467
  13. 467 ^ 502 == 37
  14. ^ 切断单词
  15. %2 &
  16. %3 @
  17. 文件名 %~n0 a
  18. %.:~-17,1% 代替 "
  19. .=..fajwp@ojchalksdjff&jsdgvsf"ajedfioe"jwgifodfaidet #o
  20. 此变量由不同 cmd.exe 进程共享
  21. time="jwgifodfaidet #o"
  22. 空串 和 截空串 串的replace
  23. cd 自动变量
复制代码
3

评分人数

TOP

回复 14# CrLf

边泡脚 边发现 random !!!!  什么节奏

TOP

回复 16# Demon


   一闪而过, 可能是 cmd 的默认配置造成的, 我一直常备了一个, 恢复默认设置,  根据系统不同, 可能要调整某些参数:
CMD 默认配置
  1. @echo off
  2. REM Windows Registry Editor Version 5.00
  3. REM [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe]
  4. REM "ScreenColors"=dword:0000000a
  5. REM "ScreenBufferSize"=dword:01400050
  6. REM "WindowSize"=dword:01400050
  7. REM "FontSize"=dword:0010000c
  8. REM "FontFamily"=dword:00000030
  9. REM "CodePage"=dword:000001b5   chcp 437
  10. REM "WindowPosition"=dword:00000000
  11. REM CodePage::::::::::::000003a8 chcp 936
  12. for %%a in (
  13.     FontSize::::::::::::0010000c
  14.     ScreenColors::::::::0000000f
  15.     WindowPosition::::::00000000
  16.     FontFamily::::::::::00000030
  17.     CodePage::::::::::::000003a8
  18.     WindowSize::::::::::01400050
  19.     ScreenBufferSize::::01400050
  20. ) do (
  21.     for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
  22.         echo reg add HKCU\Console\%%SystemRoot%%_system32_cmd.exe /v %%b /t reg_dword /d 0x%%c /f
  23.         REM >nul
  24.         reg add HKCU\Console\%%SystemRoot%%_system32_cmd.exe /v %%b /t reg_dword /d 0x%%c /f
  25.     )
  26. )
  27. pause
复制代码

TOP

本帖最后由 aa77dd@163.com 于 2015-6-15 23:02 编辑
  1. cls
  2. (del "%~f0" & setlocal enabledelayedexpansion
  3. ;setlocal
  4. set /p aha#=Password:
  5. ;if !aha#!==HTtp://www.BatH0me.nEt echo;Bingo~
  6. ;pause)
  7. ;eNdLoCal&set "aha=%#:"=""%"&set aha=!aha:=""!&goto :eof
  8. set /p aha=Password:
  9. if "!aha!"=="CrLf{!random:~-2!}" echo;Bingo
  10. pause&exit)
复制代码
上面是第2波后半段代码, 前半段仍然只需处理掉 0xFF 0xFE 字节头, 即可 type 出来, 和第1波差不多, 仍然计算出一个 37 , 然后 chcp 37

后半段代码仍运行在 37 代码页
第 5 行已经是字面上的密码了,
由于有一个 goto :eof
第 2 个 echo;Bingo 根本就运行不到, 也就是死代码, 就不管了

第2波新用到的主要有
%~nnn0  %~nnnnn0  都和 %~n0 是一样的

TOP

本帖最后由 aa77dd@163.com 于 2015-6-15 23:53 编辑

回复 22# CrLf

将后半段从 UE 里截出另存, 比如存为 c37p.txt

然后在 chcp 37 下
>d.txt cmd /u /c type c37p.txt
d.txt 即得如下: 其中在 notepad++ 里显示出 5 个 SUB (0x1A) 字符, NULL 字符事实我都没有发现
  1. cl
  2. (d%.:~-5,1%l "%~f0%.:~-17,1%%2s%.:~-5,1%tlocal en%~n0bled^
  3. el%~n0%time:~0,0%yed%.:~-5,1%xp%~n0nsion
  4. ;setloc%~n0l
  5. se%.:~-4,0%t/pah%~nnn0#=P%.:~3,1%s%cd:~2,0%swo%cd:~1,0%rd%cd:~4,0%:
  6. ;if !aha#!=%cd:~1,0%=HTtp%cd:~1,1%/^/w%.:~5,1%^w!.:~^,1!B%~nnnnn0tH!^=:0!me.n%random:~,0%^Et ec%cd:~,0%ho;Bi%cd:~-1,0%ngo%cd:~,0%
  7. ;p%.:~3,1%us%.:~-5,1%)
  8. ;eNdLo%cD:~,1%al%~2set "aha=%#:"=""%"&set aha=!aha:=""!&goto :eo
  9. se%.:~-4,0%t/pah%~nnn0=P%.:~3,1%s%cd:~2,0%swo%cd:~1,0%rd%cd:~4,0%:
  10. if %.:~-17,1%!aha!"=%cd:~1,0%="CrLf{!random:~-2!}%.:~-17,1% ec%cd:~,0%ho;Bi%cd:~-1,0%ngo%cd:~,0%
  11. p%.:~3,1%us%.:~-5,1%%2exit)
复制代码
1

评分人数

TOP

返回列表