Начинающий
- Статус
- Оффлайн
- Регистрация
- 2 Ноя 2024
- Сообщения
- 222
- Реакции
- 25
незнаю как его написал, но решил подумать чзх ".data:0000000001FB4ED8 dq offset aBoxMaxs ; "box_maxs"" в ида, и меня осенило, и я написал этот дампер, он дампит 3500~ оффсетов (Если не считать дубликатов, а так будет находить 5200~), и пишет их точное имя и фиелд.
Код:
import pymem, pymem.process, struct
def main():
pm = pymem.Pymem("cs2.exe")
client = pymem.process.module_from_name(pm.process_handle, "client.dll").lpBaseOfDll
size = pymem.process.module_from_name(pm.process_handle, "client.dll").SizeOfImage
offsets = {}
current = client + 0x1F90000
end = client + 0x21F0000
while current < end:
try:
name_ptr = struct.unpack('<Q', pm.read_bytes(current, 8))[0]
if not (client < name_ptr < client + size):
current += 0x10
continue
name = pm.read_string(name_ptr, 128).split('\x00')[0]
if not name.startswith('m_'):
current += 0x10
continue
for delta in range(0x8, 0x30, 2):
offset_val = struct.unpack('<I', pm.read_bytes(current + delta, 4))[0]
if 0 < offset_val < 0x5000:
offsets[name] = offset_val
break
except:
pass
current += 0x10
with open("cs2_offsets.hpp", "w") as f:
f.write("#pragma once\n\n")
f.write("#include <cstddef>\n")
f.write("#include <cstdint>\n\n")
f.write("#define field static constexpr std::ptrdiff_t\n\n")
f.write("namespace dumper_cloppkiller {\n")
for name, value in sorted(offsets.items()):
f.write(f" field {name} = 0x{value:X};\n")
f.write("}\n")
print(f"[+] Found {len(offsets)} offsets")
if __name__ == "__main__":
main()