TG游戏自动化的一种思路

随着NotCoin带来的财富效应,Ton生态上一大坨的项目如雨后春笋般冒了出来——签到类、筋膜枪点击类的游戏更是让人玩的要吐。

对于撸毛党而言,初期的手机群控或模拟器+自动点击的方式在账号较少的情况下可以应付一阵,但最终纯后台、自动化才是王道。

核心原理很简单,不管什么类型的游戏,最终一定会发送网络请求到服务端进行交互,那么关键问题只有2个: 如何解决用户认证相关问题。 如何对游戏数据逆向解密后模拟。

由于各个游戏项目加密方式各不相同(目前TG上的游戏大多数都还相对简单,并没有特别复杂的混淆一类的),本文主要说说如何利用TG的MTProto去解决用户认证问题。

首先登录https://my.telegram.org/,然后点击API development tools填写相关信息后记住app_id和api_hash并且保存好,千万不要泄露!(拿到这个就可以操纵TG账号近乎所有的功能了)

然后用到pyrogram这个库:

pip3 install -U pyrogram

执行下面的代码:

from pyrogram import Client

api_id = 上面的app_id
api_hash = 上面的app_hash

# one随便改,但后续使用要保持一致
app = Client("one", api_id=api_id, api_hash=api_hash)

app.run()

运行后再程序,根据提示输入验证码进行登录:

Enter phone number: 电话号
Is "xxxx" correct? (y/n): y
Enter phone code: xxxx
Logged in successfully

成功登录后同级目录会生成一个名为one.session的二进制文件,保存好这个文件后面使用。

这里就以前一阵登录就送积分的Dogs为例,他们最新出了个每日签到任务,通过抓包可知,这个项目目前主要有join、tasks、frens、leaderboard、rewards这几个接口,而和用户信息相关的则主要是向这个join接口发送了一个POST请求进行认证,那么POST的数据是怎么来的呢?

这里不纠结TG是怎么对用户进行加密校验的,我们直接使用框架提供的RequestWebView来模拟:

from pyrogram import Client
from pyrogram.raw.functions.messages import RequestWebView
from urllib.parse import unquote
import requests

# 注意这里同目录下要有上面生成的one.session文件
app = Client("one") 

async def main():
    async with app:
        peer = await app.resolve_peer('dogshouse_bot')
        req = RequestWebView(
            peer=peer,
            bot=peer,
            platform='android', 
            from_bot_menu=False,
            url='https://onetime.dog/'
        )
        auth = await app.invoke(req)
        # 这里提取用户相关认证信息
        data = unquote(string=unquote(string=auth.url.split(
            'tgWebAppData=')[1].split('&tgWebAppVersion')[0]))

        resp = requests.post("https://api.onetime.dog/join",
                             data=data)
        print(resp.json())
        
app.run(main())

具体每个参数的含义这里就不赘述了,可以去看官方文档。resolve_peer函数的参数就是对应机器人的username,点开机器人信息就可以看到。

这里只是关于用户登录认证的核心部分,至于针对不同项目后续如何完成任务、以及程序如何工程化的部分,就留给大家自由发挥了。

另外如果有想玩下面几个项目的,可以用我的邀请码,90%的任务已经可以自动化操作了:

wechat