- 注册时间
- 2008-2-23
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 507
- 在线时间
- 小时
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?欢迎注册
×
用脚本写2进制文件
在Xfocus看到一篇经典的文章Do All in Cmd Shell,觉得脚本却是强大!
但脚本一直很难直接操作2进制文件,人们常用的方法有:
1,用经典的debug。方法早就被用烂了,这里就不多说。但这种方法依赖于windows自带的debug程序,比较难以成功,比如我的电脑上,众多DOS命令行程序被我删掉,连cmd.exe也要把它删掉!为了安全啊!
2,FSO可以写文件,但绝对不能写2进制的
3,ADODB.stream对象,也可以写文件,用来写文本文件没问题的。里面有个type属性,type=2为文本模式,type=1为2进制模式。但在type=1,也就是2进制模式的时候,到目前为止我还没见到成功的案例。连Do All in Cmd Shell里的高手也提到,无法构造需要的数据类型,不能成功。
那么要怎么才能用脚本来写2进制文件呢?
先看下下面这个吧,是很久以前我在网络上摘抄的:引用:
注意利用解释型语言与CPU代码相结合的新型病毒
2000-05-26 00:00 作者: 袁哥 出处: 不详 责任编辑:
流行WORD宏病毒时,认为宏是解释执行,所以认为宏病毒很简单,关键技术在于WORD的文件格式。我想提醒大家注意,解释执行虽然没有获得CPU的控制权,并不代表不能干大事。关键在于你提供的语言方便不方便。其实解释型语言也可能获得CPU的控制大权的。所以JAVA也可能染毒!所以源文件型病毒并不需要很多专家说的那样要几百行的程序。
下面是DOS下的。BAT文件,你粘贴下来运行一下,你就会明白。它会释放一提示。此只是一演示,不含病毒!但其中的技术完全可以在JAVA,WORD,源文件中实现,也很简单!所以提醒大家(特别是一些杀毒厂家)应真正的理解解释执行与CPU代码执行在本质上并没有区别!
:0jeX4e-005POP]hWeX5ddP^1,FFFFF1,FFF1,4rP^P_jeX4aPY-x-AAR`0`*=00uPBOIAAAAFKAOBPIDMCBALEAJMNCBJALIAAEMMNCBFEGIGFCAENGBGDHCGPHGGJHCHFHDCAGJHDCAGDGPGNGJGOGHCACOCOCOCOCOCOANAKCEAAqqqq
@ECHO OFF
COPY %0.BAT /B C:\BATVIR.COM /B /Y
C:\BATVIR.COM
DEL C:\BATVIR.COM
=========================
1EE7:0100 3A30 CMP DH,[BX+SI] ;这一语句前面是冒号,在BAT里是解释
1EE7:0102 6A65 PUSH 65 ;'e'
1EE7:0104 58 POP AX
1EE7:0105 3465 XOR AL,65 ;得到AX=0X0000 ;'e'
1EE7:0107 2D3030 SUB AX,3030
1EE7:010A 35504F XOR AX,4F50
1EE7:010D 50 PUSH AX
1EE7:010E 5D POP BP ;得到BP=0X8080
1EE7:010F 685765 PUSH 6557
1EE7:0112 58 POP AX
1EE7:0113 356464 XOR AX,6464 ;得到AX=0X0133
1EE7:0116 50 PUSH AX
1EE7:0117 5E POP SI ;得到SI=AX=0X0133
1EE7:0118 312C XOR [SI],BP ;字节[0X0133],[0X0134]的最高位置1
1EE7:011A 46 INC SI
1EE7:011B 46 INC SI
1EE7:011C 46 INC SI
1EE7:011D 46 INC SI
1EE7:011E 46 INC SI
1EE7:011F 312C XOR [SI],BP ;[0X138],[0X139]
1EE7:0121 46 INC SI
1EE7:0122 46 INC SI
1EE7:0123 46 INC SI
1EE7:0124 312C XOR [SI],BP ;[0X13B],[0X13C]
1EE7:0126 3472 XOR AL,72 ;'r'
1EE7:0128 50 PUSH AX ;得到AX=0X141=0X133XOR0X72
1EE7:0129 5E POP SI ;得到SI=AX=0X141
1EE7:012A 50 PUSH AX
1EE7:012B 5F POP DI ;得到DI=AX=0X141
1EE7:012C 6A65 PUSH 65 ;'e'
1EE7:012E 58 POP AX
1EE7:012F 3461 XOR AL,61 ;'a'
1EE7:0131 50 PUSH AX
1EE7:0132 59 POP CX ;得到CX=AX=0X04
1EE7:0133 AD LODSW ;在字符串中是0X2D,
1EE7:0134 F8 CLC ;在字符串中是0X78,
1EE7:0135 2D4141 SUB AX,4141
1EE7:0138 D2E0 SHL AL,CL ;在字符串中是 0X5260
1EE7:013A 30E0 XOR AL,AH ;在字符串中是 0X3060
1EE7:013C AA STOSB ;在字符串中是 0X2A
1EE7:013D 3D3030 CMP AX,3030
1EE7:0140 75F1 JNZ 0133 ;对0X141开始的字符串解码,qqqq是串结束
- ;0XF1是PB解码的结果。
这儿CPU代码编码方法:
CPU代码的每一个字节用两个字母表示,用ABCDEFGH IJKLMNOP 分别表示01234567 89ABCDEF,解码方法相反的过程!这是袁哥的大作,对了,他就实现了用脚本来写2进制,其中用到的方法确是太巧妙了!
因为这个真的太巧妙,我几年来一直收藏着。
汇编强的人可以很容易弄懂上面袁哥大作的,这里我就不卖弄了,毕竟大家都是汇编高手,所以,我就直接拿出我做的东西吧。 |
|