返回列表 发帖

批处理混合加密,你能破解吗?

若报毒为误报,以人品保证这只是用来测试加密效果的样品
运行后提示 Password: 等待输入密码,若密码正确会显示 Bingo~
大致效果类似于:
@echo off
set /p 输入=Password:
if %输入%==密码 echo Bingo~
pauseCOPY
你能破解密码吗?
第一个找出正确密码的坛友奖励 10 技术分,若能用文字解析加密手段另奖励最多 10 分(看完整程度),谁想来试试?

这个脚本混用多种加密手段,囊括常见方案、冷门技巧和一些早年未实现的构想,还埋了几个坑抑制取巧手段
脚本从来藏不住秘密,娱乐娱乐~

第一波:
链接: https://pan.baidu.com/s/1cARNHY-jbV0lgf-U064QLA 提取码: 9sin

第二波来袭,同样 10 分求抱走:
链接: https://pan.baidu.com/s/1fyCUKVMAoPGvK7BWsTB31w 提取码: w7rw

密码是“密码”这两个字,因为当“输入”这个变量等于“密码”这两个字符时显示bingo,代码中都写了

TOP

回复 41# xyxlhappy


    用 37 代码页输入就行

TOP

这是怎么加密的呀?

TOP

给跪了……
echo,hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5x>in.com

TOP

回复 35# zz100001


盲算得到的密码应是:
%CD%:COPY
然后为了测试运行,只能在 MZ 前面加个空格,验证无误

另外,试了下万能密码,也通过了:
" neq 1 if not "COPY

TOP

回复 36# bailong360


    凯撒加密是可逆的,可逆算法应该都一一对应才对,摘要算法才会出现密码不唯一的情况

TOP

回复 35# zz100001


    卧槽,64 位运行失败,提示不支持 16 位应用程序
    以 MZ 开头的文件被当可执行文件了,微软真偷懒,不检测 pe 有效性而直接判断文件头 2 字节,测试这样的代码也会报错:
MZ&pauseCOPY

TOP

回复 34# CrLf
嗯....要想一个复杂的判断输入是否正确的方式,比如先给密码套上几层算法,比如凯撒什么的...

群友凡心写过的一个脚本,不过据他所说算法尚有缺陷导致密码不唯一
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
::本程序主要功能
::    实现一个密码验证,当然是不容易破解的密码验证
::    密码验证的算法总有被破解的时候
::    能给作者带来成就的是在于寻找算法的过程
::   
::code by 凡心  2011-8-24
::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
color 0e
mode con: cols=70 lines=6
set im=echo I'm here!
set try=3
set "delay=for /l %%^%^%a in (1 1 2000) do echo.^^>nul"
:res
set col=07
set a=0
set/p mima=Please input password:
set code=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz
set code1=%code%
call :cod
call :word
for /f "delims=" %%i in ('call call echo %%%%m%o_o%%%%%') do (
color 07
call :ts %%i
)
::%im% And wrong here!
goto err
pause
goto :eof
:wro
set /a a+=1
call call set %mima:~0,1%=%%%%%%%mima:~0,1%%%%%%%
call call set %mima:~3,1%=%%%%%%%mima:~3,1%%%%%%%
call call set %mima:~4,1%=%%%%%%%mima:~4,1%%%%%%%
if %a% lss 2 goto wro
call call :%%%mima:~0,1%%%%%%mima:~3,1%%%%%%mima:~4,1%%% 2>nul
:err
cls
set /a try-=1
call :col
color 0c
echo.
echo Now! You are here, that's the password is wrong!! Thy again!
echo You will have %try% times to input the password!  
if %try% gtr 0 (goto res) else (color 0c&echo BAD NEWS! SAY BAY TO YOU NOW!!)
pause>nul
goto :eof
:ts
set aa=%1
call set _aa=%%aa:ai= %code1:~5,1%%code1:~23,1% %%
for %%j in (%_aa%) do (if "%%j" equ "%code1:~5,1%%code1:~23,1%" (goto :wro))
goto :eof
:word
for /l %%i in (0,1,61) do call set %%code:~0,1%%=%%code:~1,1%%&call set code=%%code:~1%%
call set %%D%%=P
call set %%M%%=K
call set %%Y%%=G
call set %%i%%=c
call set %%m%%=l
call set %%w%%=x
call set %%r%%=b
goto :eof
:col
if %col% equ 0c (color %col%&set col=07) else (color %col%&set col=0c)
%delay%
goto :eof
:cod
shift /1
set /a oo_1=%random%%%8+1
set /a oo_2=%random%%%8+1
set /a o_o="((%oo_1%^%oo_2%)|255)"
set /a o_o="(0%o_o%)>>3"
set m%o_o%=mima
goto :eof
:end
cls
mode con: cols=55 lines=4
echo.
echo     Congratulates! Your have got the password!
call :col
set /a n+=1
if %n% lss 30 goto end
pause>nul
exit
goto:eof
:p
pause
goto :eofCOPY

TOP

WORD才是最容易看到的,打开就有提示,这种乱码的藏起来都能找到,不过后面的不知道一坨啥就没看了。
我来发一个明文的,不去修改代码,凭你们对脚本的理解,试试能不能猜到密码呢,同样也是对了会显示 Bingo~

MZ201506.BAT
@ECHO OFF>NUL SET CD=MZ=Mir ZZ100001&MORE +1 %0>%TEMP%CD%~X0&CALL SET MZ=%CD%\%~N0%F0%.BAT&SET/PWD=PASSWORD:&CLS&CALL SET PWD=%%MZ%PWD%:~1,1%%&START FILE:///%TEMP%CD%~X0&CLS&EXIT
MZ=%CD%&SET %CD%=%%CD%%"&SET /P CD=<Mir Zz100001 Presents>NUL SET PWD=%CD%&CALL SET PWD=%%MZ%%&MODE CON: CP SELECT=437
SET PWD=%CD%%PWD%
ECHO OFF
CLS
IF "%WD%"=="%PWD%" ECHO Bingo~
PAUSECOPY

TOP

回复 33# tigerpower


可以是可以,不过观察了下 00~7f 区间的代码页貌似只有两套:
以 ASCII 标准为基础的系列,例如 437、936
IBM EBCDIC (US-Canada) 系列,例如 37、1140
也就是说,目前没找到 windows 自带的第三类代码页能够使英文字符在 437 和 37 下都显示为乱码
除非添加自制代码页,这只是理论上的构想,不确定是否需要重启生效

应该木有第三波了,没什么好办法。
其实除了代码页和特殊字符之外还想到了一招数据流可以对抗编辑器,不过我感觉破解起来也是分分秒秒的事...
至于 OD,我想这就只能考虑给 cmd 加上自制反调试壳了,然而某些家伙会给我这个机会吗?

TOP

本帖最后由 tigerpower 于 2015-7-4 06:31 编辑

回复 32# CrLf

多搞几个代码页

TOP

回复 31# tigerpower


    其实我想过自制代码页实现加密,但限制太多,也太明显,没什么实用价值

TOP

本帖最后由 tigerpower 于 2015-7-4 06:53 编辑

回复 30# CrLf

第3波搞个其他的代码页

TOP

回复 29# Demon


    擦擦擦擦擦

TOP

返回列表