吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13998|回复: 19
上一主题 下一主题
收起左侧

[C&C++ 原创] 【C++】逻辑配合LUA实现自动答题(微信小程序通杀)

  [复制链接]
跳转到指定楼层
楼主
狂暴补师亚丝娜 发表于 2018-4-19 16:47 回帖奖励
本帖最后由 wushaominkk 于 2018-4-27 17:48 编辑

首先声明:
1、此源码为原创源码,相信吾爱的大神们见多识广。
2、本源码基本上通杀微信上判断类的游戏,如判断加减、判断数字大小,通关免费拿礼品的。(需要修改部分源码)
3、由于微信小程序上的基本上都是套路,越来越快,除非修改内存,所以即使是脚本秒回答+100%正确,也不一定通关。但是平均3把通关一次是没有问题的。

接下来,就让我详细地将源码+翻译+思路全部发出来。
首先说说原理:
通过对屏幕的识别,使用自己的字库,读取屏幕上的文字,再将文字通过判断,来选择按正确的按钮还是错误的按钮。
难点如下:效率。微信小程序对效率讲究极高,是必须回答这道题过后,才会出现下一道题,所以没办法预判。

源码如下:
[Lua] 纯文本查看 复制代码
local ocr, msg = createOCR({
                type = "tesseract",
        })

local function Mytext(a,b,c,d) --获取屏幕上的文字,a,b,c,d是对应的坐标
        if ocr ~= nil then
                local rect = {a,b,c,d}
                local diff = {"0xffffff-0x0f0f0f"}
                local code, text = ocr:getText({
                                rect = rect,
                                diff = diff
                        })
                if code == 0 then
                        return text --返回读取的字符串
                end
        end
end

init("0",0)
setScreenScale(1080,1920)
local qq = 1 --全局变量,用于判断画面是否改变
for i = 1, 100 do --模仿continue,跳过本次循环
        while true do
                local texta5 = Mytext(492,489,594,568)
                if qq ~= texta5 then --如果捕获到的画面与上次内容不同
                        qq = texta5  --赋值给全局变量
                        local texta = Mytext(204,750,471,944) --第一个数字
                        local texta3 = Mytext(608,765,930,951) --第二个数字
                        local texta4 = Mytext(303,961,779,1162) --结果
                        if getColor(544,818) == 0xffffff then --判断是加号还是减号
                                local result = texta + texta3

                                        if(string.find(texta4,result) ~= nil) then --判断读取到的字符串是否包含正确答案
                                                touchDown(0,318,1652)
                                                mSleep(10)
                                                touchUp(0,318,1652)
                                                break
                                        else
                                                touchDown(0,815,1623)
                                                mSleep(10)
                                                touchUp(0,815,1623)
                                                break
                                        end
                        else
                                local result = texta - texta3
                                        if(string.find(texta4,"-")) then --判断如果是减号,答案是否含有负号
                                                if result >= 0 then --正确结果>0,却有负号,说明这道题答案是错的
                                                        touchDown(0,815,1623)
                                                        mSleep(10)
                                                        touchUp(0,815,1623)
                                                        break
                                                else
                                                        touchDown(0,318,1652)
                                                        mSleep(10)
                                                        touchUp(0,318,1652)
                                                        break
                                                end
                                        end
                                        if(string.find(texta4,result) ~= nil) then --判断读取到的字符串是否包含正确答案
                                                touchDown(0,318,1652)
                                                mSleep(10)
                                                touchUp(0,318,1652)
                                                break
                                        else
                                                touchDown(0,815,1623)
                                                mSleep(10)
                                                touchUp(0,815,1623)
                                                break
                                        end
                        end
                else
                        break
                end
        end
end


微信小程序界面:


成品效果:https://pan.baidu.com/s/1R9LHt07BpixBBhUZxXqXxA?from=timeline

首先,为了效率:
1、LUA不能进行大范围的读取屏幕,否则影响效率。
2、由于脚本非商用,所以去掉了所有不该有的判断,只留下主方法。(大幅度提高效率)
3、【重点】读取到的字符串可能还有未知字符串,即使读取到的数字是3,但是获取到的长度却是4,据大神透露这是正常的。(即使是空白),所以用 local a = b这种方法是完全不行的。
4、为了少读取一块区域,因此在判断是加号还是减号,直接判断减号上面有没有白色的点,如果有,那么他就是加号,没有就是减号!(判断点比判断区域效率提高很多!)
5、源码中的texta4是包含等号的所有结果。比如图中6+5,lua脚本读取到的结果为:【=13】,而非13,。并且如果再把等号去掉进行比较,效率又会降低,所以使用find方法,直接在字符串中查找字符串!特殊情况就是1和-1这种区别,所以需要判断是否大于0.如果结果大于0,正确答案却含有负号,则直接是错的!
6、texta5读取的区域是【第1题】。可以根据屏幕的变化自己设定。texta5的作用涉及到C++的逻辑,下面会讲!
7、除了按钮以外坚决不用sleep!(sleep是最影响效率的!)

C++逻辑如下:【重点】
1、LUA是没有类似于continue这种函数(死循环中跳过本次循环),所以得自己实现continue。我这里用的方法是在死循环外面再套一个循环,即可实现:死循环中跳过本次循环!就是在while外面嵌套一个for循环。
2、由于效率的原因,如果用texta5的方法进行每次屏幕对比,效率可想而知。但是为了屏幕的变化,又必须保存(总不可能保存缓存吧!)在这里,我用了C++的逻辑,即中间变量(源码当中为qq)。qq为全局变量,当texta5读取到字符串过后,会将读取的字符串保存到qq上,当下次再循环的时候,如果qq等于texta5,则屏幕没有变化,否则,屏幕变化了!(原创吧属于,网络上的源码是读取屏幕色块,两种原理完全不同。

其他:
1、为什么要判断屏幕是否变化?
答:如果不判断的话无法保存按钮的正确率。自己拿源码测一遍就可以了哦~
2、不能用orc接口,本地判断永远效率大于网络,这里我用的是LUA自带的一种字库~

再次申明:本份源码稍微修改即可通杀所有判断类微信小程序,如判断加减、判断数字大小等~


大家最关心的问题,怎么使用lua脚本在手机运行?(教程来啦)
安卓手机需要root!用于调试
1、首先需要下载2个工具。下载地址:http://dev.xxzhushou.cn/userIndex.html  (网址就像微软的一个下载集合一样,不用上传百度云吧)
下载:叉叉集成开发环境   、 叉叉开发助手。
2、电脑、手机都安装过后,打开,将手机与电脑通过叉叉集成开发环境连接(同一个wifi下即可,具体可以看教程)
3、就和易语言、VS一样了,新建项目,在main里面复制我的代码,直接运行即可。(一般不用调试,用运行~)

免费评分

参与人数 11吾爱币 +17 热心值 +9 收起 理由
ZHOUSHUYUAN + 1 + 1 谢谢@Thanks!
梦入神机 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ithg + 1 谢谢@Thanks!
myqqq + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
禅鬼 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Ps出来的小赵 + 1 + 1 虽然看不懂…………
兔子我是胡萝卜 + 3 + 1 给dalao评分就对了!
wuyy + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
610100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mumu324 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 5 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
JackDx 发表于 2018-4-20 11:27
[11:27:05] 正在打包脚本,请稍候
[11:27:05] 开始运行脚本...
[11:27:05] 发送信息完毕...
[11:27:06] 运行已停止
错误信息: [string "main.lua"]:5: '=' expected near 'local'
报错~~~

stack traceback:
        [C]:-1: in function ''
        [C]:-1: in function 'require'
        [string "xxdebug.lua"]:2: in main chunk
        [C]:-1: in function 'require'
        [string "require('xxdebug')"]:1: in main chunk
推荐
查小布 发表于 2018-5-6 15:12
main.lua:45: attempt to perform arithmetic on local 'texta' (a string value)
stack traceback:
        main.lua:45: in main chunk
        local vars: ocr=msg='3.02.02',Mytext=<func>,qq=''
        [C]:-1: in function 'require'
        [string "require('main')"]:1: in main chunk
27关挂,试了10多次

点评

27关挂是因为你已经通关过一次了,第二次无论如何都过不了的...你没发现时间不到0.1秒就没了吗?  发表于 2018-5-14 15:31
3#
wushaominkk 发表于 2018-4-19 16:58
4#
zhk1985 发表于 2018-4-19 19:23
头脑王者可以用吗

点评

头脑王者应该用不了这个  详情 回复 发表于 2018-4-19 19:57
5#
苏紫方璇 发表于 2018-4-19 19:57
zhk1985 发表于 2018-4-19 19:23
头脑王者可以用吗

头脑王者应该用不了这个
6#
梦入神机 发表于 2018-4-20 08:32
不错,有时间看看
7#
 楼主| 狂暴补师亚丝娜 发表于 2018-4-20 16:10 |楼主
JackDx 发表于 2018-4-20 11:27
[11:27:05] 正在打包脚本,请稍候
[11:27:05] 开始运行脚本...
[11:27:05] 发送信息完毕...

原封不动复制进去不会报错啊,你看下是不是复制少了
8#
jjyywg 发表于 2018-4-27 09:24
不错,收藏一下。
9#
mr清扬 发表于 2018-4-27 17:07
本来我想写这个的...我是想通过在电脑上开模拟器,在电脑上运行微信小程序.然后通过截屏,然后用算法将图片进行分割,处理和识别,然后在电脑计算运行结果,再手动点击. . 这个加减那个数子,利用向量对比识别应该可以
10#
 楼主| 狂暴补师亚丝娜 发表于 2018-4-27 17:20 |楼主
mr清扬 发表于 2018-4-27 17:07
本来我想写这个的...我是想通过在电脑上开模拟器,在电脑上运行微信小程序.然后通过截屏,然后用算法将图片进 ...

这样太麻烦了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
610100 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 09:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表