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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
"""Bounded pinned-image bindings for the original commodity balance provider."""
import hashlib,json,struct
from pathlib import Path
import pefile
from capstone import Cs,CS_ARCH_X86,CS_MODE_64

image=Path('artifacts/ship-model-reference/client-copy/EliteDangerous64.exe')
raw=image.read_bytes();expected='6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93'
if hashlib.sha256(raw).hexdigest()!=expected:raise ValueError('Expected pinned source image')
pe=pefile.PE(data=raw,fast_load=True);base=pe.OPTIONAL_HEADER.ImageBase
dis=Cs(CS_ARCH_X86,CS_MODE_64)
tables={hex(start):[dict(slot=hex(i),target=hex(struct.unpack('<Q',pe.get_data(start+i,8))[0]-base)) for i in range(0,size,8)] for start,size in [(0x52417C0,0x158),(0x5241918,0x130),(0x5241FB0,0x140),(0x52420F0,0x88)]}
leaves={}
for start,size in [(0x0BF140,0x40),(0x1E11190,0x20),(0x1E2A720,0x70),(0x1E117E0,0xC0),(0x1DA7760,0x20),(0xEBDF50,0x20),(0x1E11100,0x30),(0x1DF3590,0x50),
                   (0x1E102E0,0x70),(0x1E1D710,0x70)]:
    leaves[hex(start)]=[f'{i.address:x}: {i.mnemonic} {i.op_str}' for i in dis.disasm(pe.get_data(start,size),start)]
scope={};exec(Path('research/Extract-OriginalGalaxyAppearance.py').read_text().split('tables={}')[0],scope)
fields={hex(field):scope['floats']((286,6144+field),1)[0] for field in range(0x1C0,0x1DC,4)}
constants={hex(rva):struct.unpack('<f',pe.get_data(rva,4))[0] for rva in (0x4DE28B8,0x4DE165C,0x4E299A4)}
json_keys={hex(rva):pe.get_data(rva,128).split(b'\0',1)[0].decode('ascii') for rva in
           (0x5241AA8,0x511BB1C,0x5242210,0x511B028,0x524221C,0x5242228,0x5242240,0x519F990,0x5193840,
            0x5242250,0x5242260,0x5242268,0x5242278,0x5242288,0x52422A8,0x52422B8,0x52422C8,0x51F37E0)}
output=dict(imageSha256=expected,tables=tables,leaves=leaves,commodityConfiguration=fields,classifierConstants=constants,originalQuoteJsonKeys=json_keys,
    priceChoices=[dict(uid=uid,labelKey=pe.get_data(rva,128).split(b'\0',1)[0].decode('ascii')) for uid,rva in ((0,0x5523748),(1,0x5523788),(2,0x55237C8))])
path=Path('artifacts/galaxy-query-research/commodity-tree/balance-provider-evidence.json')
path.write_text(json.dumps(output,indent=2),encoding='utf-8');print(json.dumps(output,indent=2))