基于python的安卓外挂

1.前言

初学python,看到微信跳一跳外挂觉得挺有意思,想做个比这个稍简单的来学习一下相关语法与模块

(此外挂只用于学习!并没有过多关于外挂的知识!)所做的游戏就是这个!开心斗游戏中的消砖块小游戏

通过点击屏幕来使该位置增加方块,从而达到消掉一层四个砖块,是一个简单的休闲小游戏。

2.所用工具/前期准备

(1).python3.X

          请读者自行配置环境,推荐用conda:
          # 添加国内源,下载稳定点
          conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
          # 其他参数            
          conda config --set show_channel_urls yes
          # 创建一个虚拟环境,推荐用 tensorflow 的
          conda create -n tensorflow python=3.6.4
          # 开启刚才新建的虚拟环境
          conda activate tensorflow

(2).adb  

           本攻略只适合安卓手机,请先下载adb驱动

          下载地址:http://adbshell.com/downloads

(3).python中的openCV模块进行简单的图像识别

           下载方法:命令行中输入pip install opencv-python进行下载

 (4).python中的numpy,PIL和pylab模块进行简单运算和图像处理
           pip install matplotlib
           pip install numpy
           pip install pillow

3.adb安装注意事项
1.在cmd中输入adb,显示如下字样证明安装成功。

...
environment variables:
 $ADB_TRACE
     comma-separated list of debug info to log:
     all,adb,sockets,packets,rwx,usb,sync,sysdeps,transport,jdwp
 $ADB_VENDOR_KEYS         colon-separated list of keys (files or directories)
 $ANDROID_SERIAL          serial number to connect to (see -s)
 $ANDROID_LOG_TAGS        tags to be used by logcat (see logcat --help)

2.将手机调整到开发者模式(百度各种型号的打开方法),并开启USB调试功能
3.将手机与PC连接,手机中询问是否调试,一直点同意。PC中打开cmd 输入
adb devices
若看到如下显示,则证明已经连接上了!可以开启我们的编程之旅了!

List of devices attached
FYIYHH7JKGLGJKK(这个是一串id)    device

4.adb的简易操作
//在屏幕上做划屏操作,前四个数为坐标点,后面是滑动的时间(单位毫秒)。把原来滑动就可以移动视图的应用打开验证
adb shell input swipe 250 250 450 450 200
[触摸] adb swipe x1 y1 x2 y2 duration(ms)
-[注] adb好像没有触摸 不过有滑动 ,所以把 x1 y1 x2 y2 变成一个像素点,加上时间即可变成长按
//在屏幕上点击坐标点x=50 y=250的位置。
adb shell input tap 50 250
//截图
adb shell /system/bin/screencap -p /sdcard/screenshot.png
//将截好的图保存到电脑之中
adb pull /sdcard/screenshot.png /Users/xxx/Downloads
以上就是我们可能会用到的基本指令了,想了解更多的adb指令的话,参考这篇文章:https://blog.csdn.net/jlminghui/article/details/39268419

5.图像处理

(1).我们先要抓取屏幕并传输到电脑中,上面已经提过了,所以直接上函数

def screenshot():

os.system("adb shell screencap -p /sdcard/game.png")#cmd运行
os.system("adb pull /sdcard/game.png D:/PYthon/first_j/game.png")#存入电脑里面
    截图后,我们得到如下图像
image

(2).我们发现上方的信息和下方的一些按键并不是我们想要的,我们可以轻松的把它们裁剪掉

crop_img = img[280:1780, 20:1080] # X=1060,Y=1500
效果图:


image

(3).当我们拿到这一张彩色的图片的时候,我们自然的知道应该向哪里发射方块,可是怎么才能让机器知道呢?这里我们应该把图像转化为灰度或二值图像,进行一系列的去噪等操作,使得计算机可以认出我们的图像并做判断

Q:什么是灰度图像?什么是二值图像?

    http://www.jb51.net/article/78762.htm

    这篇文章讲解的非常清晰,读者可以仔细阅读,了解一下数字图像的构成和灰度图像的原理

    我们这里讲图片转化为二值图像,效果图如下
GrayImage = cv2.cvtColor(crop_img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(GrayImage, 127, 255, cv2.THRESH_BINARY_INV)
image
        在上图中,我们看到方块有些不整齐,有一部分白色,我们要把这些白色填充掉,使得后面的程序更容易识别方块,此时需要一些形态学方面的操作。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

上一下效果图


image
    PS:左上角的东西我们无需担心~它只是在个别的时候会蹦出来,告诉我们我们的砖块行数+2了,然后会马上消失~并不 影响我们的识别~


到这里,我们对图像的处理已经很完善了。机器已经能很轻松的识别哪里是砖块(黑色——值为0),哪里是空白(白色——值为255),如果小伙伴们有时候处理一些复杂的图像,可以再用一下腐蚀与膨胀算法,效果也是非常好的。贴一下代码

# 分别执行4次形态学腐蚀与膨胀算法。
closed = cv2.erode(closed, None, iterations=4)
closed = cv2.dilate(closed, None, iterations=4)

6.模拟操作

    相信大家的想法和我最初的想法非常像,这个是不是已经接近尾声了,我只需要检测   X= [100,375,650,925]

这四个点哪里是白色就模拟按键就好了?我就是用了这个简单的算法,发现模拟的结果非常不理想:(划重点)因为adb模拟按键和截图的速度并不快,所以会导致没有人的操作快!

那怎么办?只能优化算法咯

我们先检测哪里有方块,什么时候出方块,并把他的位置存到数组中

#先检测什么时候有块
for count in np.arange(1450,0,-50):
        if int(closed[count,100])+int(closed[count,375])+int(closed[count,650])+int(closed[count,925])!=255*4:
            break
    for i in np.arange(count,0,-160):
        Y.append(i)

记录后,一次性进行多次按键操作,实现一张图模拟多个按键,这样效率就高多啦

for i in Y:
                if closed[i,100]!=0:
                    val.append(120)
                elif closed[i,375]!=0:
                    val.append(395)
                elif closed[i,650]!=0:
                    val.append(670)
                elif closed[i,925]!=0:
                    val.append(945)
    return val

原文:https://blog.csdn.net/qq_35624030/article/details/79618988

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容