类似“超强智商”之类的答题游戏作弊思路

类似“超强智商”之类的答题游戏作弊思路

  今年年初时答题游戏比较火,对于一些比较热门的游戏,已经有不少成熟的辅助程序了。然而这个实验室同学转给我的这个小程序,似乎热度还达不到做辅助的标准,而题目又比较恶心,自己答起来比较费劲,所以在这里探讨一下作弊的思路。

利用图像识别的思路

  很容易想到的一个思路就是把手机屏幕投射到屏幕,这里可以用模拟器/ADB/TeamViewer等方案,然后截图,利用tesseract-ocr将图片识别成文字,最后调用百度搜题。

  安装必要库就不赘叙了,有需要日后再补。我是采用了模拟器的方案,简单写出代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import win32gui, win32ui, win32con, win32api
from PIL import Image
import pytesseract
import webbrowser

def window_capture(filename):
hwnd = 0
hwndDC = win32gui.GetWindowDC(hwnd)
mfcDC = win32ui.CreateDCFromHandle(hwndDC)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
w = 480
h = 120
saveBitMap.CreateCompatibleBitmap(mfcDC,w,h)
saveDC.SelectObject(saveBitMap)
saveDC.BitBlt((0,0),(w,h),mfcDC,(50,320),win32con.SRCCOPY)
saveBitMap.SaveBitmapFile(saveDC,filename)
window_capture('cqzs.jpg')
text=pytesseract.image_to_string(Image.open('cqzs.jpg'),lang='chi_sim')
new_text =''.join(text.split())
url = 'http://www.baidu.com/s?wd=%s' % new_text
webbrowser.open(url)

  其中w,h为截图框大小参数,还需要根据实际情况调整定位,以便完整截图。

  实际使用情况图片识别大致能让人满意,然而效率上有点低,整个过程大概要3-5秒,只剩一半左右的时间答题,所以希望有更好的方案。

利用抓包的思路

  通过Fiddler抓包发现,每次12道题以json的形式一次性直接传递过来,因此可以在答题倒计时时就直接把12道题一块搜,这样每道题基本上有10秒时间作答,比上面的方案充裕了不少。

  安装的过程略,需要修改FiddlerScript使其输出题目。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import json
import webbrowser

stat = True
while stat == True:
try:
file = open("d:\\python\\temp\\cqzs.txt","r",encoding="utf-8")
j = json.loads(file.read())
if 'game' in j['data']:
question_list = j['data']['game']['question_list']
for q in question_list:
title = q['title']
url = 'http://www.baidu.com/s?wd=%s' % title
webbrowser.open(url)
stat = False
file.close()
except:
pass

进一步改进方案

  这样只是把每道题用百度搜了一下,还需要人工判断,可以考虑用通过词频比对选择答案,或者多平台搜索集合之类的方案。以后有机会再补。

结局

  奖品虽然最低只需要通关5次,但是不包邮,强烈怀疑奖品价值够不上邮费。想免邮费最低需要通关25次,考虑到麻烦程度,溜了溜了~

评论