Вопрос Не работает скрипт python после компиляции в exe

Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Всем прив. Не пойму почему в питоне запускаю и все нормально, а скомпилированный ехе с помощью pyinstaller при запуске не пашет. Подскажите, что не так делаю? Тут была такая тема , но ответа в ней не нашел.
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Скрипт то хоть покажи
import ctypes
import ctypes.wintypes
import psutil


def find_process_by_name(process_name):
for proc in psutil.process_iter(attrs=['pid', 'name']):
if proc.info['name'] == process_name:
return proc.info['pid']
return None


def write_memory(process_handle, address, value):

ctypes.windll.kernel32.WriteProcessMemory(
process_handle,
address,
ctypes.byref(ctypes.c_float(value)),
ctypes.sizeof(ctypes.c_float()),
None
)


process_name = "Game.exe"
pid = find_process_by_name(process_name)

if pid is None:
print(f"Process '{process_name}' not found!")
else:
print(f"Process '{process_name}' found with PID: {pid}")


process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # PROCESS_ALL_ACCESS = 0x1F0FFF
if not process_handle:
print("Failed to open the process.")
else:
try:

address1 = 0x047B0C98
address2 = 0x047B0C9C


write_memory(process_handle, address1, -2.690775871)
write_memory(process_handle, address2, -1.159874678)

print(f"Все гудд
{hex(address1)} and {hex(address2)}")
finally:

ctypes.windll.kernel32.CloseHandle(process_handle)
 
Начинающий
Статус
Оффлайн
Регистрация
16 Авг 2024
Сообщения
29
Реакции[?]
5
Поинты[?]
5K
Попробуй через autopytoexe. И покажи какие ты аргументы использовал для сборки в pyinstaller?
 
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2024
Сообщения
9
Реакции[?]
1
Поинты[?]
1K
Мб ты его не от имени Админа запускаешь и он ошибку записи в память выдаёт
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Мб ты его не от имени Админа запускаешь и он ошибку записи в память выдаёт
от админа запускал

тут видимо проблема в самом коде, я брал адреса без смещений (нуб я пока что поделать, учусь тока)
набросал такой вот код уже со смещениями, но он не пашет почему -то.( может кто подсказать в чем проблема? И как в питоне это правильно реализовать, точнее как адреса вписывать со смещениями.
вот сам адрес 1723794017791.png

import ctypes
import psutil

# Функция для записи значения типа float в память процесса
def write_float_value(process_handle, address, value):
# Преобразуем float в bytes
float_as_bytes = ctypes.c_float(value).value
ctypes.windll.kernel32.WriteProcessMemory(process_handle, address, ctypes.byref(ctypes.c_float(value)), ctypes.sizeof(ctypes.c_float), None)

# Функция для поиска процесса по имени
def find_process_by_name(process_name):
for proc in psutil.process_iter(attrs=['pid', 'name']):
if proc.info['name'] == process_name:
return proc.info['pid']
return None

# Основной код
process_name = "PNGame.exe"
pid = find_process_by_name(process_name)

if pid is None:
print(f"Process '{process_name}' not found!")
else:
print(f"Process '{process_name}' found with PID: {pid}")

# Получаем дескриптор процесса
process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # PROCESS_ALL_ACCESS = 0x1F0FFF
if not process_handle:
print("Failed to open the process.")
else:
try:
# Адреса в памяти
address1 = 0x386612C + 0x30
address2 = 0x386612C + 0x34

# Запись значений в память
write_float_value(process_handle, address1, 2.119969606)
write_float_value(process_handle, address2, -0.9655891657)

print(f"Successfully wrote values to memory addresses {hex(address1)} and {hex(address2)}")
finally:
# Закрываем дескриптор процесса
ctypes.windll.kernel32.CloseHandle(process_handle)
 
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,446
Реакции[?]
674
Поинты[?]
33K
может кто подсказать в чем проблема?
Мб дело в том что ты к адресу с шестнадцатеричным значением прибавляешь сдвиг (смещение) с десятеричным значением ?
Так как функция получения значения по типу адрес + сдвиг на первый взгляд правильная
 
Начинающий
Статус
Оффлайн
Регистрация
16 Авг 2024
Сообщения
29
Реакции[?]
5
Поинты[?]
5K
от админа запускал

тут видимо проблема в самом коде, я брал адреса без смещений (нуб я пока что поделать, учусь тока)
набросал такой вот код уже со смещениями, но он не пашет почему -то.( может кто подсказать в чем проблема? И как в питоне это правильно реализовать, точнее как адреса вписывать со смещениями.
вот сам адрес Посмотреть вложение 283444

import ctypes
import psutil

# Функция для записи значения типа float в память процесса
def write_float_value(process_handle, address, value):
# Преобразуем float в bytes
float_as_bytes = ctypes.c_float(value).value
ctypes.windll.kernel32.WriteProcessMemory(process_handle, address, ctypes.byref(ctypes.c_float(value)), ctypes.sizeof(ctypes.c_float), None)

# Функция для поиска процесса по имени
def find_process_by_name(process_name):
for proc in psutil.process_iter(attrs=['pid', 'name']):
if proc.info['name'] == process_name:
return proc.info['pid']
return None

# Основной код
process_name = "PNGame.exe"
pid = find_process_by_name(process_name)

if pid is None:
print(f"Process '{process_name}' not found!")
else:
print(f"Process '{process_name}' found with PID: {pid}")

# Получаем дескриптор процесса
process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # PROCESS_ALL_ACCESS = 0x1F0FFF
if not process_handle:
print("Failed to open the process.")
else:
try:
# Адреса в памяти
address1 = 0x386612C + 0x30
address2 = 0x386612C + 0x34

# Запись значений в память
write_float_value(process_handle, address1, 2.119969606)
write_float_value(process_handle, address2, -0.9655891657)

print(f"Successfully wrote values to memory addresses {hex(address1)} and {hex(address2)}")
finally:
# Закрываем дескриптор процесса
ctypes.windll.kernel32.CloseHandle(process_handle)

Я предположу, что тебе нужно записывать адреса так address1 = hex(0x386612C + 0x30) . Таким образом мы исключим прибавление значение в десятичном виде. А вообще мне кажется тебе нужно добавить readprocessmemory. Напишу псевдокод как это должно выглядеть address1 = readprocessmemory.float(0x386612C + 0x30) и тогда будет работать
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Я предположу, что тебе нужно записывать адреса так address1 = hex(0x386612C + 0x30) . Таким образом мы исключим прибавление значение в десятичном виде. А вообще мне кажется тебе нужно добавить readprocessmemory. Напишу псевдокод как это должно выглядеть address1 = readprocessmemory.float(0x386612C + 0x30) и тогда будет работать
мне сказали, что я прибавляю к базовому адресу 0x386612C смещение 30 , а это так не работает и нужно искать другой адрес, а какой "другой" я хз, но предположу, что это оффсет который нужно найти за счет базового адреса. А как это сделать я пока хз(с СЕ пока тож не особо дружу) . Голова уже кругом идет от такой кол инфы ((( пс единственное, что еще подсказали это вот такую функцию на с++ в котором я тоже не шарю

uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)ptr, &ptr, sizeof(ptr), 0);
ptr += offsets;
}
return ptr;
}
 
Начинающий
Статус
Оффлайн
Регистрация
16 Авг 2024
Сообщения
29
Реакции[?]
5
Поинты[?]
5K
мне сказали, что я прибавляю к базовому адресу 0x386612C смещение 30 , а это так не работает и нужно искать другой адрес, а какой "другой" я хз, но предположу, что это оффсет который нужно найти за счет базового адреса. А как это сделать я пока хз(с СЕ пока тож не особо дружу) . Голова уже кругом идет от такой кол инфы ((( пс единственное, что еще подсказали это вот такую функцию на с++ в котором я тоже не шарю

uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)ptr, &ptr, sizeof(ptr), 0);
ptr += offsets;
}
return ptr;
}
давай с тобой в дс свяжемся, мне интересно что у тебя там за пиздец. Я просто пока не увижу толком не пойму, что происходит у тебя
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Эксперт
Статус
Оффлайн
Регистрация
9 Апр 2020
Сообщения
1,446
Реакции[?]
674
Поинты[?]
33K
мне сказали, что я прибавляю к базовому адресу 0x386612C смещение 30 , а это так не работает и нужно искать другой адрес, а какой "другой" я хз, но предположу, что это оффсет который нужно найти за счет базового адреса. А как это сделать я пока хз(с СЕ пока тож не особо дружу) . Голова уже кругом идет от такой кол инфы ((( пс единственное, что еще подсказали это вот такую функцию на с++ в котором я тоже не шарю

uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (BYTE*)ptr, &ptr, sizeof(ptr), 0);
ptr += offsets;
}
return ptr;
}
Да блять тебе говорят что 30 это не hex значение 30 в значении hex это 1E, 0x1E

Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2024
Сообщения
9
Реакции[?]
1
Поинты[?]
1K
Да блять тебе говорят что 30 это не hex значение 30 в значении hex это 1E, 0x1E

Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
да братан, ты конечно крут, но хуйню несёшь, чит энджин по дефолту пишет в 16 сс.
Вот тебе пример: изображение_2024-08-17_152444533.png и вот код: изображение_2024-08-17_152521423.png

output:
BASE ADDRESS: 0x2970004b4e0
OFFSET1: 0x2988c833fc0
OFFSET2: 0x2988c834fe0
OFFSET3: 0x2988c835c80
VALUE: 3
 
Начинающий
Статус
Оффлайн
Регистрация
23 Июл 2023
Сообщения
24
Реакции[?]
0
Поинты[?]
0
Да блять тебе говорят что 30 это не hex значение 30 в значении hex это 1E, 0x1E

Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
попробовал и так нихера.
import ctypes
import ctypes.wintypes
import psutil

название процесса
process_name = "Game.exe"

# Получаем PID процесса
def get_process_pid(process_name):
for proc in psutil.process_iter(['name']):
if proc.info['name'] == process_name:
return proc.pid
return None

# Чтение и запись в память процесса
def read_process_memory(process_handle, address, size):
buffer = ctypes.create_string_buffer(size)
bytes_read = ctypes.c_size_t(0)
ctypes.windll.kernel32.ReadProcessMemory(process_handle, ctypes.c_void_p(address), buffer, size, ctypes.byref(bytes_read))
return buffer.raw

def write_process_memory(process_handle, address, value):
buffer = ctypes.c_double(value)
bytes_written = ctypes.c_size_t(0)
ctypes.windll.kernel32.WriteProcessMemory(process_handle, ctypes.c_void_p(address), buffer, ctypes.sizeof(buffer), ctypes.byref(bytes_written))

# Основная логика
def main():
pid = get_process_pid(process_name)
if pid is None:
print(f"Process '{process_name}' not found.")
return

# Открываем процесс с правами доступа
process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # PROCESS_ALL_ACCESS
if not process_handle:
print(f"Could not open process with PID {pid}.")
return

try:
base_address = 0x386612C
offset1 = 0x1E
offset2 = 0x22

address1 = base_address + offset1
address2 = base_address + offset2

# Записываем значения
value1 = 0.9733316302
value2 = -0.2513019443

write_process_memory(process_handle, address1, value1)
write_process_memory(process_handle, address2, value2)

print(f"Wrote values to addresses: {hex(address1)}, {hex(address2)}")
finally:
ctypes.windll.kernel32.CloseHandle(process_handle)

if name == "main":
main()
 
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2024
Сообщения
9
Реакции[?]
1
Поинты[?]
1K
попробовал и так нихера.
import ctypes
import ctypes.wintypes
import psutil

название процесса
process_name = "Game.exe"

# Получаем PID процесса
def get_process_pid(process_name):
for proc in psutil.process_iter(['name']):
if proc.info['name'] == process_name:
return proc.pid
return None

# Чтение и запись в память процесса
def read_process_memory(process_handle, address, size):
buffer = ctypes.create_string_buffer(size)
bytes_read = ctypes.c_size_t(0)
ctypes.windll.kernel32.ReadProcessMemory(process_handle, ctypes.c_void_p(address), buffer, size, ctypes.byref(bytes_read))
return buffer.raw

def write_process_memory(process_handle, address, value):
buffer = ctypes.c_double(value)
bytes_written = ctypes.c_size_t(0)
ctypes.windll.kernel32.WriteProcessMemory(process_handle, ctypes.c_void_p(address), buffer, ctypes.sizeof(buffer), ctypes.byref(bytes_written))

# Основная логика
def main():
pid = get_process_pid(process_name)
if pid is None:
print(f"Process '{process_name}' not found.")
return

# Открываем процесс с правами доступа
process_handle = ctypes.windll.kernel32.OpenProcess(0x1F0FFF, False, pid) # PROCESS_ALL_ACCESS
if not process_handle:
print(f"Could not open process with PID {pid}.")
return

try:
base_address = 0x386612C
offset1 = 0x1E
offset2 = 0x22

address1 = base_address + offset1
address2 = base_address + offset2

# Записываем значения
value1 = 0.9733316302
value2 = -0.2513019443

write_process_memory(process_handle, address1, value1)
write_process_memory(process_handle, address2, value2)

print(f"Wrote values to addresses: {hex(address1)}, {hex(address2)}")
finally:
ctypes.windll.kernel32.CloseHandle(process_handle)

if name == "main":
main()
тебе надо сначало читать 0x386612C потом уже к значению которое ты прочитал добавлять оффсет, я же кидал выше код рабочий только там игра другая
 
Сверху Снизу