TngRootBypassHook 增强 captcha 诊断、TigerTally/JNIC 分层与 HWUI 策略;新增逆向脚本、Frida 工具与 UI dump;同步 MariBank SG hook 与 tng_exit_guard 更新。
69 lines
2.3 KiB
Python
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()
|