Files
notiMessage/reverse/scripts/_scan_calling_code_deep.py
mars 609635aba1 chore: 备份 TNG 注册/captcha 逆向与 MariBank SG bypass 进展
TngRootBypassHook 增强 captcha 诊断、TigerTally/JNIC 分层与 HWUI 策略;新增逆向脚本、Frida 工具与 UI dump;同步 MariBank SG hook 与 tng_exit_guard 更新。
2026-08-03 15:23:02 +08:00

69 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
"""Deeper scan: UserSearchCallingCodeActivity methods / Compose / launch."""
import re
import zipfile
APK = r"C:\Users\Administrator\Desktop\notiMessage\reverse\dumps\tng_base_scan.apk"
def strings_near(data, needle, radius=200, limit=15):
out = []
start = 0
while len(out) < limit:
idx = data.find(needle, start)
if idx < 0:
break
s = max(0, idx - radius)
e = min(len(data), idx + len(needle) + radius)
chunk = re.sub(rb"[^\x20-\x7e]+", b".", data[s:e])
out.append(chunk.decode("ascii", "ignore"))
start = idx + 1
return out
def main():
z = zipfile.ZipFile(APK)
# Collect interesting strings from classes that have CallingCode
keys = [
b"CallingListScreen",
b"setContent",
b"ComposeView",
b"AbstractComposeView",
b"ComponentActivity",
b"getCallingCodeList",
b"CountryListRepository",
b"startActivity",
b"UserSearchCallingCodeActivity",
b"ll_country",
b"hardwareAccelerated",
b"RecyclerView",
b"LazyColumn",
b"androidx/compose",
]
for dex in sorted(n for n in z.namelist() if n.endswith(".dex")):
data = z.read(dex)
if b"UserSearchCallingCodeActivity" not in data and b"CallingListScreen" not in data and b"ll_country" not in data:
continue
print("\n========", dex, "========")
for k in keys:
if k in data:
print("HAS", k.decode())
if b"CallingListScreen" in data:
print("--- CallingListScreen ctx ---")
for c in strings_near(data, b"CallingListScreen", 120, 6):
print(" ", c[:240])
if b"ll_country" in data:
print("--- ll_country ctx ---")
for c in strings_near(data, b"ll_country", 100, 8):
print(" ", c[:240])
# Who references UserSearchCallingCodeActivity (launchers)
print("\n=== who references UserSearchCallingCodeActivity class desc ===")
desc = b"Lmy/com/tngdigital/user/view/UserSearchCallingCodeActivity;"
for dex in sorted(n for n in z.namelist() if n.endswith(".dex")):
data = z.read(dex)
count = data.count(desc)
if count:
print(dex, "count=", count)
if __name__ == "__main__":
main()