########## 1) NativeAnalyzer.analyzeSo  (deep=false) ##########
库: libr_bp.so  用时 449ms  报告 3157 字符
■■ libr_bp.so
  路径 : E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm64-v8a\libr_bp.so
  大小 : 26984 bytes (26.4 KB)

■ ELF 结构（纯 Java 解析，不依赖 radare2）
  类型     : ET_DYN（共享库 / PIE）
  类别     : ELF64 小端（LE）
  架构     : AArch64 (arm64)
  入口     : 0x1e10
  SONAME   : libr_bp.so
  段数     : 19

  ◆ 段表
      .gnu.hash         0x190       420 B     GNU_HASH    -W-
      .dynsym           0x338       2.2 KB    DYNSYM      -W-
      .dynstr           0xbd8       1.2 KB    STRTAB      -W-
      .gnu.version      0x107a      184 B     GNU_VERSYM  -W-
      .gnu.version_r    0x1138      32 B      GNU_VERNEED -W-
      .rela.dyn         0x1158      1.4 KB    RELA        -W-
      .rela.plt         0x16e0      1.1 KB    RELA        -W-
      .plt              0x1b20      752 B     PROGBITS    -WX
      .text             0x1e10      13.8 KB   PROGBITS    -WX
      .rodata           0x555c      1.2 KB    PROGBITS    -W-
      .note.android.ident 0x5a08      152 B     NOTE        -W-
      .fini_array       0x9c78      16 B      FINI_ARRAY  RW-
      .data.rel.ro      0x9c88      8 B       PROGBITS    RW-
      .dynamic          0x9c90      464 B     DYNAMIC     RW-
      .got              0x9e60      416 B     PROGBITS    RW-
      .data             0xa000      1016 B    PROGBITS    RW-
      .bss              0xa3f8      24 B      NOBITS      RW-
      .shstrtab         0x0         169 B     STRTAB      ---

  ◆ 依赖库（DT_NEEDED，3 个）
      libr_util.so, libdl.so, libc.so

  ◆ 导出符号（48 个）
      (无 Dart/JNI/网络/反调试 相关的具名导出)

  ◆ 导入符号（UND，41 个）
      pj_end, r_str_rwx_i, r_assert_log, r_name_filter_dup, realloc, r_log_message, r_list_purge, r_libstore_find_name, pj_new, stderr, r_list_delete, r_libstore_new, __cxa_finalize, calloc, r_log_match, r_list_free, pj_drain, r_strbuf_append, __register_atfork, r_strbuf_new, r_str_get, r_list_delete_data, r_list_append, r_strbuf_appendf … 等 41 个

  ◆ 字符串情报（单次扫描，6 字符以上；每项最多列 20 条）
      字符串总数 : 140

      [.dart     ] 0 条
      [package:  ] 0 条
      [http      ] 0 条
      [dart:     ] 0 条
      [flutter   ] 0 条
      [frida     ] 0 条

  ◆ Dart 包路径（package: / dart:）
      package: 命中 0 条，dart: 命中 0 条，.dart 命中 0 条
         (无 Dart 源路径 —— 非 Flutter 库，或该库已被 strip 到只剩机器码)

  ◆ Dart 快照符号
      (非 Dart 库，无快照符号属正常；若目标是 Flutter 应用，看同批里的 libapp.so)

■ radare2 增强分析（可选，失败不影响上面的结论）
  用时 402ms
  ◆ 文件信息（iI）: arch=arm  bits=64  machine=ARM aarch64  os=android  pic=true  stripped=true  canary=false  nx=true  relro=full
  ◆ 依赖库（il）: libr_util.so, libdl.so, libc.so
  ◆ 动态符号（isq）: 91 条
  ◆ 入口点（ie）: 1 个
      0x00001e10 0x00001e10 0x00000018 0x00000018 program

■ 下一步定位建议
  r2_strings {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm64-v8a\libr_bp.so","filter":"关键字"}   找字符串
  r2_xrefs   {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm64-v8a\libr_bp.so","addr":"0x偏移"}   从字符串偏移追到代码
  r2_disasm  {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm64-v8a\libr_bp.so","addr":"0x偏移","n":64}   反汇编
  flutter_probe {"apk_path":"<APK>"}   取 Dart 版本与 blutter 版本选择
  说明: 上面列出的字符串都带文件偏移（0x…），拿它去 r2_xrefs 就能顺藤摸瓜；
        这是没有符号表（stripped）时最有效的路径。


  [PASS] 报告含标题(库名)
  [PASS] 含文件信息段(iI)
  [PASS] 识别出 ELF64
  [PASS] 含 ELF 结构段（纯 Java 解析）
  [PASS] 识别出 aarch64（ELF 层）
  [PASS] 识别出 aarch64（r2 层）
  [PASS] 含段表
  [PASS] 段表列间有分隔（无名字/偏移粘连）
  [PASS] 含依赖库(DT_NEEDED)
  [PASS] 含依赖库(il)
  [PASS] 含动态符号(isq)
  [PASS] 含导出符号段
  [PASS] 含导入符号段
  [PASS] 含字符串总数
  [PASS] 字符串总数是数字
  [PASS] 含 Dart 包路径段
  [PASS] 含 Dart 快照符号段
  [PASS] 含下一步建议(r2_xrefs)
  [PASS] r2 段标注为可选增强
  [PASS] 无 r2 噪声(WARN/INFO 已滤)
  [PASS] 无 marker 残留
########## 2) 深度函数分析 (deep=true, 小库) ##########
库: libr2.so  用时 922ms
◆ 深度函数分析（aa）
    函数总数 : 10（用时 0s）
    0x00000900    1     16 sym.imp.r_main_run
    0x00000910    1     16 sym.imp.__libc_init
    0x00000920    1     16 sym.imp.r_main_new
    0x00000930    1     16 sym.imp.fprintf
    0x00000940    1     16 sym.imp.r_main_free
    0x00000950    1     16 sym.imp.__cxa_atexit
    0x00000960    1     16 sym.imp.__register_atfork
    0x00000970    1     16 sym.imp.r_file_basename
    0x00000980    4     92 entry0
    0x00000a04    4    164 main

■ 下一步定位建议
  r2_strings {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm64-v8a\libr2.so","filter":"关键字"}   找字符串
  r2_xrefs   {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\app\src\main\libs\arm
  [PASS] 深度段存在
  [PASS] 深度段给出函数总数
  [PASS] 深度段非'未启用'
########## 3) AnalysisRun.run (真 APK) ##########
总用时 2448ms  libsAnalyzed=1
--- summary ---
✅ 分析完成（耗时 2.4s）
目标文件 : E:\KuGou\2026-09-15-18-17-47\android_mcp\dist\RevMCP-debug.apk（45.6 MB）
包级画像 : 第 1-112 行｜字节 0-4294
原生分析 : 第 113-266 行｜字节 4294-13994（1 个 .so）
日志文件 : E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\logs_reg\analysis.log
读包级画像: read_log {"offset":0,"max_bytes":20000}
读原生分析: read_log {"offset":4294,"max_bytes":40000}
(未启用 Flutter 符号还原)

  [PASS] 产生包级画像块
  [PASS] 产生原生分析块
  [PASS] 分析了 >= 1 个 .so（只挑逆向相关的）
  [PASS] summary 含两个 read_log 指令
  [PASS] 日志回读含'原生库分析'
  [PASS] 日志回读含 iI 段
  [PASS] 日志回读含 lib 名
  [PASS] 日志行数合理
  [PASS] 报告声明只分析逆向相关库
工作目录 E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\logs_reg\work\RevMCP-debug.apk 保留文件: 1
  [PASS] 工作目录存在
########## 4) pick() 选库策略 ##########
picked(2): libapp.so libflutter.so 
  [PASS] 主库被优先选中
  [PASS] 数量不超过上限 5
  [PASS] arm64 优先于 v7a
targets(4): libapp.so libflutter.so libsecneo.so libnative-lib.so 
skipped(6): libavcodec.so libavformat.so libavfilter.so libswscale.so libmmkv.so libsqlite3.so 
  [PASS] 核心库必选（libapp + libflutter）
  [PASS] 媒体/编解码库全部跳过（含最大那个）
  [PASS] 存储类库跳过（mmkv / sqlite3）
  [PASS] 加固类库纳入（secneo）
  [PASS] JNI 业务库纳入（native-lib）
  [PASS] 每个跳过项都写明原因
  [PASS] arm64 去重（libapp.so 只出现一次）
  [PASS] extra_libs 能把默认跳过的库捞回来
########## 5) Dart AOT 路由（合成 libapp.so） ##########
库: libapp.so  报告 3960 字符
■ 下一步定位建议
  ★ 这是 Dart AOT 快照库 —— 先做符号还原，再谈代码定位
  blutter_run {"so_path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\synth_dart\libapp.so"}
      用内置预编译 blutter 还原函数名 / 类结构 / 伪代码，产物写进 analysis.log 可分页读；
      版本按 Dart 版本自动挑选（可先跑 blutter_doctor 看内置清单）。
  flutter_probe {"apk_path":"<APK>"}   取 Dart 版本 / engine id（若要手动对版本）

  以下 r2 手段在 libapp.so 上只用于**字符串级**定位，不要期望反汇编出函数：
  r2_strings {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\synth_dart\libapp.so","filter":"关键字"}   找字符串
  r2_xrefs   {"path":"E:\KuGou\2026-09-15-18-17-47\android_mcp\evidence\synth_dart\libapp.so","addr":"0x偏移"}   从字符串偏移追到代码
  r
  [PASS] 合成文件被识别为 Dart AOT
  [PASS] Dart AOT 建议区首选 blutter_run
  [PASS] Dart AOT 建议区不再误导到 r2 反汇编
  [PASS] 快照符号段列出 _kDartIsolateSnapshotData
  [PASS] Dart 包路径段有命中
frida 命中数 = 4  （期望 4：真命中 4 条，'Friday' 类 2 条被词头规则挡掉）
  [PASS] frida 计数排除 'Friday' 假阳性（应为 4）
  [PASS] frida 样例里含真命中字符串
  [PASS] 普通库(libr_core)不带 Dart AOT 路由

=========================================
PASS: 53   FAIL: 0
=========================================
