XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
"""Locate original route settings registrations without accessing a game process."""
import importlib.util,json,re,struct
from pathlib import Path
spec=importlib.util.spec_from_file_location('audit',Path(__file__).with_name('Audit-GalaxyClientCompatibility.py'))
audit=importlib.util.module_from_spec(spec);spec.loader.exec_module(audit)
image=audit.Image(Path('artifacts/ship-model-reference/client-copy/EliteDangerous64.exe'))
names=['OnGMRouteSettingsOptionChanged','OnGMRouteSettingsUseJetConeChanged','OnGMRouteSettingsFsdBoostSliderChanged','OnGMRouteSettingsCargoMassSliderChanged','selectedJumpRouteMode','maxFSDBoostLvl','currFSDBoostLvl','maxCargoMass','currCargoMass','useJetConeBoost','affectsRoutePlotting','routePlottingMode','routePlottingVirtualCargoMass','routePlottingRealCargoMass','NavJetConeBoost']
addresses={}
for name in names:
    start=0;needle=name.encode()+b'\0'
    while (start:=image.raw.find(needle,start))>=0:
        rva=image.pe.get_rva_from_offset(start);addresses[rva]=name;start+=len(needle)
rows=[];text=image.text_bytes;base=image.text.VirtualAddress
for match in re.finditer(rb'[\x48\x4c]\x8d[\x05\x0d\x15\x1d\x25\x2d\x35\x3d]....',text,re.S):
    at=base+match.start();target=at+7+struct.unpack('<i',match[0][3:])[0]
    if target not in addresses:continue
    fn=image.function(at)
    rows.append(dict(name=addresses[target],stringRva=hex(target),referenceRva=hex(at),functionRva=hex(fn[0]) if fn else None,
        assembly=[dict(rva=hex(i.address-image.base),instruction=i.mnemonic+' '+i.op_str) for i in image.instructions(max(at-32,base),128)]))
output=Path('artifacts/galaxy-query-research/route-settings');output.mkdir(parents=True,exist_ok=True)
(output/'registrations.json').write_text(json.dumps(dict(gameAccess=False,strings={hex(a):n for a,n in addresses.items()},references=rows),indent=2),encoding='utf-8')
print(json.dumps([{k:v for k,v in r.items() if k!='assembly'} for r in rows],indent=2))