Tôi đang cố gắng viết một tập lệnh Python đọc một loạt các vị trí bộ nhớ của một quy trình cụ thể.
Làm thế nào tôi có thể làm điều này trong Python?
Tôi sẽ sử dụng Windows nếu nó quan trọng. Tôi có các quy trình mà tôi đang cố gắng đọc/chỉnh sửa.
Tôi sẽ phải hoàn nguyên để gọi readProcessMemory [] và sử dụng ctypes?
Đã hỏi ngày 25 tháng 11 năm 2009 lúc 4:15Nov 25, 2009 at 4:15
Filet-O-FishFilet-O-FishFilet-O-Fish
Huy hiệu vàng 1711 Huy hiệu bạc4 Huy hiệu đồng1 gold badge1 silver badge4 bronze badges
Tôi đã không thấy bất cứ điều gì trong các thư viện Python tiêu chuẩn nhưng tôi đã tìm thấy một ví dụ sử dụng CTYPE như bạn đã đề xuất trên một trang web khác:
from ctypes import *
from ctypes.wintypes import *
OpenProcess = windll.kernel32.OpenProcess
ReadProcessMemory = windll.kernel32.ReadProcessMemory
CloseHandle = windll.kernel32.CloseHandle
PROCESS_ALL_ACCESS = 0x1F0FFF
pid = 4044 # I assume you have this from somewhere.
address = 0x1000000 # Likewise; for illustration I'll get the .exe header.
buffer = c_char_p["The data goes here"]
bufferSize = len[buffer.value]
bytesRead = c_ulong[0]
processHandle = OpenProcess[PROCESS_ALL_ACCESS, False, pid]
if ReadProcessMemory[processHandle, address, buffer, bufferSize, byref[bytesRead]]:
print "Success:", buffer
else:
print "Failed."
CloseHandle[processHandle]
Đã trả lời ngày 25 tháng 11 năm 2009 lúc 4:44Nov 25, 2009 at 4:44
KINGNESTORKINGNESTORKingNestor
64K51 Huy hiệu vàng119 Huy hiệu bạc151 Huy hiệu Đồng51 gold badges119 silver badges151 bronze badges
1
Có,
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]5 [hoặc
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]6] và
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]7 chính xác là con đường để đi. Bạn đang tìm kiếm một cái gì đó thêm/khác nhau? Những gì, đặc biệt là?
Đã trả lời ngày 25 tháng 11 năm 2009 lúc 4:45Nov 25, 2009 at 4:45
Alex Martellialex MartelliAlex Martelli
830K164 Huy hiệu vàng1205 Huy hiệu bạc1385 Huy hiệu Đồng164 gold badges1205 silver badges1385 bronze badges
2
ReadWriteMemory
Sự mô tả
Lớp ReadWriteMemory được thực hiện trên Python để đọc và viết vào bộ nhớ của bất kỳ quá trình nào. Lớp này không phụ thuộc vào bất kỳ mô -đun bổ sung nào và chỉ sử dụng các thư viện Python tiêu chuẩn như CTYPES.
ReadWriteMemory
Sự mô tả
Tài liệu
OS: Windows 7, 8 and 10
Yêu cầu
Python 3.4+ HĐH: Windows 7, 8 và 10
GetProcessImageFileName
OpenProcess
Process Security and Access Rights
CloseHandle
GetLastError
ReadProcessMemory
WriteProcessMemory
API Windows trong mô -đun này:
EnumProcesses getProcessImageFileName Quy trình mở Bảo mật và quyền truy cập Quyền gần gũi GetLasterror ReadProcessMemory WriteProcessMemory
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]
Cách sử dụng
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_name['ac_client.exe']
Nhập và khởi tạo lớp
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_id[1337]
Nhận một quy trình theo tên
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] processes_ids = rwm.enumerate_processes[]
Nhận một quy trình theo ID
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_name['ac_client.exe'] print[process.__dict__]
Nhận danh sách các quy trình đang chạy ID của hệ thống hiện tại
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_name['ac_client.exe'] help[process]
In thông tin quy trình
from ReadWriteMemory import ReadWriteMemory from ReadWriteMemory import ReadWriteMemoryError rwm = ReadWriteMemory[] try: process = rwm.get_process_by_name['ac_client.exe'] except ReadWriteMemoryError as error: print[error]
Mở quy trình
Để có thể đọc hoặc ghi vào bộ nhớ của quy trình trước tiên, bạn cần gọi phương thức Open [].
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_name['ac_client.exe'] process.open[]
Ví dụ, đặt con trỏ: để có được sức khỏe, đạn và lựu đạn
Các độ lệch phải là một danh sách theo đúng thứ tự, nếu địa chỉ không có bất kỳ độ lệch nào thì chỉ cần chuyển địa chỉ. Bạn cần phải vượt qua hai đối số, đầu tiên là địa chỉ quy trình là hex và một danh sách các lần bù là hex.
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[] process = rwm.get_process_by_name['ac_client.exe'] process.open[] health_pointer = process.get_pointer[0x004e4dbc, offsets=[0xf4]] ammo_pointer = process.get_pointer[0x004df73c, offsets=[0x378, 0x14, 0x0]] grenade_pointer = process.get_pointer[0x004df73c, offsets=[0x35c, 0x14, 0x0]]
Đọc các giá trị cho sức khỏe, đạn và lựu đạn từ bộ nhớ của quy trình
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]0
In các giá trị sức khỏe, đạn và lựu đạn
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]1
Viết một số giá trị ngẫu nhiên cho sức khỏe, đạn và lựu đạn vào bộ nhớ của quy trình
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]2
Đóng xử lý quy trình khi bạn hoàn thành bằng cách sử dụng nó.
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]3
Ví dụ
Kiểm tra mã bên trong thư mục thử nghiệm trên tệp Python có tên Test_script.py. Trò chơi AssaultCube được sử dụng cho thử nghiệm này là phiên bản v1.1.0.4 Nếu bạn sử dụng phiên bản khác thì bạn sẽ phải sử dụng CheatEngine để tìm địa chỉ bộ nhớ. //github.com/AssaultCube/ac/releases/tag/v1.1.0.4 Để biết thêm ví dụ, hãy xem Trò chơi trò chơi AssaultCube: //github.com/vsantiago113/actrainer
For more examples check out the AssaultCube game trainer: //github.com/vsantiago113/ACTrainer
from ReadWriteMemory import ReadWriteMemory rwm = ReadWriteMemory[]4