Board logo

标题: 也来玩把加密新思路: [打印本页]

作者: bat-zw     时间: 2008-6-22 20:40    标题: 也来玩把加密新思路:

先稍稍变下形:
@echo off&setlocal enabledelayedexpansion
set code=a b c d e f g h i j k l m n o p q r s t u v w x y z
set "zw=for %%i in (%code%) do "&set "wz=set "&set "ww=call :zh"
%ww%
!_5!!_3!!_8!!_15! !_2!!_2!!_19!.!_2!!_1!!_20!!_8!!_15!!_13!.!_3!!_14!
!_16!!_1!!_21!!_19!!_5!
:zh
%zw%(%wz%/a n+=1&%wz%_!n!=%%i)

作者: mbllokmb     时间: 2008-6-22 20:45
高手!!!!
作者: knoppix7     时间: 2008-6-22 21:14
用变量换命令
巧..不过导出一下变量表...
作者: bat-zw     时间: 2008-6-22 21:33


  Quote:
Originally posted by knoppix7 at 2008-6-22 21:14:
用变量换命令
巧..不过导出一下变量表...

再加入密码认证(输入后不报错,但错误的是运行不了的),先不改字母顺序:
@echo off&setlocal enabledelayedexpansion
set /p code=请输入运行密码:
set "zw=for %%i in (%code%) do "&set "wz=set "&set "ww=call :zh"
%ww%
!_5!!_3!!_8!!_15! !_2!!_2!!_19!.!_2!!_1!!_20!!_8!!_15!!_13!.!_3!!_14!
!_16!!_1!!_21!!_19!!_5!
:zh
%zw%(%wz%/a n+=1&%wz%_!n!=%%i)
这样就是导出了变量,不知道密码也是不行的,呵呵。

[ Last edited by zw19750516 on 2008-6-22 at 09:36 PM ]
作者: pusofalse     时间: 2008-6-22 22:30
a b c z e q q h...
密码不是绝对的啊。。。 花点时间,能想出多个密码~
作者: HAT     时间: 2008-6-22 22:35
万一错误的密码被组合成del或者rd之类的命令就郁闷了,呵呵。
作者: pusofalse     时间: 2008-6-22 22:41
感觉这贴有利于新手了解 何谓变量的扩展~
作者: bat-zw     时间: 2008-6-22 22:43


  Quote:
Originally posted by HAT at 2008-6-22 22:35:
万一错误的密码被组合成del或者rd之类的命令就郁闷了,呵呵。

哈哈,是的,这样看来就是用暴力破解也不行了。
作者: bat-zw     时间: 2008-6-22 22:58


  Quote:
Originally posted by pusofalse at 2008-6-22 22:30:
a b c z e q q h...
密码不是绝对的啊。。。 花点时间,能想出多个密码~

如果我的密码是这样的呢:a 0 z # c 4 + q - ....................x @,我想密码肯定是绝对的,而且基本解不出来。呵呵,这个思路是我今天睡床上想到的,应该算是原创,至少在cn-dos还没人提出来。
作者: pusofalse     时间: 2008-6-22 23:30
看下前辈的代码,没有用到z这个字母 所以z可以去掉。。。
a b c这三个都有,那么得确保前三个字母必须是a b c
也没有用到d 那么第四位上随便任何一个字母或数或汉字都可以了~
e必须在第五位。。等等。。
依此得出根据。。

[ Last edited by pusofalse on 2008-6-22 at 11:34 PM ]
作者: pusofalse     时间: 2008-6-23 00:13

a b c CN e  dos 批 h encryption 处 理 室 m n o p 。 加 s t u 密 新 思 路 .
每个位置只可以换一次的话,可以有19个密码。。
如果可以换多次,可以有无数个密码~
只是得确保位置。。。

[ Last edited by pusofalse on 2008-6-23 at 12:30 AM ]
作者: bat-zw     时间: 2008-6-23 00:27


  Quote:
Originally posted by pusofalse at 2008-6-23 00:13:
a b c CN e  dos 批 h encryption 处 理 室 m n o p 。 加 s t u 密 新 思 路 .
每个位置只可以换一次的话,可以有14个密码。。
如果可以换多次,可以 ...

晕,我可以乱序并将无用的字符添加进密码,再自己根据密码来修改批处理,这就是我的思路啊,如:当密码code为b a c........时,批处理中所有a写为!_2!,当密码code为..........................s g a(第30位)时,批处理中所有的a写为!_30!
作者: pusofalse     时间: 2008-6-23 00:37


  Quote:
Originally posted by zw19750516 at 2008-6-23 12:27 AM:

晕,我可以乱序并将无用的字符添加进密码,再自己根据密码来修改批处理,这就是我的思路啊,如:当密码code为b a c........时,批处理中所有a写为 ...

哦~ 原来如此,还要再修改批处理的吗~ 那样的话可真不好破。。。万一自己忘了怎么办呢,^_^
作者: bat-zw     时间: 2008-6-23 00:54


  Quote:
Originally posted by pusofalse at 2008-6-23 00:37:


哦~ 原来如此,还要再修改批处理的吗~ 那样的话可真不好破。。。万一自己忘了怎么办呢,^_^

自己写份密文对照表,也可以通过一个加密批处理来批量加密,总之办法多的事,关键看你的思路。
ps:如这样加密的话,别人就是再怎么在批处理中插入echo也是没用的,因为首先要对code进行正确赋值才能运行被加密的任一句命令。

[ Last edited by zw19750516 on 2008-6-23 at 12:57 AM ]
作者: PPdos     时间: 2008-6-23 08:01
使用变量替代命令的思路在批处理病毒应用中经常遇到,这里应用的不是"密码"而是"密文" 密文有一个最大的缺点就是,程序越长密文越容易被破解,因为一些命令会反复出现,并且均出现在每行前。
作者: quya     时间: 2008-6-23 17:40
暂时看不懂.

不过我看不懂的东西, 应该都是好东西. 再加上楼主帮助过我, 顶了再说.
作者: bat-zw     时间: 2008-6-23 17:54
下面这个就是我用这个思路写的批量加密程序加密的一个小批处理,大家试试着破解下看:
@echo off
set /p code=请输入运行密码:
cls&call :zw
%.33%%.31%%.4%%.25%%.10% %.10%%.14%%.14%&%.19%%.31%%.6%%.5%%.10%%.4%%.27%%.5% %.31%%.18%%.27%%.32%%.5%%.31%%.22%%.31%%.5%%.27%%.17%%.31%%.22%%.31%%.15%%.2%%.27%%.18%%.19%%.13%%.10%%.18%
%.19%%.31%%.6% "%.30%%.27%%.28%=%.11% %.29% * %.24%"
for /f "tokens=1-4 delims= " %%a in ("%var%") do call :lp %%a %%b %%c %%d
%.2%%.27%%.1%%.19%%.31%>%.18%%.1%%.5%&%.8%%.10%%.6%%.10% :%.31%%.10%%.14%
:lp
for /l %%i in (1,1,9) do (
    for /l %%j in (1,1,%%i) do (
        set /a a=%%i%1%%j
        %.13%%.14% !%.27%! %.5%%.19%%.19% 10 %.19%%.31%%.6% %.27%= !%.27%!
        set str=!str! %%i%1%%j=!a!
        if %%i equ %%j echo !str!&set "str="
    )
)
if "%1" equ "/" goto :eof
%.19%%.25%%.13%%.14%%.6%
goto lp
pause>nul&goto :eof
:zw
for %%i in (%code%) do (set /a n+=1&call,set .%%n%%=%%i)
破解(不是猜)出来的,没说的我加15分。

[ Last edited by zw19750516 on 2008-6-23 at 05:56 PM ]
作者: pusofalse     时间: 2008-6-23 20:06
u p 运 c l t 运 g 运 o + 运 i f x 运 y n s 运  运 d 运 / h 运 a r - v e b @

没有用到的都用“运”字代替了~ 九九法则~^_^
作者: PPdos     时间: 2008-6-23 21:22
迟到了。。没赶上**!

楼上写出来 我就说下思路好了

因为变量是有序赋值的 所以找到出现的最大位数 即33

也就是密文最少要33位(空格隔开的)

然后再根据批处理习惯特征来判断吧:

比如

  Quote:
>%.18%%.1%%.5%

既然出现了">"符号 很容易让我们尝试 ">nul"

那么 我就可以先假定密文的第 18位为n 密文 第一位为 u 密文第五位 为l

依次类推:

  Quote:
&%.8%%.10%%.6%%.10% :%.31%%.10%%.14%

出现了衔接符号& 和标签 标记冒号":" 我们调用标签除了goto 就是call

goto 的形式 很满足 8 10 6 10 所以我们假定 密文第8位 为"g" 第十位为"o"
第六位为 "t"

如果不是靠猜 那还真难弄出来

[ Last edited by PPdos on 2008-6-23 at 02:24 PM ]
作者: quya     时间: 2008-6-23 21:30
天哪,看了解释也看不懂啊。哪位好心人能耐心解释下,让我这个老年纪的人也学学吗?

特别是 %.33%%.31%%.4%%.25%%.10% 这种咚咚,看了就犯晕,整个儿就是云里雾里,楞是不懂啥名堂。

我想从简单的学起, 也就是楼主的第一个例子开始。

[ Last edited by quya on 2008-6-23 at 09:32 PM ]
作者: pusofalse     时间: 2008-6-23 22:01


  Quote:
Originally posted by quya at 2008-6-23 09:30 PM:
天哪,看了解释也看不懂啊。哪位好心人能耐心解释下,让我这个老年纪的人也学学吗?

特别是 %.33%%.31%%.4%%.25%%.10% 这种咚咚,看了就犯晕,整个儿 ...

@echo off
set /p code=请输入运行密码:
cls&call :zw
%.33%%.31%%.4%%.25%%.10% %.10%%.14%%.14%&%.19%%.31%%.6%%.5%%.10%%.4%%.27%%.5% %.31%%.18%%.27%%.32%%.5%%.31%%.22%%.31%%.5%%.27%%.17%%.31%%.22%%.31%%.15%%.2%%.27%%.18%%.19%%.13%%.10%%.18%
%.19%%.31%%.6% "%.30%%.27%%.28%=%.11% %.29% * %.24%"
for /f "tokens=1-4 delims= " %%a in ("%var%") do call :lp %%a %%b %%c %%d
%.2%%.27%%.1%%.19%%.31%>%.18%%.1%%.5%&%.8%%.10%%.6%%.10% :%.31%%.10%%.14%
:lp
for /l %%i in (1,1,9) do (
    for /l %%j in (1,1,%%i) do (
        set /a a=%%i%1%%j
        %.13%%.14% !%.27%! %.5%%.19%%.19% 10 %.19%%.31%%.6% %.27%= !%.27%!
        set str=!str! %%i%1%%j=!a!
        if %%i equ %%j echo !str!&set "str="
    )
)
if "%1" equ "/" goto :eof
%.19%%.25%%.13%%.14%%.6%
goto lp
pause>nul&goto :eof
:zw
for %%i in (%code%) do (set /a n+=1&call,set .%%n%%=%%i)

红色那句,对输入的code依次进行赋值...
比如code的值是a b c d e f g。。。。。。。。。。10(10在第33位)
当n等于1时 .1的值就是a
当n等于2时 .2的值就是b
当n等于3时 .3的值就是c
.... .....
当n等于33时 .33的值就是10
依次。。。直到全部赋值完毕
然后返回主过程,继续向下执行。。。
%.33% 会扩展为10
比如%.31%的值为h
%.4%的值为z
%.25%的值为l
%.10%的值为w

%.33%%.31%%.4%%.25%%.10%相当于执行10hzlw,这不是命令,所以会出现“不是内部或外部命令”的错误信息。。。
只有在赋值正确之后才会正确执行
正确的赋值应该是:
.33=@
.31=e
.4=c
.25=h
.10=o
所以%.33%%.31%%.4%%.25%%.10% 就是@echo 正确的命令。。。
而赋值是否正确,完全取决于输入密码时的字符顺序~
隐藏符号@只有在33位时才会被正确赋值。。。依此。。。

我讲的太繁琐。。。
作者: quya     时间: 2008-6-23 22:13
我太笨了,还是不懂。

我只知道 %x%, %y%, %%i, %i, %0 , %1, %2 之类的, 不懂 %.31%,  难道这个 .31和上面我列出的一样意思? 我钻牛角尖了, 因为我从来没看到过变量取.31这样的, 我一直以为那个“.”很高深莫测, 难道我想歪了??

还有 !_5!!_3! 中的“_”也是莫测高深,难道不是? 阿门!

[ Last edited by quya on 2008-6-23 at 10:16 PM ]
作者: pusofalse     时间: 2008-6-23 22:18


  Quote:
Originally posted by quya at 2008-6-23 10:13 PM:
我太笨了,还是不懂。

我只知道 %x%, %y%, %%i, %i, %0 , %1, %2 之类的, 不懂 %.31%,  难道这个 .31和上面我列出的一样意思? 我钻牛角尖了, 因为我从来没 ...

想复杂了~ 完全可以把.或_去掉~
作者: quya     时间: 2008-6-23 22:22


  Quote:
Originally posted by pusofalse at 2008-6-23 10:18 PM:


想复杂了~ 完全可以把.或_去掉~

谢谢, 这样我就可以慢慢看了, 我一上来就失去了信心。

不懂再向各位请教, 再次感谢。

另, 我有一点想不通,我的加密没这么复杂, 怎么到现在也没人破我的。
作者: PPdos     时间: 2008-6-23 22:31
老土神仙 这里是给.赋值阿
set .=haha
echo %.%

作者: pusofalse     时间: 2008-6-23 22:43


  Quote:
Originally posted by quya at 2008-6-23 10:22 PM:


谢谢, 这样我就可以慢慢看了, 我一上来就失去了信心。

不懂再向各位请教, 再次感谢。

另, 我有一点想不通,我的加密没这么复杂, 怎么到现在也没人破我的。

^_^ 我看过你的那篇帖子。。。愣是没找到要解密的东东在哪~
作者: quya     时间: 2008-6-23 22:51


  Quote:
Originally posted by pusofalse at 2008-6-23 10:43 PM:

^_^ 我看过你的那篇帖子。。。愣是没找到要解密的东东在哪~

在的,要解密的部分我贴出来了, 这儿的楼主也解了1-2步, 但没解到我要求的那一步,绝对不比这儿复杂,但比这儿繁。

原帖在这儿:http://www.cn-dos.net/forum/viewthread.php?tid=41040&fpage=4

[ Last edited by quya on 2008-6-26 at 06:39 PM ]
作者: bat-zw     时间: 2008-6-24 02:12


  Quote:
Originally posted by pusofalse at 2008-6-23 20:06:
u p 运 c l t 运 g 运 o + 运 i f x 运 y n s 运  运 d 运 / h 运 a r - v e b @

没有用到的都用“运”字代替了~ 九九法则~^_^

我的贴子兄弟基本上都关注过,为防别人猜出来,我还是做了点手脚,如兄弟是解出来的,请贴出这个批处理的原文,也许我还真的是以小人之心度君子之腹了,但兄弟的解是不完全对的,其实这只是给大家看一看我做的这个批量加密程序的效果,如真要求解码,绝对不会是这么简单的事的。
作者: bat-zw     时间: 2008-6-24 02:15


  Quote:
Originally posted by PPdos at 2008-6-23 21:22:
迟到了。。没赶上**!

楼上写出来 我就说下思路好了

因为变量是有序赋值的 所以找到出现的最大位数 即33

也就是密文最少要33位(空格隔开的)
...

解的思路正确,也为我下一步加密提了好的意见(我将改得更加面目全非)
作者: pusofalse     时间: 2008-6-24 02:45    标题: 这是源代码


@echo off&setlocal enabledelayedexpansion
set "var=+ - * /"
for /f "tokens=1-4 delims= " %%a in ("%var%") do call :lp %%a %%b %%c %%d
pause>nul&goto :eof
:lp
for /l %%i in (1 1 9) do (
    for /l %%j in (1 1 %%i) do (
        set/a a=%%i%1%%j
        if !a! lss 10 set a= !a!
        set str=!str! %%i%1%%j=!a!
        if %%i equ %%j echo !str!&set "str="
)
)
if "%1" equ "/" goto :eof
shift
goto lp
pause>nul&goto :eof
[ Last edited by pusofalse on 2008-6-24 at 02:47 AM ]
作者: pusofalse     时间: 2008-6-24 05:08


  Quote:
Originally posted by zw19750516 at 2008-6-24 02:15 AM:

解的思路正确,也为我下一步加密提了好的意见(我将改得更加面目全非)

难道要无序的赋值?~
作者: PPdos     时间: 2008-6-24 06:41
怎么可能无序赋值 难道要用到随机数

或者是三条for交叉set?

要不就是证书原理公匙加密匙

楼主 你不会引用vbs吧。。。?
作者: jiuzhou1     时间: 2008-6-24 10:40
好东西,应该加精
其实命令倒好猜测,如果要显示echo msdos,那么后面的msdos就不好猜了。因为你如果随便输入数值也会正确显示,在批处理加密方确实是好东西
作者: wxcute     时间: 2008-6-24 22:09
都是高人,研究下先.有点难阿.
作者: wxcute     时间: 2008-6-24 22:23
一环套一环,看着有点晕。

复杂,看懂开篇了。



第三张图片上传不了了。
@echo off
::第二步简化

::set code=a b c d e f g h i j k l m n o p q r s t u v w x y z
::     1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
::              1          2
::!_5!!_3!!_8!!_15! !_2!!_2!!_19!.!_2!!_1!!_20!!_8!!_15!!_13!.!_3!!_14!
::!_16!!_1!!_21!!_19!!_5!

echo bbs.bathom.cn
pause
[ Last edited by wxcute on 2008-6-24 at 11:10 PM ]
作者: huahua0919     时间: 2008-6-26 17:50
好东西。尝试了一下,发现还真的起到作用
@echo off&&setlocal enabledelayedexpansion
set "a=echo "
set /p Fast=please input your data:
:lp
set Fst=%Fast:~0,1%&set Fast=%Fast:~1%
set "Sum=!Sum!%Fst% "
if defined Fast goto lp
for %%a in (%Sum%) do (
set/a n+=1
set _!n!=%%a
)
%a%%_6% %_11%%_2%%_1%%_5% %_8%%_16%%_17%
pause
::1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
:::v o     e     y       l                 u
::;v o x ~ e x x y x xx xx xx xx xx xx xx xu
::密码1:vox@eixynxlx~5#ou
::密码2:lix@lixynxkx~5#ou
提供的密钥不一样,得到的效果就不一样。
以后就用楼主的代码写批处理了,到时候不要说我侵权啊
作者: plp626     时间: 2008-6-26 19:42
这个方法, 搜索知道,上一代人已经讨论过,vkill有个帖子