build: versionCode 7→8 + Release #8 + APK 3.5MB
This commit is contained in:
82
debug_png.py
Normal file
82
debug_png.py
Normal file
@@ -0,0 +1,82 @@
|
||||
"""
|
||||
Debug: compare raw bytes and re-encoded bytes.
|
||||
Also try to interpret the file as a regular PNG by skipping the BOM.
|
||||
"""
|
||||
import sys
|
||||
|
||||
path = r"D:\Yuzu-GCA\screen.png"
|
||||
|
||||
with open(path, 'rb') as f:
|
||||
raw = f.read()
|
||||
|
||||
print(f"Total size: {len(raw)} bytes")
|
||||
|
||||
# Decode as UTF-16 LE
|
||||
text = raw.decode('utf-16-le')
|
||||
print(f"Decoded text length: {len(text)} chars")
|
||||
|
||||
# Re-encode
|
||||
reencoded = text.encode('utf-16-le')
|
||||
print(f"Re-encoded size: {len(reencoded)} bytes")
|
||||
|
||||
# Compare
|
||||
if raw == reencoded:
|
||||
print("raw == reencoded: EXACT MATCH")
|
||||
else:
|
||||
print(f"raw == reencoded: DIFFER")
|
||||
# Find first difference
|
||||
for i in range(min(len(raw), len(reencoded))):
|
||||
if raw[i] != reencoded[i]:
|
||||
print(f"First diff at byte {i}: raw={raw[i]:02x}, reencoded={reencoded[i]:02x}")
|
||||
print(f" Context raw: {raw[max(0,i-5):i+10].hex(' ')}")
|
||||
print(f" Context re: {reencoded[max(0,i-5):i+10].hex(' ')}")
|
||||
break
|
||||
|
||||
# Check if raw starts with BOM
|
||||
if raw[:2] == b'\xff\xfe':
|
||||
print("\nFile starts with UTF-16 LE BOM")
|
||||
elif raw[:2] == b'\xfe\xff':
|
||||
print("\nFile starts with UTF-16 BE BOM")
|
||||
|
||||
# Check reencoded start
|
||||
if reencoded[:2] == b'\xff\xfe':
|
||||
print("Re-encoded starts with UTF-16 LE BOM")
|
||||
elif reencoded[:2] == b'\xfe\xff':
|
||||
print("Re-encoded starts with UTF-16 BE BOM")
|
||||
|
||||
# Try: what if we treat raw[2:] as the UTF-16 LE data (without the BOM)?
|
||||
# This would be the case if the file had BOM added later
|
||||
print(f"\nraw[2:4] = {raw[2:4].hex(' ')}")
|
||||
text2 = raw[2:].decode('utf-16-le')
|
||||
print(f"Decoded text2 (skipping BOM) length: {len(text2)} chars")
|
||||
print(f"text2 first 50 chars: {text2[:50]}")
|
||||
|
||||
# Try: what if the entire file is just raw PNG with a bogus BOM?
|
||||
# PNG magic: 89 50 4E 47 0D 0A 1A 0A
|
||||
# Our file: ff fe 52 58 4e 00 47 00 0d 00 0a 00 ...
|
||||
# Maybe each byte X became X*256 + something?
|
||||
# Or maybe the file is a hex dump?
|
||||
print("\n=== Trying hex dump interpretation ===")
|
||||
# Check if the text looks like a hex dump (pairs of hex digits)
|
||||
hex_pattern = all(c in '0123456789abcdefABCDEF \n\r\t' for c in text[:1000])
|
||||
print(f"First 1000 chars look like hex dump: {hex_pattern}")
|
||||
|
||||
# Final: Is there any actual readable content?
|
||||
# Let's look for sequences of Latin chars that might form words
|
||||
import re
|
||||
# Words with 5+ letters
|
||||
real_words = re.findall(r'[A-Za-z]{5,}', text)
|
||||
# Filter out those that look like random binary
|
||||
likely_real = [w for w in real_words if w.lower() in [
|
||||
'update', 'download', 'install', 'error', 'success', 'failed',
|
||||
'system', 'android', 'version', 'checking', 'package', 'verify'
|
||||
] or w in ['IHDR', 'IDAT', 'IEND', 'sRGB', 'sBIT', 'pHYs', 'iTXt', 'tEXt', 'zTXt']]
|
||||
print(f"\nKnown words found: {likely_real}")
|
||||
|
||||
# Check for PNG chunk names
|
||||
png_chunks = ['IHDR', 'PLTE', 'IDAT', 'IEND', 'cHRM', 'gAMA', 'iCCP', 'sBIT', 'sRGB',
|
||||
'bKGD', 'hIST', 'tRNS', 'pHYs', 'sPLT', 'tIME', 'iTXt', 'tEXt', 'zTXt']
|
||||
for chunk in png_chunks:
|
||||
cnt = text.count(chunk)
|
||||
if cnt > 0:
|
||||
print(f" PNG chunk '{chunk}': {cnt} times")
|
||||
Reference in New Issue
Block a user