Board logo

标题: [系统相关] 如何给批处理加密? [打印本页]

作者: zhang8682    时间: 2010-4-19 17:06     标题: 如何给批处理加密?

最近看论坛见到有人说批处理加密都可以被破解不知道是否是这样,是否有相对强壮的加密软件呢?

最近公司项目需要,做了一个专门用途的批处理,需要安装在服务器上,为了防止他人盗用,需要限制其他机器拷贝使用。目前我们的考虑是希望和cpu或主板绑定,我记得cpu好像有唯一的身份序列。验证后方可通行。不知道是否可以做到,如果困难,是否有其他好方法呢?

希望给为能予以指教,谢谢。
作者: zhang8682    时间: 2010-4-19 17:17

刚刚和一位高手交流了一下,觉得还是比较困难。
我想是否可以和系统的序列号绑定呢?比如如果相同则通过,不同就屏蔽掉无法使用。不知是否可以实现呢?
作者: qzwqzw    时间: 2010-4-19 17:42

楼主提到的实际上两个问题
一是程序的运行限制
二是程序的自身加密
第一个问题方案有很多
包括你所说的CPU序列号绑定都不是太难的问题
第二个问题目前没有绝对稳妥的方案

只能给三个提示

把批处理做的不像批处理
这样有心人就不会想到破解批处理的办法去破解它


在此基础上选用相对稳妥的方案就可以了
比如一些流行的批处理编译器


做项目
尤其是赚钱的项目
不要使用批处理
批处理没有版权保护可言
作者: hanyeguxing    时间: 2010-4-19 17:46

注意,以下方法不适合分发运行这个批处理:
1,在批处理最后加上del %0,批处理命名例如:实验.bat
2,使用winrar压缩这个批处理为rar,并设置密码为123456789,名称例如:实验.rar
3,需要的时候,使用以下示例命令运行该rar:
  1. cmd /k ""D:\Program Files\xerox\WinRAR\rar" x -o+ -hp123456789 "d:\实验.rar" "c:\"&"c:\实验.bat""
复制代码

[ 本帖最后由 hanyeguxing 于 2010-4-19 17:54 编辑 ]
作者: GNU    时间: 2010-4-19 17:51

BAT不适合,换成其他高级语言把。
作者: caruko    时间: 2010-4-19 17:57

用批处理来做这个?
winrar,也是可以被解密的吧...
不过相对批处理来说,加密强度高不少了

关键用途的程序,还是用高级语言来写吧..
作者: caruko    时间: 2010-4-19 18:00

原帖由 hanyeguxing 于 2010-4-19 17:46 发表
注意,以下方法不适合分发运行这个批处理:
1,在批处理最后加上del %0,批处理命名例如:实验.bat
2,使用winrar压缩这个批处理为rar,并设置密码为123456789,名称例如:实验.rar
3,需要的时候,使用以下示例命 ...


这样做的话,调用参数还是得暴露出来..
随便做个程序,伪装成winrar,就知道密码了..


或者直接循环查找目录下的文件那个bat,找到就用notepad打开..
或者用超级巡警之类的,监控文件运行,运行前被杀软拦截,趁此机会找到文件copy

再次,修改bat的运行参数,释放出来bat无法运行,也就没办法删除自身了

[ 本帖最后由 caruko 于 2010-4-19 18:06 编辑 ]
作者: hanyeguxing    时间: 2010-4-19 18:23

1,目前对winrar的加密只能用暴破,所以破解难度只和密码的复杂、长度有关
2,这个方法只针对别人获取.rar文件后的问题
3,如果别人可以看到cmd /k ""D:\Program Files\xerox\WinRAR\rar" x -o+ -hp123456789 "d:\实验.rar" "c:\"&"c:\实验.bat"",那么什么都不用想,-hp跟的就是明码密码。所以前面特别说明了:方法不适合分发运行这个批处理。
作者: qzwqzw    时间: 2010-4-19 19:27     标题: 回复 8楼 的帖子

如果要使用RAR加密
倒是有一个折中的方案

事先获取到用户的运行环境信息
根据这些信息运算得到一个密码
在开发环境下使用密码加密项目脚本
并生成一个自动解压运行的脚本
这个脚本可以根据用户环境复原那么密码

因为项目的前提是基于
用户端环境信息是唯一的
所以即使破解者获得了项目的加密版本以及自动解压脚本
仍然无法获得到基于环境信息的密码
所以无法解压运行该项目

所以这个方案最终实现的是
授权用户能合法运行项目
同时也可以修改这个项目
非授权用户将无法运行这个项目
同时也无法修改这个项目

[ 本帖最后由 qzwqzw 于 2010-4-19 19:32 编辑 ]
作者: zhang8682    时间: 2010-4-19 21:03

感谢楼上各位的回复,小弟不胜感激。
此项目源于机缘巧合,我们的设备提供给上海某保障部门,因需求特殊要更新设备固件才能解决,国外工程师发了一个批处理升级程序专门针对这个特殊应用。我们在此技术上进行了从新规划。我知道vb,vc都可以实现我现在的功能,怎奈当年学的都还给老师了,批处理是我唯一敢说懂点的语言。因此才拿下这个难题来解决。

目前我们的要求就是安装在指定服务器上,并且保证只能这台电脑可以让网管使用。但是因为环境因素,有可能我们的行业竞争伙伴可以接触并拷贝该程序。因此才有了这个主题的想法。

没想到大家这么热闹,一下子高手全来了,我觉得幸福的活着说的方法对我们目前的情况相对比较合适,不知道是否可能有一些例子呢?比如关于对cpu的绑定。这个我觉得是最狠的。呵呵,服务器cpu换一次可不是那么方便的。

期盼高手能围绕此问题继续讨论。感谢!
作者: GNU    时间: 2010-4-19 21:21     标题: 回复 10楼 的帖子

WinRAR不是免费软件,通常服务器上不会安装的。
作者: zhang8682    时间: 2010-4-19 21:54     标题: 回复 11楼 的帖子

开始没注意,的确是这样的。。。。。
作者: qzwqzw    时间: 2010-4-19 22:04

任何项目
最难的在于方案设计
具体实现反而是简单的

9楼的方案
最致命的地方就是不能有“内贼”
因为项目解压脚本不可能完全加密
所以密码算法实际上是半公开的
那么密码来源就成了唯一的保密点
如果授权用户将关键环境信息告知非授权用户
那么加密便如纸壳

因此本方案其实与根据用户名算注册码的方式类似
前提是破解者不可能获取到授权用户的环境信息
至于实现的细节我这里不多做说明
仅就楼主关心的CPU序列号提供一个线索
wmic cpu get ProcessorID
for /f in %%f ('wmic cpu get ProcessorID') do set PID=%%f
当然,通常服务器都是多核多CPU
至于取一个或多个ID的策略可以自定设定

[ 本帖最后由 qzwqzw 于 2010-4-19 22:09 编辑 ]
作者: GNU    时间: 2010-4-19 22:28

服务器的话,一般是NTFS分区吧,不知道楼主的具体环境是否适合使用EFS加密呢?
作者: zhang8682    时间: 2010-4-19 22:55

回14楼,是ntfs分区,其实efs也是个非常好的方法,但是有一点,这种加密需要经过网络管理员允许,你知道有些单位……嘿……不好说,如果他说不行我们一点办法没有。

回活着的幸福:
太感谢了,真是和您交流一会都比我看一个星期书强。我看了一下命令的参数,一下子豁然开朗。可恨我目前没有什么算法能开发出您说的那种注册码。但是仅凭这一点我就已经搞定这个难题了。呵呵,真的非常感谢。太合适了。


感谢楼上的各位。批处理之家论坛的氛围才是真正的好论坛啊。
作者: patk    时间: 2011-8-16 22:47

%%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a %%a
cls
@echo off
title By Ycool tools
mode con: cols=80 lines=22
color 1f
:start
echo                        ╭───────────────╮
echo    ╭─────────┤       BAT 加 密 工 具      ├─────────╮
echo    │                  ╰───────────────╯                  │
echo    │                                                                      │
echo    │            1、本工具用来对明文批处理文件进行加密!                    │
echo    │                                                                      │
echo    │            2、直接把待加密批处理文件拖至本窗口释放即可!              │
echo    │                                                                      │
echo    │            3、加密后会在当前目录下生成NewCode.bat文件!               │
echo    │                                                                      │
echo    │                07年11月17日    BY Ycool       │
echo    ╰───────────────────────────────────╯
echo.
set /p file=请输入需要加密的批处理文件名后按回车键[Q=退出]:
if "%file%"=="q" goto quit
echo %file%|findstr /i "\.bat$">nul && goto go
echo %file%|findstr /i "\.c*$">nul && goto go
cls
echo ==============
echo 请正确输入!
echo ==============
echo.
echo.
echo 按任意键重新输入......
pause>nul
goto start
:go
if not exist "%file%" goto newly
if exist encrypt.bat copy encrypt.bat encryptbak.bat
echo %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a %%%%a >"%tmp%\encrypt.tmp"
echo cls>>"%tmp%\encrypt.tmp"
type "%file%">>"%tmp%\encrypt.tmp"
setlocal enabledelayedexpansion
for %%i in ("%tmp%\encrypt.tmp") do (
    echo %%~zi >nul 2>nul
    set size=%%~zi
    set num=!size:~-1!
    set /a mod=!num!%%2
    if !mod! equ 0 (goto even) else (goto odd)
)
:even
copy "%tmp%\encrypt.tmp" NewCode.bat
del "%tmp%\encrypt.tmp"
cls
echo ==========================================
echo 恭喜你, 批处理加密成功,已保存为NewCode.bat
echo ==========================================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
dd
echo. >>"%tmp%\encrypt.tmp"
copy "%tmp%\encrypt.tmp" NewCode.bat
del "%tmp%\encrypt.tmp"
cls
echo ==========================================
echo 恭喜你, 批处理加密成功,已保存为NewCode.bat
echo ==========================================
echo.
echo.
echo 按任意键退出......
pause>nul
goto quit
:newly
cls
echo ================================
echo 找不到批处理文件, 请重新输入!
echo ================================
echo.
echo.
echo 按任意键开始......
pause>nul
goto start
:quit
exit
作者: wjx79my    时间: 2011-8-17 09:56

这个有用吗。
作者: hfg1977    时间: 2011-8-17 10:13

...
3.cmd /k ""D:\Program Files\xerox\WinRAR\rar" x -o+ -hp123456789 "d:\实验.rar" "c:\"&"c:\实验.bat""
hanyeguxing 发表于 2010-4-19 17:46


可以用EXE,DLL 来调用,别人看不到"cmd /k ""D:\Program ...."明文的.




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2