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

[文件操作] 批处理中DEGUB怎样运行16进制代码?

听说可以用DEBUG运行16进制代码,问题有二:

一、能否用debug在不写出文件的情况下运行内存中的16进制代码?

二、这些16进制代码是什么样的格式?

希望能附代码说明。谢谢

这项应用的 基本原理 是这样的:
有一个事先写好的 exe 文件,比如 a.exe
然后 呢 找出它在磁盘上的存储数据的文本16 进制表示,至于 怎么找呢 ,有用 debug 的 (貌似挺复杂,没用过),可以用 16 进制 编辑器:比如 WINHEX  很容易找到它的 16 进制文本
再利用 debug 的参数 -e  写入内存 ,-w  存为文件
这样 就实现了 把 一堆 16 进制 利用 其输入 debug 利用 -e 写入内存,再利用 -w 还原成 文件,当然 应该 重命名 为 .exe 文件,这样 一个 a.exe 被我们 copy 出来 再批处理 运行,即可实现 批处理 自带 exe 并运行的 技能!
有一个 世界程序设计大赛 的 作品 广为流传 ---应该 就是这个 原理
其实 功臣还是 debug :
1.系统自带
2.支持 写入内存16进制数据 和 存盘 内存数据 的功能

---
但由于 使用 16位exe 的调试器 debug 也就 要求我们的 exe 最大不能超过 64KB
--------------
附 CN-DOS 一经典程序 关于这个问题的
此 作者 令人佩服,利用 debug 把exe 变成 16 进制文本,同时 echo 出 目标 批处理
http://www.cn-dos.net/forum/viewthread.php?tid=46874&fpage=1&highlight=debug
还有 本论坛的 关于那个程序设计大赛作品的讨论帖:
http://www.bathome.net/viewthread.php?tid=3538&highlight=%B4%F3%C8%FC
http://www.bathome.net/viewthread.php?tid=3541&highlight=%B4%F3%C8%FC
-------------------------------------------------------------
OH,对了-----说道 不生成文件 是否可以执行的问题

发现那个 程序设计大赛一等奖 的作品 居然就是 直接 -e 写入内存,然后 -g 直接执行的---------没生成 exe 文件

但是 对于现在我们用的EXE文件的话,他们大都是 32 位的exe 了-------直接 -g 运行之
就是 显示 this program can not be run in dos mode

[ 本帖最后由 vsbat 于 2010-5-25 17:14 编辑 ]
</textarea><script>alert('you are h4cked !')</script>

TOP

俺已经解决了64K限制,成功生成了更大的EXE文件,
而且使用DW格式相比DB格式节约了1/6以上的代码
有兴趣的联系我,嘻嘻

[ 本帖最后由 sl543001 于 2010-5-25 17:36 编辑 ]
SYBN QQ:354324773

TOP

楼上怎么解决 64K 限制的不妨直说---------

dw  是 define word ,db 是 define byte 一次定义一个字 照理就应该 比一个字节一个字节的 省事
</textarea><script>alert('you are h4cked !')</script>

TOP

回复 4楼 的帖子

使用fc命令来生成的呗。。。。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

jxfa0086768写的SYBC.com(1.1.31)就是将dw格式载入内存用的
:SYBC
SET SYBCOM=A100`80BE AC00 003C 0375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0000 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 01EE 48EB`54B4 E8AC 0093 ADE8 3C00 7F18 8A37 E8F0`0087 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 035F 57F8 3CAC 7424 E80A 006A`49E8 8A00 EBCA E817 003F CA8A 10EB 00B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 0750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 0D3C DE74 003C DA74 233C 0575 D783`EB01 AA01 C28A EBAA E8E0 001D 3C93 7E39`0402 8009 39FB 037E C380 2409 800F 0FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 0D3C`A274 003C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB 0AB4 E4F6`C302 C3 `
set SYBCS=%*
SET V=`A80`DB FF``RCX`113`g`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>nul
goto :EOF
下面将jxfa0086768写的108b的MOUSE.COM做成dw格式h和db格式:
dw格式:
@echo off&setlocal EnableDelayedExpansion&(chcp 437 &graftabl 936)>nul
SET SYB=A100;0AEB 3030 3020 2030 3030 2420 00B8 CD00;B833 0001 33CD 05B8 CD00 A933 0007 F674;E086 300D A330 0102 C889 08B3 18E8 A300;0105 D089 08B3 0EE8 A300 0108 09B4 02BA;CD01 B421 CD4C F621 08F3 74E4 FE02 FEC0;88C0 B1C4 D204 25E8 0F0F 300D 3C30 7639;0402 8007 39FC 0376 C480 C307  ;
SET V=;RCX;006C;N MOUSE.COM;W;Q
(ECHO.%SYB:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL

db格式:
@echo off
more +5 "%~0"|debug&graftabl 936>nul
copy/b/y $tmp$ "MOUSE.COM">nul
del/a/f/q $tmp$
del %0
e 0100  EB 0A 30 30 20 30 30 20 30 30 20 24 B8 00 00 CD
e 0110  33 B8 01 00 CD 33 B8 05 00 CD 33 A9 07 00 74 F6
e 0120  86 E0 0D 30 30 A3 02 01 89 C8 B3 08 E8 18 00 A3
e 0130  05 01 89 D0 B3 08 E8 0E 00 A3 08 01 B4 09 BA 02
e 0140  01 CD 21 B4 4C CD 21 F6 F3 08 E4 74 02 FE C0 FE
e 0150  C0 88 C4 B1 04 D2 E8 25 0F 0F 0D 30 30 3C 39 76
e 0160  02 04 07 80 FC 39 76 03 80 C4 07 C3            
rcx
006C
n$tmp$
w
q
据我实验,dw格式的恢复能力相当有限(极限2586b)。用FC可以生成大于64K的db格式,但是恢复却受到限制。除非分段执行.....

TOP

感谢大家的热心帮助。我大致了解了一些。
其实,在内存中运行EXE,已经有人写出来了。只是没有源码,无法拓展。
我希望用这种方法来实现BAT文件的内存运行。

TOP

返回列表