0
点赞
收藏
分享

微信扫一扫

【理解机器学习算法】之Clustering算法(K-Means)

大漠雪关山月 03-24 22:30 阅读 1
python

仅供学习交流

讲内存修改脚本之前扩展一个rar密码遍历脚本

"""
项目名称:遍历破解rar压缩文件密码
项目描述:通过密码文件提供的密码,循环遍历输入密码,达到破解的目的
项目环境:pycharm & rarfile
作者所属:蓝花楹下
日期:2024/3/22
版本:v1.0
"""
import os
import rarfile


def rar_attack(rar_file_path, pwd_file_path):
    """
    通过循环遍历密码文件密码,破解rar压缩文件密码,并解压
    :param rar_file_path: rar压缩文件地址
    :param pwd_file_path: 密码字典文件地址
    :return: None
    """
    file_handle = rarfile.RarFile(rar_file_path)  # 使用rarfile 模块里的Rarfile方法实例化一个文件句柄,也可以理解成把文件赋值给一个变量
    with open(pwd_file_path, "r", encoding="latin-1") as f:  # 打开密码文件并命名为f
        for i in f.readlines():  # 循环把每行密码赋值给i并循环里面的代码
            pwd = i.strip()  # 去除i两边的空格
            try:  # 这是个异常捕捉结构,就是去执行try里面的代码,如果不报错就执行完,如果报错就执行except里面的代码块
                file_handle.extractall(pwd=pwd)  # 输入密码尝试解压
                print('Password found:', pwd)
                break  # 如果不报错结束循环
            except:
                pass
        else:
            print('Password not found')  # 输入整个字典密码依然没有破解
    file_handle.close()


if __name__ == '__main__':
    rar_file_path = r"C:\baidunetdiskdownload\tm2\tm2\tmqy2.part1.rar"
    password_file_path = r"C:\Users\dusk\Desktop\tools\rockyou.txt"
    if os.path.exists(password_file_path) and os.path.exists(rar_file_path):  # 如果两个路径都存在
        rar_attack(rar_file_path, password_file_path)
    else:
        print('RAR file or password file not found')  # 两个文件有一个不存在

正题:内存数据修改

下载一个单机游戏(少部分网游也可以)

我下载的游戏是天命奇御(一款武侠游戏)

这时可以看到我们的金钱是110

游戏下载好后,还要借助一个工具叫做cheat engine 利用这个工具来找到数据的内存地址

第一步启动游戏

第二步打开查看数据内存地址工具

 第三步:

查看我们需要修改的数据的值,假如是160

然后输入160并查找

此时左边会有很多160的数据

我们需要在游戏中改变这个数据,比如买一把武器,然后看这个数据最新的值,比如我买了一个药品,还剩110,那么我在搜110,点击右边按钮搜索

此时就得到了这个数据的内存地址

接下来就可以使用python脚本进行外挂的编写了

import ctypes

import win32api
import win32con # 跟控制权限有关的模块
# 这个模块里面有很多api函数
import win32gui  # 操作窗口的一个模块
import win32process  # 操作windows进程的一个模块
def modify_memory(handle_name, memory_path, num):
    """
    修改游戏的内存数据
    :return: None
    """
    handle = win32gui.FindWindow(0, handle_name)  # 把这个游戏窗口赋值给handle
    pid = win32process.GetWindowThreadProcessId(handle)  # 通过这个操作进程的方法,传入窗口找到这个窗口所属的程序 pid 就是程序的编号
    pid = pid[1]  # pid有两个pid 第二个才是程序实际的pid
    process_handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, False, pid) #打开程序(设置权限为全部打开,不影响其他数据,对象是pid)
    k32 = ctypes.windll.LoadLibrary(r"C:\Windows\System32\kernel32.dll") # 通过c语言打开一个动态库kernel32.dll 并赋值给k32 这个动态库是修改内存数据的
    k32.WriteProcessMemory(int(process_handle), memory_path, ctypes.byref(ctypes.c_long(num)), 4) # 给当前程序写入数据(1,操作对象, 地址,数据,数据类型)

if __name__ == '__main__':
    modify_memory("FateSeeker", 0x2D2656D8, 10000)

结果如下

 成功修改金额

举报

相关推荐

0 条评论