批处理加密防篡改的求助
本帖最后由 Love0912 于 2024-10-13 17:10 编辑首先看我贴的代码
@echo off
setlocal enabledelayedexpansion
:Variables
set InputPrompt=请输入密钥以继续:
set CorrectKeyMsg=密钥正确,继续执行...
set WrongKeyMsg=密钥错误,请重新输入或按X键退出...
set RetryPrompt=是否重新输入(Y/N)?:
set InvalidInputMsg=无效输入,请重新选择...
:PasswordLoop
set /p UserKey=!InputPrompt!
if "%UserKey%"=="erhudiannao" (
echo !CorrectKeyMsg!
goto start
) else (
echo !WrongKeyMsg!
set /p Choice=!RetryPrompt!
if /i "%Choice%"=="Y" goto PasswordLoop
if /i "%Choice%"=="X" goto EndScript
echo !InvalidInputMsg!
goto PasswordLoop
)
rem 以下信息需要正常显示
set 服务器主机端IP=192.168.0.241
set 服务器主机端用户名=Administrator
set 服务器主机端密码=""
rem需要显示信息结束,以下信息需要隐藏
IF NOT "%Choice%"=="" SET Choice=%Choice:~0,1%
if /i "%choice%"=="1" goto ckpj
if /i "%choice%"=="2" goto cjypj
if /i "%choice%"=="3" goto cjptpj
if /i "%choice%"=="4" goto scxypj
if /i "%choice%"=="5" goto scraspj
if /i "%choice%"=="6" goto zjrcpdk
if /i "%choice%"=="7" goto cjypjguest
if /i "%choice%"=="8" goto cjptpjguest
if /i "%choice%"=="9" goto kqlbzh
if /i "%choice%"=="0" goto gblbzh
if /i "%choice%"=="m" goto cxjj
if /i "%choice%"=="Z" goto end
if /i "%choice%"=="X" goto spjc
echo 选择无效,请重新输入
echo.
goto cho
我首先对这个批处理进行了加密,以确保其在没有密码的情况下无法运行,同时加密时也进行了一定的混淆,避免纯小白进行修改。
现在的问题是如果采取文本编辑的话所有代码都可以被直接观看到,并且被修改,依旧无法起到加密作用
而且最关键的是,这个代码里有部分代码是不能被加密的,因为在应用时需要修改这部分代码才能正确使用(就是代码中标红写着可编辑的部分)
现在我的需求是将不需要展示的部分进行加密使其无法修改或者无法被观测到,不知道有没有什么好的办法可以解决这个问题。
最后,我也指点C# C++编写效果更好,奈何手残,就会一点点的批处理还不是狠精通,所以请各位大佬不吝赐教 不知道你采用的是什么加密方式呢 我提供个思路吧,以前是用curl来进行验证
@Echo Off&Setlocal Enabledelayedexpansion
For /f "delims=" %%i in ('curl -s "http://192.168.1.111/pwd.pwd"') do (Set "wpwd=%%i")
FOR /F "delims=" %%s IN (rx.pwd) do (Set "lpwd=%%s")
if !wpwd!==!lpwd! (goto yes) else goto no
@pause >nul
@exit
:yes
@echo 密码正确
@pause >nul
@exit
@:no
@echo 密码错误
@pause >nul
rhci 发表于 2024-10-13 17:43
我提供个思路吧,以前是用curl来进行验证
@Echo Off&Setlocal Enabledelayedexpa ...
这个需要配合curl.exe进行,好点的是WIN10基本都自带curl了。 用软件把bat转成exe行不行? 有个软件叫bat2exe可以试试 用易写的,实现的批处文件不落地运行,文件不释放!
演示程序:https://wwi.lanzn.com/iz7D52chj8fe skl520 发表于 2024-10-13 17:28
不知道你采用的是什么加密方式呢
@echo off
setlocal enabledelayedexpansion
:Variables
set InputPrompt=请输入密钥以继续:
set CorrectKeyMsg=密钥正确,继续执行...
set WrongKeyMsg=密钥错误,请重新输入或按X键退出...
set RetryPrompt=是否重新输入(Y/N)?:
set InvalidInputMsg=无效输入,请重新选择...
:PasswordLoop
set /p UserKey=!InputPrompt!
if "%UserKey%"=="erhudiannao" (
echo !CorrectKeyMsg!
goto start
) else (
echo !WrongKeyMsg!
set /p Choice=!RetryPrompt!
if /i "%Choice%"=="Y" goto PasswordLoop
if /i "%Choice%"=="X" goto EndScript
echo !InvalidInputMsg!
goto PasswordLoop
)
最垃圾的加密方式,我的想法是把这段代码进行隐藏,也就是对方用文本编辑模式查看的时候变成乱码,从而可以实现加密而且防篡改的目的 rhci 发表于 2024-10-13 17:43
我提供个思路吧,以前是用curl来进行验证
@Echo Off&Setlocal Enabledelayedexpa ...
这个思路不错,但是有一个致命问题,就是如果懂一点的人直接把密码校验部分删除掉,那依然是可以正常运行的,这也是我来这里求助的原因
我的想法是,在这个基础上,在对方用文本编辑查看的时候使其显示为乱码从而实现加密防篡改的目的 cn2jp 发表于 2024-10-13 18:04
用软件把bat转成exe行不行?
不行,因为有部分代码是需要修改后才能运行的,也就是说其中一段代码是得允许被修改的~