监视端代码
pyinstaller -F -i logoico.ico RemoteAdmin.pyw
import tkinter
import tkinter.messagebox
import struct
import socket
import numpy as np
from PIL import Image, ImageTk
import threading
import re
from cv2 import cv2
import base64
import os
root = tkinter.Tk()
tmp = open("logoico.ico", "wb+")
tmp.write(base64.b64decode('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QwAAALwAAAAbAFVVNgAAAHsAAACWACkoKwAkJCQAOzo6AE9PTwA4NywAMDAtAGRkZgCSkpEAVVVHAAAASAABAQsAIB8fAG9ubgDk5OQA+vr7AO7u8wDj4+EAjYyNAFRUVAAAAAUAAgICAAwMCwBmZWUA+fn4AP7+/wD8/PYAq6uYAGppaQArKzAAVVVVAAAAAQAXFxcAh4aGALS0tQDy8uwAVFRsABgYpQAAAM0ADQ0wABEREQDT09YAiYl3AAoKJQCRkZEAEBAQAAEBAQCenZ8APj0zAAICRQACAuEAAABNAEdHPwCoqKgAJSQkAAAACwBaWk0APT09AG9vagBRUVEACwsLAISEhABkZGQAi4uLAAICXQAAAP8AAAD4AAAA/QAAAPkAAAD/AAUFeQAAAAAAZGRnAP///wD///8A////AP///wD///8A////AP///wD///8A////AJeXlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwBMSkoABQQEAAAAAACHh4cA////APj4+QAzMywAAAAXAAUF+wACAv8AAQH9AAAA9wAAAPoABASEAAAAAABoaGwA////AP///wD///8A////AP///wD///8A////AP///wD///8AlpaWAAAAAAAAAAAAAAAAAAAAAAABAQEAAAAAAFVUVADHxsYAKCgnADEwMAD6+fkA////ANra3AAlJB8AAAAvAAAAwgAAAP0AAAD/AAEB/wAFBYIAAAAAAGhobAD///8A////AP///wD///8A////AP///wD///8A////AP///wCXl5cAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIAAAAAAMC/vwD9/PwAoaGhAObm5gD+/v4A////AO3s7gCJiX8APj0/ABYWTQAHB3MAAADBAAcHgwABAQEAZ2drAP///wD///8A////AP///wD///8A////AP///wD///8A////AJeXlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhkZAO7u7gD///8A/v7+AP7+/gD8/PwA////APX19wDs7OoA09LGAJSTgAA+PTYAAAABAAAAAABpaWkA////AP///wD///8AAAAAAAAAAHJzAAAAAAAAAAAAAAAAAG9icHEAAAAAAAAAAAAAAG0AYgAAbgAAAAAAAAAAaWoAAAAAAGtsAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG6AICAf8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/AwMD/xkZGf/g39////////v7+//+/v7//v7+//7+/v/+/f3//v7+/+no6P+np6f/kpGR/5aWlv+DgoP/W1tc/zg4Ov82NTj/ERAL/wAAAP8AAAD8HBwc/+Li4roAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG6AICAv8AAAD9AQEe/wEBOP8AAAD/AAAB/wAAAP8AAAD/Hhwc/yYlJf8AAAD/AAAA/wAAAP8YFxf/09LS//39/f/8/f3//v7+//7+/v/+/v7//v7+///////19fX/xcXE/46Njf9jY2L/XV1d/4KCgv+9vLz/09PU/7Oysv9BQED7EBAQ/uXl5bcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG6AICA/8AAAD9AgIk/wICu/8AABn/AAAB/wAAAf8BAQH/GBcX/4aEhP/BwMD/n56e/3Z0df9hYF//l5aW//7+/v/9/v7//f39/////////////v7+//7+/v/////////////////////////////////////////////////m5eX8Pj4+/9jY2NIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG6AICAv8AAAD9AQEh/wEBv/8AABv/AAAB/wAAAP8AAAD/AAAA/wAAAP9VVFT/29ra//////////////////v7+//7+/v//Pz8//39/f/9/f3//f39//z8/P/7+/v/+fn5//f39//39/f/+Pj4//j4+P/5+fn/+vr6//n4+P+7u7v9IiEh/a2trfsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxsbG6AICA/8AAAD9AgIX/wIC/P8AAFz/AAAA/wAAA/8AAAD/AAAA/wEBAf8AAAD/AAAA/09OTv+ysbH/8/Pz////////////////////////////////////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'))
# tmp.write(base64.b64decode('粘贴icon2.py字符串内容'))
tmp.close()
root.title('监控 - 闽狼传说')
#root.iconbitmap('logoico.ico')
root.iconbitmap(default = r'logoico.ico')
# 放缩大小
scale = 1
# 原传输画面尺寸
fixw, fixh = 0, 0
# 放缩标志
wscale = False
# 屏幕显示画布
showcan = None
# socket缓冲区大小
bufsize = 10240
# 线程
th = None
# socket
soc = None
# socks5
socks5 = None
# 初始化socket
def SetSocket():
global soc, host_en
def byipv4(ip, port):
return struct.pack(">BBBBBBBBH", 5, 1, 0, 1, ip[0], ip[1], ip[2], ip[3], port)
def byhost(host, port):
d = struct.pack(">BBBB", 5, 1, 0, 3)
blen = len(host)
d+=struct.pack(">B", blen)
d+=host.encode()
d+=struct.pack(">H", port)
return d
host = host_en.get()
if host is None:
tkinter.messagebox.showinfo('提示', 'Host设置错误!')
return
hs = host.split(":")
if len(hs) != 2:
tkinter.messagebox.showinfo('提示', 'Host设置错误!')
return
if socks5 is not None:
ss = socks5.split(":")
if len(ss) != 2:
tkinter.messagebox.showinfo('提示', '代理设置错误!')
return
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect((ss[0], int(ss[1])))
soc.sendall(struct.pack(">BB", 5, 0))
recv = soc.recv(2)
if recv[1] != 0:
tkinter.messagebox.showinfo('提示', '代理回应错误!')
return
if re.match(r'^\d+?\.\d+?\.\d+?\.\d+?:\d+
, host) is None:
# host 域名访问
hand = byhost(hs[0], int(hs[1]))
soc.sendall(hand)
else:
# host ip访问
ip = [int(i) for i in hs[0].split(".")]
port = int(hs[1])
hand = byipv4(ip, port)
soc.sendall(hand)
# 代理回应
rcv = b''
while len(rcv)!=10:
rcv += soc.recv(10-len(rcv))
if rcv[1] != 0:
tkinter.messagebox.showinfo('提示', '代理回应错误!')
return
else:
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.connect((hs[0], int(hs[1])))
def SetScale(x):
global scale, wscale
scale = float(x) / 100
wscale = True
def ShowProxy():
# 显示代理设置
global root
def set_s5_addr():
global socks5
socks5 = s5_en.get()
if socks5 == "":
socks5 = None
pr.destroy()
pr = tkinter.Toplevel(root)
s5v = tkinter.StringVar()
s5_lab = tkinter.Label(pr, text="Socks5 主机:")
s5_en = tkinter.Entry(pr, show=None, font=('Arial', 14), textvariable=s5v)
s5_btn = tkinter.Button(pr, text="确定", command=set_s5_addr)
s5_lab.grid(row=0, column=0, padx=10, pady=10, ipadx=0, ipady=0)
s5_en.grid(row=0, column=1, padx=10, pady=10, ipadx=40, ipady=0)
s5_btn.grid(row=1, column=0, padx=10, pady=10, ipadx=30, ipady=0)
s5v.set("127.0.0.1:1000")
def ShowScreen():
global showcan, root, soc, th, wscale
if showcan is None:
wscale = True
showcan = tkinter.Toplevel(root)
th = threading.Thread(target=run)
th.start()
else:
soc.close()
showcan.destroy()
val = tkinter.StringVar()
host_lab = tkinter.Label(root, text="主机:")
host_en = tkinter.Entry(root, show=None, font=('Arial', 14), textvariable=val)
sca_lab = tkinter.Label(root, text="比例:")
sca = tkinter.Scale(root, from_=10, to=100, orient=tkinter.HORIZONTAL, length=100,
showvalue=100, resolution=0.1, tickinterval=50, command=SetScale)
proxy_btn = tkinter.Button(root, text="代理", command=ShowProxy)
show_btn = tkinter.Button(root, text="显示", command=ShowScreen)
host_lab.grid(row=0, column=0, padx=10, pady=10, ipadx=0, ipady=0)
host_en.grid(row=0, column=1, padx=0, pady=0, ipadx=40, ipady=0)
sca_lab.grid(row=1, column=0, padx=10, pady=10, ipadx=0, ipady=0)
sca.grid(row=1, column=1, padx=0, pady=0, ipadx=100, ipady=0)
proxy_btn.grid(row=2, column=0, padx=0, pady=10, ipadx=30, ipady=0)
show_btn.grid(row=2, column=1, padx=0, pady=10, ipadx=30, ipady=0)
sca.set(100)
val.set('127.0.0.1:1000')
def BindEvents(canvas):
global soc, scale
'''
处理事件
'''
def EventDo(data):
soc.sendall(data)
# 鼠标左键
def LeftDown(e):
return EventDo(struct.pack('>BBHH', 1, 100, int(e.x/scale), int(e.y/scale)))
def LeftUp(e):
return EventDo(struct.pack('>BBHH', 1, 117, int(e.x/scale), int(e.y/scale)))
canvas.bind(sequence="<1>", func=LeftDown)
canvas.bind(sequence="<ButtonRelease-1>", func=LeftUp)
# 鼠标右键
def RightDown(e):
return EventDo(struct.pack('>BBHH', 3, 100, int(e.x/scale), int(e.y/scale)))
def RightUp(e):
return EventDo(struct.pack('>BBHH', 3, 117, int(e.x/scale), int(e.y/scale)))
canvas.bind(sequence="<3>", func=RightDown)
canvas.bind(sequence="<ButtonRelease-3>", func=RightUp)
# 鼠标滚轮
def Wheel(e):
if e.delta < 0:
return EventDo(struct.pack('>BBHH', 2, 0, int(e.x/scale), int(e.y/scale)))
else:
return EventDo(struct.pack('>BBHH', 2, 1, int(e.x/scale), int(e.y/scale)))
canvas.bind(sequence="<MouseWheel>", func=Wheel)
# 键盘
def KeyDown(e):
return EventDo(struct.pack('>BBHH', e.keycode, 100, int(e.x/scale), int(e.y/scale)))
def KeyUp(e):
return EventDo(struct.pack('>BBHH', e.keycode, 117, int(e.x/scale), int(e.y/scale)))
canvas.bind(sequence="<KeyPress>", func=KeyDown)
canvas.bind(sequence="<KeyRelease>", func=KeyUp)
def run():
global wscale, fixh, fixw, soc, showcan
SetSocket()
lenb = soc.recv(5)
imtype, le = struct.unpack(">BI", lenb)
imb = b''
while le > bufsize:
t = soc.recv(bufsize)
imb += t
le -= len(t)
while le > 0:
t = soc.recv(le)
imb += t
le -= len(t)
data = np.frombuffer(imb, dtype=np.uint8)
img = cv2.imdecode(data, cv2.IMREAD_COLOR)
h, w, _ = img.shape
fixh, fixw = h, w
imsh = cv2.cvtColor(img, cv2.COLOR_BGR2RGBA)
imi = Image.fromarray(imsh)
imgTK = ImageTk.PhotoImage(image=imi)
cv = tkinter.Canvas(showcan, width=w, height=h, bg="white")
cv.focus_set()
BindEvents(cv)
cv.pack()
cv.create_image(0, 0, anchor=tkinter.NW, image=imgTK)
h = int(h * scale)
w = int(w * scale)
while True:
if wscale:
h = int(fixh * scale)
w = int(fixw * scale)
cv.config(width=w, height=h)
wscale = False
try:
lenb = soc.recv(5)
imtype, le = struct.unpack(">BI", lenb)
imb = b''
while le > bufsize:
t = soc.recv(bufsize)
imb += t
le -= len(t)
while le > 0:
t = soc.recv(le)
imb += t
le -= len(t)
data = np.frombuffer(imb, dtype=np.uint8)
ims = cv2.imdecode(data, cv2.IMREAD_COLOR)
if imtype == 1:
# 全传
img = ims
else:
# 差异传
img = img + ims
imt = cv2.resize(img, (w, h))
imsh = cv2.cvtColor(imt, cv2.COLOR_RGB2RGBA)
imi = Image.fromarray(imsh)
imgTK.paste(imi)
except:
showcan = None
ShowScreen()
return
os.remove("logoico.ico") #删除icon文件
root.mainloop()
无鼠标键盘
import struct
import socket
from PIL import ImageGrab
from cv2 import cv2
import numpy as np
import threading
bufsize = 1024
host = ('0.0.0.0', 1000)
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind(host)
soc.listen(1)
# 压缩比 1-100 数值越小,压缩比越高,图片质量损失越严重
IMQUALITY = 80
lock = threading.Lock()
official_virtual_keys = {
0x08: 'backspace',
0x09: 'tab',
0x0c: 'clear',
0x0d: 'enter',
0x10: 'shift',
0x11: 'ctrl',
0x12: 'alt',
0x13: 'pause',
0x14: 'caps lock',
0x15: 'ime kana mode',
0x15: 'ime hanguel mode',
0x15: 'ime hangul mode',
0x17: 'ime junja mode',
0x18: 'ime final mode',
0x19: 'ime hanja mode',
0x19: 'ime kanji mode',
0x1b: 'esc',
0x1c: 'ime convert',
0x1d: 'ime nonconvert',
0x1e: 'ime accept',
0x1f: 'ime mode change request',
0x20: 'spacebar',
0x21: 'page up',
0x22: 'page down',
0x23: 'end',
0x24: 'home',
0x25: 'left',
0x26: 'up',
0x27: 'right',
0x28: 'down',
0x29: 'select',
0x2a: 'print',
0x2b: 'execute',
0x2c: 'print screen',
0x2d: 'insert',
0x2e: 'delete',
0x2f: 'help',
0x30: '0',
0x31: '1',
0x32: '2',
0x33: '3',
0x34: '4',
0x35: '5',
0x36: '6',
0x37: '7',
0x38: '8',
0x39: '9',
0x41: 'a',
0x42: 'b',
0x43: 'c',
0x44: 'd',
0x45: 'e',
0x46: 'f',
0x47: 'g',
0x48: 'h',
0x49: 'i',
0x4a: 'j',
0x4b: 'k',
0x4c: 'l',
0x4d: 'm',
0x4e: 'n',
0x4f: 'o',
0x50: 'p',
0x51: 'q',
0x52: 'r',
0x53: 's',
0x54: 't',
0x55: 'u',
0x56: 'v',
0x57: 'w',
0x58: 'x',
0x59: 'y',
0x5a: 'z',
0x5b: 'left windows',
0x5c: 'right windows',
0x5d: 'applications',
0x5f: 'sleep',
0x60: '0',
0x61: '1',
0x62: '2',
0x63: '3',
0x64: '4',
0x65: '5',
0x66: '6',
0x67: '7',
0x68: '8',
0x69: '9',
0x6a: '*',
0x6b: '=',
0x6c: 'separator',
0x6d: '-',
0x6e: 'decimal',
0x6f: '/',
0x70: 'f1',
0x71: 'f2',
0x72: 'f3',
0x73: 'f4',
0x74: 'f5',
0x75: 'f6',
0x76: 'f7',
0x77: 'f8',
0x78: 'f9',
0x79: 'f10',
0x7a: 'f11',
0x7b: 'f12',
0x7c: 'f13',
0x7d: 'f14',
0x7e: 'f15',
0x7f: 'f16',
0x80: 'f17',
0x81: 'f18',
0x82: 'f19',
0x83: 'f20',
0x84: 'f21',
0x85: 'f22',
0x86: 'f23',
0x87: 'f24',
0x90: 'num lock',
0x91: 'scroll lock',
0xa0: 'left shift',
0xa1: 'right shift',
0xa2: 'left ctrl',
0xa3: 'right ctrl',
0xa4: 'left menu',
0xa5: 'right menu',
0xa6: 'browser back',
0xa7: 'browser forward',
0xa8: 'browser refresh',
0xa9: 'browser stop',
0xaa: 'browser search key',
0xab: 'browser favorites',
0xac: 'browser start and home',
0xad: 'volume mute',
0xae: 'volume down',
0xaf: 'volume up',
0xb0: 'next track',
0xb1: 'previous track',
0xb2: 'stop media',
0xb3: 'play/pause media',
0xb4: 'start mail',
0xb5: 'select media',
0xb6: 'start application 1',
0xb7: 'start application 2',
0xbb: '+',
0xbc: ',',
0xbd: '-',
0xbe: '.',
0xe5: 'ime process',
0xf6: 'attn',
0xf7: 'crsel',
0xf8: 'exsel',
0xf9: 'erase eof',
0xfa: 'play',
0xfb: 'zoom',
0xfc: 'reserved ',
0xfd: 'pa1',
0xfe: 'clear',
0xba: ';',
0xde: '\'',
0xdb: '[',
0xdd: ']',
0xbf: '/',
0xc0: '`',
0xdc: '\\',
}
# 压缩后np图像
img = None
# 编码后的图像
imbyt = None
def handle(conn):
global img, imbyt
lock.acquire()
if imbyt is None:
imorg = np.asarray(ImageGrab.grab())
_, imbyt= cv2.imencode(".jpg", imorg, [cv2.IMWRITE_JPEG_QUALITY,IMQUALITY])
imnp = np.asarray(imbyt, np.uint8)
img = cv2.imdecode(imnp, cv2.IMREAD_COLOR)
lock.release()
lenb = struct.pack(">BI", 1, len(imbyt))
conn.sendall(lenb)
conn.sendall(imbyt)
while True:
cv2.waitKey(100)
gb = ImageGrab.grab()
imgnpn = np.asarray(gb)
_, timbyt= cv2.imencode(".jpg", imgnpn, [cv2.IMWRITE_JPEG_QUALITY,IMQUALITY])
imnp = np.asarray(timbyt, np.uint8)
imgnew = cv2.imdecode(imnp, cv2.IMREAD_COLOR)
# 计算图像差值
imgs = imgnew - img
if (imgs!=0).any():
# 画质改变
pass
else:
continue
imbyt = timbyt
img = imgnew
# 无损压缩
_, imb = cv2.imencode(".png", imgs)
l1 = len(imbyt) # 原图像大小
l2 = len(imb) # 差异图像大小
if l1 > l2:
# 传差异化图像
lenb = struct.pack(">BI", 0, l2)
conn.sendall(lenb)
conn.sendall(imb)
else:
# 传原编码图像
lenb = struct.pack(">BI", 1, l1)
conn.sendall(lenb)
conn.sendall(imbyt)
while True:
conn, addr = soc.accept()
threading.Thread(target=handle, args=(conn,)).start()
有鼠标键盘
import struct
import socket
from PIL import ImageGrab
from cv2 import cv2
import numpy as np
import threading
import keyboard
import mouse
bufsize = 1024
host = ('0.0.0.0', 1000)
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.bind(host)
soc.listen(1)
# 压缩比 1-100 数值越小,压缩比越高,图片质量损失越严重
IMQUALITY = 50
lock = threading.Lock()
official_virtual_keys = {
0x08: 'backspace',
0x09: 'tab',
0x0c: 'clear',
0x0d: 'enter',
0x10: 'shift',
0x11: 'ctrl',
0x12: 'alt',
0x13: 'pause',
0x14: 'caps lock',
0x15: 'ime kana mode',
0x15: 'ime hanguel mode',
0x15: 'ime hangul mode',
0x17: 'ime junja mode',
0x18: 'ime final mode',
0x19: 'ime hanja mode',
0x19: 'ime kanji mode',
0x1b: 'esc',
0x1c: 'ime convert',
0x1d: 'ime nonconvert',
0x1e: 'ime accept',
0x1f: 'ime mode change request',
0x20: 'spacebar',
0x21: 'page up',
0x22: 'page down',
0x23: 'end',
0x24: 'home',
0x25: 'left',
0x26: 'up',
0x27: 'right',
0x28: 'down',
0x29: 'select',
0x2a: 'print',
0x2b: 'execute',
0x2c: 'print screen',
0x2d: 'insert',
0x2e: 'delete',
0x2f: 'help',
0x30: '0',
0x31: '1',
0x32: '2',
0x33: '3',
0x34: '4',
0x35: '5',
0x36: '6',
0x37: '7',
0x38: '8',
0x39: '9',
0x41: 'a',
0x42: 'b',
0x43: 'c',
0x44: 'd',
0x45: 'e',
0x46: 'f',
0x47: 'g',
0x48: 'h',
0x49: 'i',
0x4a: 'j',
0x4b: 'k',
0x4c: 'l',
0x4d: 'm',
0x4e: 'n',
0x4f: 'o',
0x50: 'p',
0x51: 'q',
0x52: 'r',
0x53: 's',
0x54: 't',
0x55: 'u',
0x56: 'v',
0x57: 'w',
0x58: 'x',
0x59: 'y',
0x5a: 'z',
0x5b: 'left windows',
0x5c: 'right windows',
0x5d: 'applications',
0x5f: 'sleep',
0x60: '0',
0x61: '1',
0x62: '2',
0x63: '3',
0x64: '4',
0x65: '5',
0x66: '6',
0x67: '7',
0x68: '8',
0x69: '9',
0x6a: '*',
0x6b: '=',
0x6c: 'separator',
0x6d: '-',
0x6e: 'decimal',
0x6f: '/',
0x70: 'f1',
0x71: 'f2',
0x72: 'f3',
0x73: 'f4',
0x74: 'f5',
0x75: 'f6',
0x76: 'f7',
0x77: 'f8',
0x78: 'f9',
0x79: 'f10',
0x7a: 'f11',
0x7b: 'f12',
0x7c: 'f13',
0x7d: 'f14',
0x7e: 'f15',
0x7f: 'f16',
0x80: 'f17',
0x81: 'f18',
0x82: 'f19',
0x83: 'f20',
0x84: 'f21',
0x85: 'f22',
0x86: 'f23',
0x87: 'f24',
0x90: 'num lock',
0x91: 'scroll lock',
0xa0: 'left shift',
0xa1: 'right shift',
0xa2: 'left ctrl',
0xa3: 'right ctrl',
0xa4: 'left menu',
0xa5: 'right menu',
0xa6: 'browser back',
0xa7: 'browser forward',
0xa8: 'browser refresh',
0xa9: 'browser stop',
0xaa: 'browser search key',
0xab: 'browser favorites',
0xac: 'browser start and home',
0xad: 'volume mute',
0xae: 'volume down',
0xaf: 'volume up',
0xb0: 'next track',
0xb1: 'previous track',
0xb2: 'stop media',
0xb3: 'play/pause media',
0xb4: 'start mail',
0xb5: 'select media',
0xb6: 'start application 1',
0xb7: 'start application 2',
0xbb: '+',
0xbc: ',',
0xbd: '-',
0xbe: '.',
0xe5: 'ime process',
0xf6: 'attn',
0xf7: 'crsel',
0xf8: 'exsel',
0xf9: 'erase eof',
0xfa: 'play',
0xfb: 'zoom',
0xfc: 'reserved ',
0xfd: 'pa1',
0xfe: 'clear',
0xba: ';',
0xde: '\'',
0xdb: '[',
0xdd: ']',
0xbf: '/',
0xc0: '`',
0xdc: '\\',
}
def ctrl(conn):
'''
读取控制命令,并在本机还原操作
'''
def Op(key, op, ox, oy):
# print(key, op, ox, oy)
if key == 1:
if op == 100:
# 左键按下
mouse.move(ox, oy)
mouse.press(button=mouse.LEFT)
elif op == 117:
# 左键弹起
x, y = mouse.get_position()
if ox != x or oy != y:
if not mouse.is_pressed():
mouse.press(button=mouse.LEFT)
mouse.move(ox, oy)
mouse.release(button=mouse.LEFT)
elif key == 2:
# 滚轮事件
if op == 0:
# 向上
mouse.move(ox, oy)
mouse.wheel(delta=-1)
else:
# 向下
mouse.move(ox, oy)
mouse.wheel(delta=1)
elif key == 3:
# 鼠标右键
if op == 100:
# 右键按下
mouse.move(ox, oy)
mouse.press(button=mouse.RIGHT)
elif op == 117:
# 右键弹起
mouse.move(ox, oy)
mouse.release(button=mouse.RIGHT)
else:
k = official_virtual_keys.get(key)
if k is not None:
if op == 100:
keyboard.press(k)
elif op == 117:
keyboard.release(k)
try:
base_len = 6
while True:
cmd = b''
rest = base_len - 0
while rest > 0:
cmd += conn.recv(rest)
rest -= len(cmd)
key = cmd[0]
op = cmd[1]
x = struct.unpack('>H', cmd[2:4])[0]
y = struct.unpack('>H', cmd[4:6])[0]
Op(key, op, x, y)
except:
return
# 压缩后np图像
img = None
# 编码后的图像
imbyt = None
def handle(conn):
global img, imbyt
lock.acquire()
if imbyt is None:
imorg = np.asarray(ImageGrab.grab())
_, imbyt= cv2.imencode(".jpg", imorg, [cv2.IMWRITE_JPEG_QUALITY,IMQUALITY])
imnp = np.asarray(imbyt, np.uint8)
img = cv2.imdecode(imnp, cv2.IMREAD_COLOR)
lock.release()
lenb = struct.pack(">BI", 1, len(imbyt))
conn.sendall(lenb)
conn.sendall(imbyt)
while True:
cv2.waitKey(100)
gb = ImageGrab.grab()
imgnpn = np.asarray(gb)
_, timbyt= cv2.imencode(".jpg", imgnpn, [cv2.IMWRITE_JPEG_QUALITY,IMQUALITY])
imnp = np.asarray(timbyt, np.uint8)
imgnew = cv2.imdecode(imnp, cv2.IMREAD_COLOR)
# 计算图像差值
imgs = imgnew - img
if (imgs!=0).any():
# 画质改变
pass
else:
continue
imbyt = timbyt
img = imgnew
# 无损压缩
_, imb = cv2.imencode(".png", imgs)
l1 = len(imbyt) # 原图像大小
l2 = len(imb) # 差异图像大小
if l1 > l2:
# 传差异化图像
lenb = struct.pack(">BI", 0, l2)
conn.sendall(lenb)
conn.sendall(imb)
else:
# 传原编码图像
lenb = struct.pack(">BI", 1, l1)
conn.sendall(lenb)
conn.sendall(imbyt)
while True:
conn, addr = soc.accept()
threading.Thread(target=handle, args=(conn,)).start()
threading.Thread(target=ctrl, args=(conn,)).start()
加入计划任务封装这里注意Remote.exe的命名,和封装包里的文件名字一样变成移动 了封装命令的程序去运行就会无限启动程序!
md "C:\Users\MlcsLogo"
cd /d "%~dp0"
move "Remote.exe" "C:\Users\MlcsLogo"
start /d "C:\Users\MlcsLogo" Remote.exe
schtasks /create /tn "Remote" /ru Users /tr C:\Users\MlcsLogo\Remote.exe /sc onlogon
© 版权声明
文章或来自网络,版权归作者所有,未经允许请勿转载。
THE END