杨辣子 发表于 2022-9-26 18:46

某小游戏从内存读取token,Python版

最近某款小游戏爆火,一时间大家都在熬夜点点点,看广告想办法通关。论坛中也涌现很多大佬开发小工具帮助大家通关过瘾,js,c#,python版本的都有。
偶然一次看到两篇有用易语言从内存获取Token的工具比较跟兴趣,于是自己开始从各个网站、论坛,搜集关于Python读取内存数据的文章。
最终经过不断的改进,测试,终于成功了,下面跟大家分享下成功的喜悦!
大部分代码都是从网上摘取的,由于阅读的文章实在太多了,记不清是哪篇文章,实在抱歉。
再此声明: 代码仅提供在论坛学习讨论用,如若他人用于非法、破坏、篡改行为,均与本人无关
如若违规,烦请管理员删帖,不要记大过,谢谢~

import ctypes
from ctypes import *
from ctypes.wintypes import *
import json
import psutil
import re
import sys
import win32api
from win32con import PROCESS_ALL_ACCESS

k32 = WinDLL('kernel32')
k32.OpenProcess.restype = HANDLE
k32.OpenProcess.argtypes = DWORD, BOOL, DWORD
k32.ReadProcessMemory.restype = BOOL
k32.ReadProcessMemory.argtypes = HANDLE, LPVOID, LPVOID, c_size_t, POINTER(c_size_t)

BUF_SIZE = 1024 * 500
prodess_name = '????.exe'
pattern = re.compile('(?<=("token":"))[.\\w]*?(?=(","))')

def get_proc_pid():
    for proc in psutil.process_iter():
      if proc.name() == prodess_name:
            p_proc = psutil.Process(proc.pid)
            return p_proc.parent().pid

def rpm(pid, address):
      process = k32.OpenProcess(PROCESS_ALL_ACCESS, False, pid)
      buf = create_string_buffer(BUF_SIZE)
      s = c_size_t()
      mem_data = k32.ReadProcessMemory(process, address, buf, BUF_SIZE, byref(s))
      return address + BUF_SIZE, str(buf.raw)

def get_app_token(pid):
    start_address = 0x05890000 # 0x00380000 0x05890000
    end_address = 0xFF9F0000
    data = rpm(pid, start_address)
    token = pattern.search(data)
    while not token and data < end_address:
      data = rpm(pid, data)
      token = pattern.search(data)
      if token:
            break
    token = token.group()
    print('当前Token:\n' + token + '\n')
    return token

if __name__ == '__main__':
    pid = get_proc_pid()
    if not pid:
      print('请确认游戏已打开')
      sys.exit()
    token = get_app_token(pid)


环境是
1. python39
2. win10
操作步骤
1. 保存代码
2. 替换prodess_name
3. 打开游戏
4. 执行脚本

杨辣子 发表于 2022-9-27 00:01

wyangdh 发表于 2022-9-26 19:55
谢谢楼主分享,已成功获取Token,但不知道有什么用

论坛很多工具都需要获取token才可以使用工具刷成绩,传统方式需要你每次去抓包获取。这个是通过读内存的方式获取的

杨辣子 发表于 2022-9-26 23:58

make5466 发表于 2022-9-26 19:38
替换prodess_name是替换成游戏id吗还是微信id

打开任务管理器后你会看到游戏运行的那个程序,如果不确定的话,就右键到在文件夹中打开,你就知道是哪个了

LONGVOICE 发表于 2022-9-26 19:22

看不懂,但是陌生人,我还是谢谢你{:1_893:}

make5466 发表于 2022-9-26 19:38

替换prodess_name是替换成游戏id吗还是微信id

wyangdh 发表于 2022-9-26 19:55

谢谢楼主分享,已成功获取Token,但不知道有什么用{:301_985:}

ciker_li 发表于 2022-9-26 21:11

然后呢,能改成绩吗

fantawa 发表于 2022-9-26 21:27

谢谢分享

lsy832 发表于 2022-9-26 23:10

是某羊中羊么

gaoxiaowangke 发表于 2022-9-26 23:28

杨辣子 发表于 2022-9-26 23:59

lsy832 发表于 2022-9-26 23:10
是某羊中羊么

就是那个消除小游戏{:1_926:}
页: [1] 2 3 4
查看完整版本: 某小游戏从内存读取token,Python版