使用CyberController来将旧手机改造成电脑外挂

news2024/11/19 5:53:16

这个是我在哔哩哔哩中发现的感觉比较实用在这里发表一下使用过程中的问题和见解

原作者视频旧手机改电脑外挂-效率或将“提升300%?”_哔哩哔哩_bilibili

参考视频旧手机改电脑外挂,简陋的参考视频_手机游戏热门视频 (bilibili.com)

  

 

 感谢这两位博主

 这个是文字教程和番外篇​​​​​​使用CyberController来将旧手机改造成电脑外挂------手机交互翻译、人脸解锁、语音识别....各个功能等你来探索_我真的爱发明的博客-CSDN博客_cybercontroller



zCyberController手机外挂番外篇:源代码的二次修改_二次更改外挂_我真的爱发明的博客-CSDN博客

 如果不能用或者出了BUG可以把KeyboardListener.py的代码改成如下所示

import keyboard 
import time 
from screen_shot import ScreenCapture 
import io 
import pyautogui 
 
class KeyboardListener: 
	def __init__(self, tcpServer): 
		self.tcpServer = tcpServer 
		self.t = 0 
		self.c = 0 
		self.key_state_map={} 
		self.screen_capture = None 
		 
	def listen_keyboard(self,callback): 
		self.callback = callback 
		keyboard.hook(self.onKeyEvent) 
		keyboard.wait() 
 
	def onImgCapture(self,pic):	 
		imgByteArr = io.BytesIO() 
		pic.save(imgByteArr, format='JPEG') 
		bytes_data = imgByteArr.getvalue() 
		self.tcpServer.send_img(bytes_data) 
 
	def isCtrlHolding(self): 
		return ('ctrl' in self.key_state_map and self.key_state_map['ctrl']=='down')\ 
			or ('left ctrl' in self.key_state_map and self.key_state_map['left ctrl']=='down')\ 
			or ('right ctrl' in self.key_state_map and self.key_state_map['right ctrl']=='down') 
 
	def isAltHolding(self): 
		return ('alt' in self.key_state_map and self.key_state_map['alt']=='down')\ 
			or ('left alt' in self.key_state_map and self.key_state_map['left alt']=='down')\ 
			or ('right alt' in self.key_state_map and self.key_state_map['right alt']=='down') 
 
	def isKeyHolding(self,key): 
		return (key in self.key_state_map and self.key_state_map[key]=='down') 
 
 
	def onKeyEvent(self,key): 
		#update key_state_map 
		self.key_state_map[key.name.lower()]=key.event_type 
 
		#is screenshoot? 
 
		if  self.isKeyHolding("caps lock")\ 
			and key.event_type=="down"\ 
			and key.name.lower()=="a": 
			self.screen_capture = ScreenCapture() 
			self.screen_capture.are_capture(self.onImgCapture) 
 
		#print(self.key_state_map) 
		#is triple c? 
		# if  key.event_type=="down" \ 
		# 	and key.name.lower()=="c" \ 
		# 	and self.isCtrlHolding(): 
		# 
		# 	if self.t == 0: 
		# 		self.t=time.time() 
		# 		self.c += 1 
		# 		print("wait for nex c",self.c) 
		# 		return 
		# 
		# 	if (time.time()-self.t<0.5): 
		# 		self.t=time.time() 
		# 		self.c += 1 
		# 		print("wait for nex c:",self.c) 
		# 
		# 	else: 
		# 		self.c = 0 
		# 		self.t=0 
		# 		print("wait for nex c",self.c) 
		# 
		# 	if self.c>=2: 
		# 		self.c=0 
		# 		print("need trans") 
		# 		if self.callback: 
		# 			self.callback() 
 
 
 
 
		if  key.event_type=="down" \ 
			and key.name.lower()=="q" \ 
			and self.isCtrlHolding(): 
			pyautogui.hotkey('ctrl', 'c') 
 
			print("need trans") 
			if self.callback: 
				self.callback()

如果自动杀进程的的话修改Controller.py为如下代码

import json 
import time 
 
from ComputerMonitor import ComputerMonitor 
from KeyboardListener import KeyboardListener 
from TcpServer import TcpServer 
from service import * 
import threading 
 
def on_message_received(data): 
	command_message = json.loads(data) 
	script = command_message["script"] 
	params = command_message["params"] 
	exec(script) 
 
def on_screen_locked(): 
	print("screen locked") 
	data = json.dumps({"command":2,"message":""}) 
	print(data) 
	tcpServer.send_text(data) 
 
computerMonitor = ComputerMonitor(on_screen_locked) 
 
def on_tcp_connected(): 
	if not computerMonitor.started: 
		computerMonitor.start() 
 
 
tcpServer = TcpServer() 
tcpServer.set_receive_listener(on_message_received) 
tcpServer.connected_listener = on_tcp_connected 
tcpServer.start() 
 
keyboardListener = KeyboardListener(tcpServer) 
 
def onTrans(): 
	print("need trans1111") 
	content = getClipContent() 
	text = json.dumps({"command":1,"message":content}) 
 
	tcpServer.send_text(text) 
 
 
def Trans_alive():		#用来进行TCP保活 
	content = '' 
	# text = json.dumps({"command":1,"message":content}) 
	text = json.dumps({"command":11,"message":content})		#这里之所以用11,而不是1,是因为原作者的command1对应的命令是翻译,会在手机端触发对应的翻译任务看,而11就只相当于是一条空命令了,既可以完成保活,又不会干扰手机端的命令执行,一举两得 
	print("text:", text) 
	tcpServer.send_text(text) 
 
def run(): 
	print('用来保活的,不用管我') 
	t = threading.Timer(3, run) 
	t.start() 
 
	Trans_alive() 
 
 
t = threading.Timer(3,run) 
t.start() 
 
keyboardListener.listen_keyboard(onTrans)

如果连接不到的话可以按下键盘的win+R

 输入cmd

 查看IP配置

 有几个适配器就用它减一找到TcpServer.py编辑它把红圈圈住的数字改为刚才得到的数字

 好了这就是我的一些见解

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

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

相关文章

Java十大经典排序算法

目录1. 插入类排序1.1 直接插入排序1.2 希尔排序2. 选择类排序2.1 直接选择排序2.2 堆排序3. 交换类排序3.1 冒泡排序3.2 快速排序&#xff08;递归&#xff09;3.2.1 快排的优化3.3 快速排序&#xff08;非递归——栈&#xff09;4. 归并类排序4.1 二路归并排序&#xff08;递…

管理者必备的六大复盘方法工具汇总

无论是对于企业还是个人来说&#xff0c;复盘都是一个能让我们快速成长的方法&#xff0c;尤其是项目经理和PMO&#xff0c;你是带领项目团队的&#xff0c;每一次项目的完成&#xff0c;都有很多经验&#xff0c;俗话说&#xff0c;最大的浪费是经验的浪费&#xff01;复盘的作…

基础IO-文件操作函数,文件描述符,理解缓冲区

文章目录基础IO回顾c语言的文件操作函数操作系统的文件操作函数open—打开文件write—写入文件read—读文件内容感性现象理解文件文件描述符fd文件描述符的分配规则重定向重定向函数dup2输出重定向追加重定向输入重定向再次理解文件理解缓冲区感性理解缓冲区缓冲区刷新策略写一…

新的一年,建议尝试下这7个JavaScript 库

常言道“你不必重新发明轮子”。第三方库它可以帮助您以简单的方式编写复杂且耗时的功能&#xff0c;一个好的项目应当使用一些优秀的库&#xff0c;下面我推荐下&#xff0c;在你的下个项目中&#xff0c;建议用上这7 个有用的库。1、Video.jsVideo.js 是一个基于 HTML5 的视频…

跑步用挂脖耳机好还是无线耳机、公认最好的跑步耳机推荐

蓝牙耳机近几年受到市场的欢迎&#xff0c;种类越来越多&#xff0c;各类功能也日益五花八门&#xff0c;消费者很难准确的进行分辨&#xff0c;一不小心可能买到华而不实的产品。现在了解一下值得入手的蓝牙耳机&#xff0c;从多个角度对蓝牙耳机进行评估后&#xff0c;得出以…

互联网导航系统——DNS:《流浪地球2》中重启互联网的现实解读

《流浪地球2》展现了一个浩大的宇宙级工程&#xff1a;宏大壮观的万座行星发动机、拥有超强算力的量子计算机、连接天地的太空电梯……这些“硬科技”让观众大开眼界。 电影中刘德华饰演的图恒宇能否重启互联网根服务器是拯救地球任务的关键。互联网可以重启吗&#xff1f;现实…

Array.prototype.sort()排序,升降排序使用方法

sort() 方法对数组中的元素进行适当排序并返回数组。这种情况不一定稳定。默认排序顺序根据字符串 Unicode 代码点。 目录 升序降序排序法 对象可以按照某个属性排序 const months [March, Jan, Feb, Dec] months.sort() // [Dec, Feb, Jan, March] console.log(months) // …

聊聊GC是如何快速枚举根节点的

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 世界上最快乐的事&#xff0c;莫过于为理想而奋斗。——苏格拉底 文章目录什么是根节点枚举根节点枚举存在的问题如何解决根节点枚举的问题安全点安全区域HotSpot使用的是可达性分析算法&#xff0c;该算法需…

ssm高校大学校园租赁平台的设计与实现java

当今社会&#xff0c;信息技术发展快速。同时&#xff0c;随着生活水平提高&#xff0c;学生有了更大的购买力&#xff0c;这就使得闲置物品增多&#xff0c;校园里物品更新快&#xff0c;使用周期短。而且传统的校园租赁平台&#xff0c;已经不能够满足学生的需求。学院校园租…

人工智能识别图片食物

一、准备食物图片&#xff08;橘子和苹果&#xff09;二、识别学习关键代码编写public static void study() throws Exception {//学习Picture picture new Picture();//图片解析类 图片&#xff08;文件&#xff09;-三通道矩阵Config config new Config();//现有的环境业务…

一文了解WebSocket及Springboot集成WebSocket

文章目录WebSocket是什么WebSocket通信原理和机制WebSocket协议是什么WebSocket协议和Http协议有什么区别WebSocket常用在那些场景Springboot集成WebSocketpom依赖java相关代码configcomponenthtml代码页面访问效果WebSocket是什么 &#x1f34a;WebSocket是一种网络通信协议&…

Linux C编程

编写C代码 编辑器&#xff1a;vim&#xff0c;编写.c文件 编译 gcc 源文件 -o 生成可执行文件名 gcc -c&#xff1a;只编译&#xff0c;不链接&#xff0c;生成.o文件 make工具和Makefile文件 make工具&#xff1a;GNU make&#xff0c;是一个文件&#xff0c;用于将源代…

【CANoe示例分析】EthernetCanGW_Test_CN

1、工程路径 此示例工程来自于Vector官网:EthernetCanGW_Test_CN 感兴趣的可以自行下载! 2、示例目的 如何在CANoe中创建一个网关,实现转发以太网报文到多个CAN网络中。该使用案例是对CAN网络进行压力测试 3、示例内容 本示例通过执行Test Module里的测试用例Bus_load…

《电路/电路原理》—戴维宁(南)定理实战演练

前言战前准备什么是戴维南定理&#xff1f;戴维南定理&#xff08;Thevenins theorem&#xff09;标准解释&#xff1a;含独立电源的线性电阻单口网络N&#xff0c;就端口特性而言&#xff0c;可以等效为一个电压源和电阻串联的单口网络。电压源的电压等于单口网络在负载开路时…

CSS预处理器、移动端适配

1、预处理器概念 1.1、CSS编写的痛点 CSS作为一种样式语言, 本身用来给HTML元素添加样式是没有问题的。 但是目前前端项目已经越来越复杂, 不再是简简单单的几行CSS就可以搞定的, 我们需要几千行甚至上万行的CSS来完成页面的美化工作。 随着代码量的增加, 必然会造成很多的…

LeetCode-26. 删除有序数组中的重复项

目录题目分析双指针理解代码实现题目来源 26. 删除有序数组中的重复项 题目分析 解法&#xff1a; 双指针 首先注意数组是有序的&#xff0c;那么重复的元素一定会相邻。 要求删除重复元素&#xff0c;实际上就是将不重复的元素移到数组的左侧。 考虑用 2 个指针&#xff0c;…

拉伯证券|7900亿芯片巨头狂跌,发生了什么?

全球芯片巨子忽然爆雷。 英特尔刚刚交出了一份“十分糟糕”的财报。美东时间1月26日美股盘后&#xff0c;英特尔公布的2022第四季度及全年财报显现&#xff0c;第四季度的营收为140亿美元&#xff0c;同比大幅下降32%&#xff0c;不及商场预期&#xff1b;第四季度净亏损7亿美元…

【项目精选】基于SpringBoot和Vue开发的功能强大的图书馆系统(附源码)

功能介绍 图书馆系统功能包括&#xff1a; 1、读者端&#xff1a; 1.智能推荐图书 2.读者在线预约座位 3.读者借阅归还图书 4.图书详情 5.图书评论、评星 6.用户登录、注册、修改个人信息 7.用户自定义图书标签 8.用户报名活动参加活动 9.书架展示和添加删除 10.用户邮件登录…

Win11的两个实用技巧系列之u盘怎么设置密码?

Win11系统u盘怎么设置密码?Win11设置u盘密码的方法win11U盘怎么设置密码&#xff1f;今天小编就为大家带来了Win11设置u盘密码的方法&#xff0c;需要的朋友一起看看吧现在还是有很多用户都在使用U盘来存储一些重要的文件和数据&#xff0c;而为了更好的保护里面的安全&#x…

mongodb的索引操作

Mongodb的索引操作 学习目标 掌握 mongodb索引的创建&#xff0c;删除操作掌握 mongodb查看索引的方法掌握 mongodb创建唯一索引的方法 1. 为什么mongdb需要创建索引 加快查询速度进行数据的去重 2. mongodb创建简单的索引方法 语法&#xff1a;db.集合名.ensureIndex({属…