[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] [方案汇总]批处理隐藏运行的11种思路(2023-08-11)

1.基础

HideRun.vbs
  1. CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0
复制代码
其中D:\test.bat是你的批处理路径

HideRun.bat
  1. echo CreateObject("WScript.Shell").Run "cmd /cD:\test.bat",0>$tmp.vbs
  2. cscript.exe /e:vbscript $tmp.vbs
  3. del $tmp.vbs
复制代码
这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。

HideRun.js
  1. new ActiveXObject('WScript.Shell').Run('cmd /cD:\Test.bat',0);
复制代码
用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法必须用括号,结尾必须有分号。所以就成了下面的命令:
  1. mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /cD:\test.bat',0);window.close()"
复制代码
隐藏运行自身.bat
  1. if "%1"=="hide" goto :ExecBat
  2. start mshta vbscript:createobject("wscript.shell").run("""%~f0"" hide",0)(window.close) && exit /b
  3. :ExecBat
  4. @echo off
  5. start notepad
  6. ping -n 5 127.0.0.1 >nul
复制代码
2.用快捷方式

如果要使一个批处理本身隐藏,可以参考附件里的一个快捷方式,修改附件中的相关路径即可隐藏启动你的批处理。可以用vbs来建立一个 .lnk,其实用批处理也行(先echo一个vbs出来)

3.利用系统服务

可以用sc建立一个系统服务然后启动这个服务来启动批处理。缺点是启动服务较慢,需要管理员权限
查考这个帖子,
http://www.cn-dos.net/forum/viewthread.php?tid=21426
asbai 兄的大作,极大的方便了我们的使用。
  1. runassrv add /cmdline:"C:\Windows\System32\cmd.exe /cD:\test.bat" /name:"mysrv"
  2. net start mysrv
复制代码
4.利用at计划任务

用at可以建立一个计划任务,在不输入 /interactive 参数可以后台运行。但是建使用at必须有管理员权限
  1. at 09:10 "cmd /cD:\Test.bat"
复制代码
然后在 9:10 系统就会自动后台以SYSTEM权限运行这个bat

5.利用ftype文件关联

综合上面的技术,使所有批处理都隐藏运行
  1. ftype batfile=C:\Windows\System32\mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"
复制代码
大家可以讨论下下面的思路,目前没有明确的方法,但是理论上是可行的

6.rundll32

其实这个方法只是理论上估计的,这里提出来占个位置,留个记号,等待高手研究
rundll32可以调用 dll 里的API,如果有个dll可以隐藏run一个exe就可以实现隐藏启动批处理,呵呵。目前我也没找到方法。

7.其他用户

Windows 2k/XP支持多用户,如果能在后台登陆另一个账户的桌面然后运行一个批处理,就能完全达到隐藏的目的

8.bat2vbs

这个方法只是一个不是很成熟的思路。
查考这个帖子:
http://www.cn-dos.net/forum/viewthread.php?tid=20769
这使我们产生了一个想法:把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat

9. .NET编译

参考这个帖子:
http://www.cn-dos.net/forum/viewthread.php?tid=23374
里面提到了一个 .NET Warpper,我们完全可以利用系统自带的组件把bat编译到 exe 当中。如果bat不涉及交互,exe自然就安静的运行了。

10.注入汇编

最后向大家推出的今天最隆重的,ASCII Assembly Code专家 Herbert Kleebauer 的又一力作:showwin.exe

showwin.exe let you minimize/maximize/hide the command window
within a batch program (requires W2k or better).

Usage:  showwin.exe number

0 SW_HIDE
   Hides the window and activates another window.

1 SW_SHOWNORMAL
   Activates and displays a window. If the window is minimized or maximized,
   the system restores it to its original size and position. An application
   should specify this flag when displaying the window for the first time.

2 SW_SHOWMINIMIZED
   Activates the window and displays it as a minimized window.

3 SW_MAXIMIZE
   Maximizes the specified window.

3 SW_SHOWMAXIMIZED
   Activates the window and displays it as a maximized window.

4 SW_SHOWNOACTIVATE
   Displays a window in its most recent size and position. This value is
   similar to SW_SHOWNORMAL, except the window is not actived.

5 SW_SHOW
   Activates the window and displays it in its current size and position.

6 SW_MINIMIZE
   Minimizes the specified window and activates the next top-level window
   in the Z order.

7 SW_SHOWMINNOACTIVE
   Displays the window as a minimized window. This value is similar to
   SW_SHOWMINIMIZED, except the window is not activated.

8 SW_SHOWNA
   Displays the window in its current size and position. This value is
   similar to SW_SHOW, except the window is not activated.

9 SW_RESTORE
   Activates and displays the window. If the window is minimized or maximized,
   the system restores it to its original size and position. An application
   should specify this flag when restoring a minimized window.

10 SW_SHOWDEFAULT
   Sets the show state based on the SW_ value specified in the STARTUPINFO
   structure passed to the CreateProcess function by the program that
   started the application.

11 SW_FORCEMINIMIZE
   Windows 2000/XP: Minimizes a window, even if the thread that owns the
   window is not responding. This flag should only be used when minimizing
   windows from a different thread.

---------------------------------------------------------------------------

A simple example:
  1. :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::-:
  2. @echo off
  3. echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>showwin.com
  4. echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>showwin.com
  5. echo T}{zE~@gwkBG@OEKcUt`E}@mqqBsy?seHBEaPhxr?@zAB`LrPEyoDt@Cj?>>showwin.com
  6. echo pky_jN@QEKpEt@ij?jySjN@REKpEt@jj?jyGjN@SEKkjtlGuNw?p@pjirz>>showwin.com
  7. echo FEvAUSQ?_YLTQ@@?~QCo_F~RDU@?aU?@MQ_AMy1GHs?Gw`LbLK@shM`S_d>>showwin.com
  8. echo bD_nsDddlTr_sPdlnTcnaTv_xP_ngD_rhDhsrT_kkDhrtT_fmDRNCTILk?>>showwin.com
  9. echo staThg_So_rPfnqTl`qTdq_ShtpTrdqThV_Sqrm@ILm?O?cOKFDP?@@?dx>>showwin.com
  10. echo OdFUu?N?_B@J@??KD?HUA?QOGB_QO?F?SCAQO?UDF?UCE?Q_F?DUA?CUB?>>showwin.com
  11. echo OFO?FOS?DUO?IUO?FOW?RU{OWFO?mYU?wdsTeQs@OQ@?QAQ?LUA?_F_og~>>showwin.com
  12. echo UODUO?FOSAFOeAUOyAO_DCSHUOOQO?OCFGuHUOGFO?TUO?DRTTqrQ@kcmS>>showwin.com
  13. echo gFkPFUO?ngRThVvTncmTJFvPMQDTrKDDcmqOFkkDFOSAFOeAUOyAdFFSnB>>showwin.com
  14. echo sT`llTKcmTdmhTFQ@PBsdTrmnTdknTmhVTvncTwDSSOshTbnqTrrdTT~?K>>showwin.com
  15. echo ?OGOQp?o??Gds?wOw?PGAtaCHQvNntQv_w?A?it\=upkNQD??OuQsQG[i?>>showwin.com
  16. echo RwrqosHy?Mjmv\@IuBlpUrHdjNAslF~mH}OKT?U??PT~OL?O?O?i?COT~B>>showwin.com
  17. echo U?OCU?YF0x>>showwin.com
  18. showwin.com>showwin.exe
  19. del showwin.com
  20. dir
  21. :: wait 4 seconds
  22. ping -n 4 localhost >nul
  23. :: hide window
  24. showwin.exe 0
  25. dir /b
  26. :: wait 4 seconds
  27. ping -n 4 localhost >nul
  28. :: show window
  29. showwin.exe 5
  30. :: wait 4 seconds
  31. ping -n 4 localhost >nul
  32. del showwin.exe
复制代码
原帖地址在
http://groups.google.com/group/a ... ad/b30d93c7f43b6731
问题是我后脸皮发的。嘿嘿
不过我还没有测试成功。估计是keyboard layout和language/code page不同造成的



以上10中思路原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=23846

11、第三方命令行工具nircmd.exe
  1. nircmd.exe exec hide "C:\test\BatHome.bat"
复制代码
下载地址:http://bbs.bathome.net/thread-3981-1-1.html
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

话说那个ShowWin,我的CIdo也有。。。
CIdo /sws 0 隐藏了窗口,ShowWin的其他属性都支持。。。
都是调用一个函数的。。。

TOP

rundll32好像里面有个API叫shell,可以实现隐藏。。。

TOP

是shellExecute吧?~在shell32.dll里面~用au3调用成功,不知如何该用rundll32调用~
这是个au3的例子~
  1. Const $sw_minimize = 6
  2. Const $sw_maximize = 3
  3. Const $sw_show = 5
  4. Const $sw_hide = 0
  5. $verb = DllStructCreate("char[5]")
  6. DllStructSetData($verb, 1, "open")
  7. $pVerb = DllStructGetPtr($verb)
  8. $TestFile = @scriptDir & "\Test.txt"
  9. $File = DllStructCreate("char[" & stringLen($TestFile) + 1 & "]")
  10. DllStructSetData($File, 1,  $TestFile)
  11. $pFile = DllStructGetPtr($file)
  12. $error = DllCall("shell32.dll", "int", "ShellExecute", _
  13.   "hwnd", 0, _ ;父窗口 = null
  14.   "ptr", $pVerb, _ ;动词 = open
  15.   "ptr", $pFile, _ ;文件 = $TestFile
  16.   "ptr", 0, _  ;参数 = null
  17.   "ptr", 0, _  ;工作路径= Current
  18.   "int", $sw_maximize);打开方式= maximize
  19. If $error[0] > 32 then msgBox(0, '', "Succeed")
复制代码

返回值如果大于32,则说明调用成功~

[ 本帖最后由 pusofalse 于 2009-2-7 17:26 编辑 ]
心绪平和,眼藏静谧。

TOP

叫法可能不一样。。。
在VC++里面可以直接调用API,方便。。。

批处理就不知道怎么办了。。。

TOP

不懂  先收藏了  以后再研究..

TOP

ShellExecute也可以:
  1. CreateObject("Shell.Application").ShellExecute "cmd", "/cD:\test.bat", "", "", 0
复制代码

TOP

还有wmi(虽然利用wmi的代码都很臃肿)
http://bbs.verybat.org/viewthread.php?tid=17130
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

真是很不错啊!~真是很不错啊!~

真是很不错啊!~真是很不错啊!~

TOP

好厉害 方法好多......
学习了
用ftype似乎太危险了 什么批处理都隐藏
o(∩_∩)o...~~~
空间:http://hi.baidu.com/fair_jm
喜欢批处理的没事的话去逛逛哦~~

TOP

原来batcher是EST,哈哈~~

TOP

学习,学习,学习。。

TOP

越往后看不懂......

TOP

写的那些命令在哪里运行啊

TOP

学习中,要好好看一下

TOP

返回列表