中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: BAT转EXE测试 上一主题 | 下一主题
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『楼 主』:  BAT转EXE测试

这是一个测试品,其实是BAT转成VBS,在包装成EXE的,批处理文件取自此贴一楼贴出来的代码:

http://cn-dos.net/forum/viewthread.php?tid=50226


其实VBS代码也不好加密保护的,所以我把它用一个工具 ScriptCryptor 弄成 exe 的,据说不会被破解。

由于试验还在继续,先发个半成品上来,看看各位有没有什么方法能得到源代码,如果能破解的话就没必要再继续了。

附件 1: test.zip (2010-7-3 19:07, 92.85 K,下载次数: 24)
2010-7-3 19:01
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 2 楼』:  

几年前貌似就说了ScriptCryptor可以破解。。。他可能意思是他不调用wscript?
所以无文件形式?这个就不清楚了。。。反正内存里面直接dump的出来。。


'http://cn-dos.net/forum/viewthread.php?tid=50226



Dim ching, env
Set ching = CreateObject("WScript.Shell")
Set env = ching.Environment("PROCESS")
Set fso = CreateObject("Scripting.FileSystemObject")
batFile = "test.bat"

env("关闭显示") = "@echo off"
env("变量延迟") = "SETLOCAL ENABLEDELAYEDEXPANSION"
env("强制切换中文代码页") = "(CHCP 437 &GRAFTABL 936)>NUL"
env("颜色白蓝") = "color f1"
env("变量tit") = "set tit=SYBN 演示脚本 裁剪自 ""SYBN DLL 0.0.1""[SD.bat]"
env("变量SYBCOM") = "SET SYBCOM=A100;E8A 80 CD89 C581 81 F980 7F06 CD09 8016 1F9 687F 64EB 83BE E800 65 5AE3 73E8;3C00 7F18 8853 E8C6 57 4CE3 65E8 3C00 7F4F 8845 B0C2 F602 50E2 A0B0 E6F6 15F;E8C7 3D 32E3 C387 393C 27E 904 FB80 7E39 8003 9C3 F24 E380 C00F 4E0 D808;B850 B800 750 295A 89F5 EBE9 AC46 ACAC ACAC F7E2 4CB4 21CD FAEB E088 4CB4;21CD ACAC 203C 475 F9E2 9EB C388 3CAC 7520 E202 C3F9 C387 302C EB80 B430;F60A E4 C3D8 5953 4E42 DED0 C4B8 3032 3930 3231 3631 AC24 243C A74 88AA AAD0;F5E2 B4EB B2EB E349 49AF ACE3 B6E8 E3FF 87A7 3CC3 7E39 402 8009 39FB 37E;C380 2409 800F FE3 10B2 E2F6 D800 C288 C7E2 86EB"
env("变量一") = "SET U=;A80;DB 2D 0D ""11230fcS$f6Y$f1B$f9N $f3dll $f9演示脚本 0.01"" 0D;;RCX;F0;G;Q"
env("变量二") = "SET V=;A80;DB 2A 0D ""11330f0[   .:2010$fc-$f002$fc-$f004:.   ]"" 0D;;RCX;F0;G;Q"
env("变量三") = "SET W=;A80;DB 00 0D 0D;;RCX;F0;G;Q"
env("X0X13") = "SET A=0=0;1=0;2=0;3=2;4=2;5=A0;6=A0;7=A2;8=0;9=A4;10=4;11=A0;12=0;13=4"
env("Y0Y13") = "SET B=;0=2;1=A0;2=A2;3=0;4=A0;5=0;6=2;7=0;8=A4;9=0;10=A0;11=4;12=4;13=0"
env("AB") = "SET X%A:;=&SET X%%B:;=&SET Y%"
env("标题") = "TITLE !tit!"
env("提示") = "ECHO !tit!正在初始化,请按任意键继续..."
env("DEBUG_SYBC") = "(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%W:;=&ECHO.%)|DEBUG>NUL"
env("标签") = ":0"
env("随机数") = "SET /A f=%random%%%50"
env("判断大小") = "IF %F% LSS 14 SET X=!X%F%!&SET y=!y%F%!"
env("颜色灰白") = "color f7"
env("彩字1") = "(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%U:;=&ECHO.%)|DEBUG>NUL"
env("彩字2") = "(ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL"
env("全屏内容移动") = "(echo m b800:%X% fa0 b800:%Y%&echo q)|debug >nul"
env("转到标签") = "goto :0"


sContent = "" & _
        "setlocal enabledelayedexpansion" & vbCrLf & _
        "" & vbCrLf & _
        "%关闭显示%" & vbCrLf & _
        "::::SYBN 演示脚本 内含注释 默认一律注释下一行的意义::::::" & vbCrLf & _
        "" & vbCrLf & _
        "::打开延迟环境变量" & vbCrLf & _
        "%变量延迟%" & vbCrLf & _
        "" & vbCrLf & _
        "::初始页码防止运行16位子系统后系统默认语言被改成英文从而不支持中文(脚本不含中文可省略此行)" & vbCrLf & _
        "%强制切换中文代码页%" & vbCrLf & _
        "" & vbCrLf & _
        "::初始颜色" & vbCrLf & _
        "%颜色白蓝%" & vbCrLf & _
        "" & vbCrLf & _
        "::定义脚本名/版本" & vbCrLf & _
        "%变量tit%" & vbCrLf & _
        "" & vbCrLf & _
        "::存储sybc的16进制数据" & vbCrLf & _
        "%变量SYBCOM%" & vbCrLf & _
        "" & vbCrLf & _
        "::存储调用sybc显示彩色的""SYBC dll 演示脚本 0.01""的16进制DEBUG指令数据" & vbCrLf & _
        "%变量一%" & vbCrLf & _
        "" & vbCrLf & _
        "::存储调用sybc显示彩色的""[   .:2010-02-08:.   ]""的16进制DEBUG指令数据" & vbCrLf & _
        "%变量二%" & vbCrLf & _
        "" & vbCrLf & _
        "::存储调用sybc获取键盘输入的DEBUG指令数据" & vbCrLf & _
        "%变量三%" & vbCrLf & _
        "" & vbCrLf & _
        "::压缩简化代码 存储X0-X13的值" & vbCrLf & _
        "%X0X13%" & vbCrLf & _
        "" & vbCrLf & _
        "::压缩简化代码 存储Y0-Y13的值" & vbCrLf & _
        "%Y0Y13%" & vbCrLf & _
        "" & vbCrLf & _
        "::解压缩变量A,B中存储的X*,Y*的值" & vbCrLf & _
        "SET X%A:;=&SET X%%B:;=&SET Y%" & vbCrLf & _
        "" & vbCrLf & _
        "::显示标题" & vbCrLf & _
        "%标题%" & vbCrLf & _
        "" & vbCrLf & _
        "::显示提示语" & vbCrLf & _
        "%提示%" & vbCrLf & _
        "" & vbCrLf & _
        "::利用DEBUG运行sybc,由于没有生成SYBC.com,参数存储在变量W" & vbCrLf & _
        "%DEBUG_SYBC%" & vbCrLf & _
        "" & vbCrLf & _
        "::::初始化完成,以下是主体部分代码::::::::::::::::::::::::::" & vbCrLf & _
        ":0" & vbCrLf & _
        "" & vbCrLf & _
        "::获取一个0-49的随机数" & vbCrLf & _
        "SET /A f=%random%%%50" & vbCrLf & _
        "" & vbCrLf & _
        "::如果随机数小于14,把变量x,y定义为与随机数对应的X*,Y*" & vbCrLf & _
        "IF %F% LSS 14 SET X=!X%F%!&SET y=!y%F%!" & vbCrLf & _
        "" & vbCrLf & _
        "::改变屏幕上所有内容的颜色为灰色" & vbCrLf & _
        "%颜色灰白%" & vbCrLf & _
        "" & vbCrLf & _
        ":调用DEBUG显示彩色的""SYBC dll 演示脚本 0.01""" & vbCrLf & _
        "%彩字1%" & vbCrLf & _
        "" & vbCrLf & _
        "::存储调用sybc显示彩色的""[   .:2010-02-08:.   ]""" & vbCrLf & _
        "%彩字2%" & vbCrLf & _
        "" & vbCrLf & _
        "::=========================================================" & vbCrLf & _
        "::关键代码把显示缓存B800段中,X开始的内容存储到Y开头的位置" & vbCrLf & _
        "::以此来实现全屏内容移动的功能" & vbCrLf & _
        "%全屏内容移动%" & vbCrLf & _
        "::=========================================================" & vbCrLf & _
        "" & vbCrLf & _
        "goto :0" & vbCrLf

if fso.FileExists(batFile) then fso.DeleteFile(batFile)
fso.CreateTextFile(batFile, True).Write sContent
While Not fso.FileExists(batFile)
        WScript.Sleep 200
WEnd
fso.GetFile(batFile).Attributes = 6
ching.run batFile



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-4 16:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  脚本的话,还是开源吧。。。

加密脚本还是很辛苦的。。。与其这样加密还不如看半天VB,改写VBS到VB并不用改多少代码。

VB编译出来的,要看的话,我是不想看,比VC的反编译还晕,全跳到运行库,一句句解释。。。悲剧。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-4 16:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 4 楼』:  

原来是能破解的啊。。。

平时不用VB,也没什么用,懒得去学了。

2010-7-5 11:22
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
defanive
初级用户





积分 111
发帖 62
注册 2007-12-31
状态 离线
『第 5 楼』:  

这个批处理加密还没被破解。。。
http://cn-dos.net/forum/viewthread.php?tid=51365

2010-7-5 21:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 6 楼』:  

bathome看到不是netbenton解了?

看到壳就懒得搞了。。。在脚本加密上投入太多不值得。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-5 22:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
defanive
初级用户





积分 111
发帖 62
注册 2007-12-31
状态 离线
『第 7 楼』:  

呵呵,那个不算破解。。。
cmd运行一行就读到内存里。。。
不断读内存,拼凑出来的源码。。。
当然,即使脱壳也难以破解。。。

2010-7-5 22:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 8 楼』:  你自己也最多说个难以破解。。。

我只能说绝对能破解(总有那么多牛的能搞的)。。。我也爱好看看逆向,水平有限,不想花精力到这个上。。。

还有我在bathome提到的实用性。。。一个简单bat要exe+dll
如果一个脚本你看不到源码,你会双击麽?

exe最多扫描下,然后就确定运行了。

如果知道是脚本的话,不知道啥内容是不运行的。
(不过现在用bat的机会不多了,高级的需求,bat完成不好,简单的自己写啦)

能拿到源码就好了,不算破解?
你要调用cmd的话,直接cmd开刀,将运行的内容输出,貌似……
所以说脚本的加密还是比较废的。
上面的VBS的加密,是那个工具自己创建了个SCRIPT对象执行,所以看不到wscript.exe
但是还是运行啦。。。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-6 08:59
查看资料  发短消息 网志   编辑帖子  回复  引用回复
defanive
初级用户





积分 111
发帖 62
注册 2007-12-31
状态 离线
『第 9 楼』:  

那个样本是顺序执行的,所以可以一行一行拼出来。。。
要是调用call,for啥的循环语句,还得人工慢慢分析。。。
最后得出的源码跟作者的源码是有出入的。。。

暂时来说,我这个加密是维持得最久的吧,好像还没人破呢。。。

2010-7-6 20:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

恩,也是最复杂的。那你就应用吧,这个样子估计没让想看源码了,不当他是bat



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-6 21:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
defanive
初级用户





积分 111
发帖 62
注册 2007-12-31
状态 离线
『第 11 楼』:  

呵呵,起码是给批处理加密做了点贡献了。。。
但是现在还有个问题,我要加密一个批处理就得重新编译一次。。。
真是杯具。。。

2010-7-6 22:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qinchun36
高级用户

据说是李先生


积分 609
发帖 400
注册 2008-4-23
状态 离线
『第 12 楼』:  

for 没有问题,关键是变量和预处理的问题,%%i 要改成 %i ,标签只能原样,而且如果有set 出来的变量就不好搞了。
之前有那种每个字符都用环境变量的“加密”代码,不知道有没有这种问题。

我对批处理的什么机制没有研究过,所以没办法解决它预处理的问题。这里只是试验一种思路,就是VBS的PROCESS类型环境变量只在运行这一个批处理的进程中有效,在内存里谁也看不见,达到了隐藏代码的目的(VBS脚本被发现是另一方面的问题了)。

[ Last edited by qinchun36 on 2010-7-7 at 09:49 ]

2010-7-7 09:38
查看资料  发送邮件  发短消息 网志  OICQ (182484135)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 13 楼』:  

这就暴露了我说的实用性了……
不知道只是简单编译下,还是要对dll的代码进行修改,如果还要改的话,与bat就有些距离了。。。不能算纯种的bat了。


如果能写出工具,bat生成出这个dll那就好了。



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2010-7-7 22:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
shiyuping2008
新手上路





积分 8
发帖 7
注册 2010-3-1
状态 离线
『第 14 楼』:  

平时不用VB,也没什么用,懒得去学了

2010-7-8 01:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
defanive
初级用户





积分 111
发帖 62
注册 2007-12-31
状态 离线
『第 15 楼』:  

回复13L:
额,其实就是把批处理源码复制到dll的源码里面,然后编译一次。。。
加密一次bat也就半分钟的事,但是就要编译。。。
杯具,如果是用资源的形式储存的话就容易被破解。。。

2010-7-8 04:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: