中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [原创]********Any2Bat******** 上一主题 | 下一主题
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『楼 主』:  [原创]********Any2Bat********


@echo off

::::::::Any2Bat {s11ss 2007-12-2}::::::::

::思路:利用debug获得原文件16进制代码,然后再次利用debug构造生成原文件的bat代码。

setlocal

set f="%~f1"
if not exist %f% (echo File doesn't exist!&&goto :eof)

::写临时文件
set len=%~z1
set/a end=0x100+%len%-1
call :10to16 %end%
pushd %tmp%
>t1 call echo d100 %%r%end%%%
>>t1 echo q
>nul copy %f% t2
type t1|debug t2|more|find ":">t3

::读取临时文件t3,获得16进制代码
set "i= %%a %%b %%c %%d %%e %%f %%g %%h %%i %%j %%k %%l %%m %%n %%o %%p %%q"
for /f "delims=" %%a in (t3) do set/a lines+=1
set/a m=1
setlocal enabledelayedexpansion
for /f "tokens=1-17 delims=- " %%a in (t3) do (
        if !m! equ %lines% goto :lastline
        set "hex!m!=%i%"
        set/a m+=1
)
:lastline
set/a m-=1
set/a remain=(%len%-16*%m%+1)*3
call set remain=%%i:~0,%remain%%%
for /f "tokens=1-17 delims=- " %%a in ('^<t3 more +%m%') do set "hex%lines%=%remain%"

::写bat
call :10to16 %len%
set t=^>^>%f%.bat echo
%t% @echo off
%t% ^<^"%%^~f0^" more +4 ^|debug ^>nul
%t% move t "%~nx1"
%t% goto :eof
for /l %%a in (1,1,%lines%) do (
        call set hex%%a=%%hex%%a:*:=e%%
        %t% !hex%%a!
)
%t% rcx
%t% !r%len%!
%t% n t
%t% w
%t% q

for /l %%a in (1,1,3) do (del t%%a)

goto :eof










:10to16
set "h=0123456789ABCDEF"
set/a q=%1
        :1c
        set/a r=%q%%%16
        set/a q=%q%/16
        call set r=%%h:~%r%,1%%
        call set r%1=%r%%%r%1%%
if not %q% equ 0 goto :1c


2007-12-2 14:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 2 楼』:  

像这样的问题,我始终觉得 debug 不好,要是文件大了就慢的,http://www.cn-dos.net/forum/viewthread.php?tid=35808 还是用vbs快多了,不是打击s11ss兄,用最短的脚本最快的效率最合适的工具解决问题才是关键,至少我们现在学习这些脚本都是为了解决问题吧

2007-12-2 21:54
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
s11ss
银牌会员





积分 2098
发帖 566
注册 2007-9-11
状态 离线
『第 3 楼』:  



  Quote:
Originally posted by vkill at 2007-12-2 09:54 PM:
像这样的问题,我始终觉得 debug 不好,要是文件大了就慢的,http://www.cn-dos.net/forum/viewthread.php?tid=35808 还是用vbs快多了,不是打击s11ss兄,用最 ...

我还要多谢vkill兄啊,vkill兄总是鞭策鼓励我不断的学习以得到进步——我发的帖子"Base64加密"里兄说不是纯P的,这回Any2Bat是纯P的兄又说debug不好。当然这两件事并不矛盾,我也丝毫没有埋怨兄的意思。各路大侠尽管批评指正!

2007-12-2 23:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 4 楼』:  

我的意见是:比较简单的P应用(少量字符加密之类)尽量使用纯P;大量处理文字、文件转换,使用效率高的脚本(VBS等)



2007-12-3 00:22
查看资料  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:  

s11ss兄的确很有创意,打击也好埋怨也好都不成立,就当自己练练自己的Batch功底吧,因为日常应用中Batch类型并不多,久而久之出现对某些命令陌生起来,同理机器不动会生锈,反之在在练Batch时积累更多的经验。

16进制转换我还是用C++启程者GOTOmsdos兄的迷你互转器效率超高
http://www.cn-dos.net/forum/view ... hlight=%2Bgotomsdos



第一高手    第二高手

2007-12-3 10:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: