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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
"""Fixed-image string inventory for original commodity tree definitions; offline only."""
import json,re,struct
from pathlib import Path
import pefile
p=Path('artifacts/ship-model-reference/client-copy/EliteDangerous64.exe')
raw=p.read_bytes();pe=pefile.PE(data=raw,fast_load=True)
out=Path('artifacts/galaxy-query-research/commodity-tree');out.mkdir(parents=True,exist_ok=True)
strings=[]
for m in re.finditer(rb'[A-Za-z_$][A-Za-z0-9_.$:/ -]{3,}',raw):
 s=m.group()
 if (b'commod' in s.lower() and (b'categor' in s.lower() or b'defin' in s.lower() or b'combo' in s.lower() or b'filter' in s.lower())) or s in (b'comboOptionsDatastoreContext',b'selectedCommodityUID',b'OnGMCommoditySelected'):
  try:rva=pe.get_rva_from_offset(m.start())
  except pefile.PEFormatError:continue
  strings.append(dict(rva=hex(rva),text=s.decode('ascii')))
(out/'strings.json').write_text(json.dumps(strings,indent=2),encoding='utf-8')
print(json.dumps(strings,indent=2))
rows=[]
for rva in range(0x52787a0,0x52788a0,8):
 value=struct.unpack('<Q',pe.get_data(rva,8))[0];target=value-pe.OPTIONAL_HEADER.ImageBase
 text=''
 if 0<=target<pe.OPTIONAL_HEADER.SizeOfImage:
  item=pe.get_data(target,100).split(b'\0',1)[0]
  if item and all(32<=b<127 for b in item):text=item.decode('ascii')
 rows.append(dict(rva=hex(rva),target=hex(target),text=text))
(out/'service-table.json').write_text(json.dumps(rows,indent=2),encoding='utf-8')
print(json.dumps(rows,indent=2))
for rva in (0x5533888,0x55f7db0):
 print(hex(rva),pe.get_data(rva,96).split(b'\0',1)[0].decode('ascii',errors='replace'))