• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[郭立员] [安卓按键]过游戏中的防挂机验证 [复制链接]

1#

很多游戏为了防止用户离线或者使用脚本挂机,会随机出现一些验证,比如这样的:




通过图片我们可以知道这个验证有两个区域:

区域一】:问题区,简单的加减法运算



区域二】:答案区,随机的排序的数字按键



对于两个区域,我们分开处理,先说第一个区域:

图片上的验证内容是24-8=

对于这部分内容我们需要分两步,

第一步识别图片文字;

第二步把识别的内容进行运算处理。

识别部分我测试了几个命令:

①本地光学识别:

  1. TracePrint Image.OcrText(199,400,276,421,0,0)
复制代码

识别结果并不准确:

  1. 当前脚本第1行:24_B
复制代码

②smartocr命令识别

  1. TracePrint smartocr(199,400,276,421)
复制代码

识别结果不能识别符号:

  1. 当前脚本第1行:248
复制代码

③百度云识别

  1. Import "shanhai.lua"
  2. Dim 路径="/sdcard/pictures/n.png"
  3. SnapShot(路径,199,400,276,421) //截图
  4. Dim arr=BaiDuOCR("你的api","你的Secret",路径,1)
  5. TracePrint "识别结果",arr


  6. Function BaiDuOCR(api, Secret, path, n)
  7. TracePrint "文字识别中,请耐心等待..."
  8. Dim ret_arr()
  9. Dim token=url.get("https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id="&api&"&client_secret="&secret)
  10. dim mytoken=Encode.JsonToTable(token)
  11. Dim base64=ShanHai.ReadFileBase(path)
  12. Dim 图片=shanhai.CharToUrl(base64)
  13. TracePrint 图片
  14. Dim post内容="access_token="&mytoken["access_token"]&"&Content-Type=application/x-www-form-urlencoded&image="&图片&"&detect_direction=true"
  15. Dim myjson=url.post("https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic",post内容)
  16. myjson = Encode.JsonToTable(myjson)
  17. For i = 0 To UBOUND(myjson["words_result"])
  18. ret_arr(i)=myjson["words_result"][i+1]["words"]
  19. Next
  20. If n = 0 Then
  21. BaiDuOCR = ret_arr
  22. ElseIf n = 1 Then
  23. BaiDuOCR=join(ret_arr,"")
  24. End If
  25. End Function
复制代码

识别结果还比较准确:

  1. 当前脚本第5行:识别结果 24-8
复制代码

3种方法对比来说,百度云识别更准确一些,但是能不能做到百分之百的准确,还需要大量测试。

如果出现少量的识别不准确,可以做微调。

假设把减号识别成下划线,用替换命令,把“_”替换成“-”,同理其他字符或者数字也可以用这种方法。

识别这部分这样,然后是运算,直接用山海插件的eval命令

  1. Import "shanhai.lua"
  2. traceprint shanhai.eval("24-8")
复制代码

结果:

  1. 当前脚本第2行:16
复制代码

这个简单的数学运算没啥好说的,问题区域这些~

第二个区域:答案区



第一眼看上去,好像和我上一篇文章中的数字键盘有些相像~



但是不同之处是键盘上的数字是随机排序的,那么就不能用固定坐标了。

解决这个问题的思路是怎么把数字和图片联系起来,比方说是数字1时点击图片1,当你思考到这一步的时候是不是发现数字可以做图片名称的一部分呢。

  1. Dim 数字=1
  2. Dim intx,inty
  3. FindPic 0, 0, 0, 0, "Attachment:"&数字&".png","000000", 0, 0.9, intX, intY
  4. If intX > -1 And intY > -1 Then
  5. Tap intx,inty
  6. End If
复制代码

当每个找图用的截图都以数字命名,通过这个代码就可以把数字和找图点击连接在一起,那问题来了,如果数字是两位数或者多位数呢?

那么需要先对数字进行逐位提取,在循环点击。

  1. Dim 数字=16
  2. Dim intx,inty,单位数


  3. For i = 1 To Len(cstr(数字))
  4. 单位数 = UTF8.mid(cstr(数字),i,1)
  5. FindPic 0, 0, 0, 0, "Attachment:"&单位数&".png","000000", 0, 0.9, intX, intY
  6. If intX > -1 And intY > -1 Then
  7. Tap intx,inty
  8. End If
  9. Next
复制代码

这里稍微说一个容易错误的点,len命令和mid命令都是对字符串处理,的如果是数值类型,需要先用cstr命令把数值转成字符串类型。

关于答案区这部分内容,需要注意的点是找图是否准确,如果在数字更换位置以后,找不到图了,可以适当降低找图的相似度,如果还不行,就每个数字在不同位置时多截图几次,然后找多图。

命名使用 数字_1,数字_2这种方式,这样写同样可以使用上面的代码,把数字和找图联系起来。

总的来说,这期是关于准确识别的,无论是百度云识别还是找图,对于识别我们尽可能做到准确,即便不准确时也要想办法排查错误识别。

好了,本期内容就这些~


最后编辑郭立员 最后编辑于 2022-03-05 08:55:32
扫码免费获取我的基础教程【视频教程】
扫码下方二维码关注我的公众号:3分钟学堂

QQ交流群:936858410
发新话题 回复该主题