当前位置: 首页 > news >正文

01. 安卓逆向基础、环境搭建与授权

边界说明:本文只面向自研 Demo、开源靶场或已获得书面授权的 App。所有操作目标都是理解 Android 应用结构、验证安全风险、建设防护能力,不用于未授权破解、盗号、绕过付费或攻击第三方服务。

1. 本章目标

学完本章后,应能完成四件事:

能力说明验收方式
理解 APK 构成知道 Manifest、DEX、资源、Native 库、签名各自负责什么能解压 APK 并标注每类文件用途
搭建工具链准备 Android Studio、adb、jadx、apktool、apksigner、Frida、Burp/mitmproxy每个工具能输出版本或完成一次最小操作
创建授权 Demo自己写一个包含登录、会员判断、HTTPS 请求、Native 方法的测试 App能安装运行 debug 和 release APK
建立实验记录每次分析都有命令、截图、日志、结论和限制输出case-notes.md

安卓逆向学习最常见的问题是直接上工具,但不知道工具结果说明什么。本章先把 Android 应用的运行模型、工程产物和实验环境讲清楚,后续静态、动态、Native、防护章节都围绕同一个 Demo 进行。

2. Android 逆向必须先懂的基础

2.1 APK 是什么

APK 本质上是一个带签名的 ZIP 包。它不是单个可执行文件,而是由多个层次组成:

文件或目录作用逆向关注点
AndroidManifest.xml声明包名、权限、组件、入口、导出状态组件暴露、调试开关、备份开关、Deep Link
classes.dexJava/Kotlin 编译后的 Dalvik 字节码业务逻辑、加密逻辑、风控判断、接口调用
resources.arsc编译后的资源索引字符串、布局、资源 ID 映射
res/布局、图片、字符串等资源页面结构、隐藏入口、硬编码文案
assets/原样打包的资源文件配置、证书、模型文件、脚本
lib/<abi>/*.soNative 动态库JNI、加密、反调试、完整性校验
META-INF/或签名块APK 签名信息是否被重签名、签名方案版本

逆向时不要只看 Java 反编译结果。很多关键逻辑会拆散在 Manifest、资源、Java/Kotlin、Native、网络请求和服务端校验之间。

2.2 Android 安全边界

Android 的基础安全模型包括:

  • 应用沙箱:每个 App 默认拥有独立 UID,私有目录通常在/data/data/<package>
  • 权限模型:危险权限需要运行时申请,组件导出需要额外权限或身份校验。
  • 签名模型:同签名 App 可共享能力,升级安装依赖签名一致。
  • 进程模型:Java 层、Native 层、系统服务通过 Binder、JNI、系统 API 协作。
  • 网络模型:App 通过 OkHttp、Retrofit、HttpURLConnection、WebView 等发起请求。

逆向分析就是在这些边界上找证据:哪里把秘密放在客户端,哪里只做本地判断,哪里能被抓包重放,哪里缺少签名或完整性验证。

3. 工具链安装与验证

3.1 基础工具清单

工具用途验证命令或方法
Android Studio创建 Demo、编译 APK、调试源码能打开项目并运行模拟器
Android SDK / adb安装、启动、日志、shell、文件操作adb devices
jadx / jadx-guiAPK 转近似 Java/Kotlin 源码jadx --version或打开 GUI
apktool反编译资源和 Smali,重打包 APKapktool --version
apksignerAPK 签名、签名验证apksigner verify --verbose app.apk
keytool生成测试证书keytool -help
Frida / frida-toolsJava/Native Hookfrida --versionfrida-ps -Uai
Burp Suite / mitmproxy抓包、改包、重放请求能抓到 Demo 的 HTTP/HTTPS 请求
Ghidra / IDA FreeNative 反编译能打开.so并查看函数

3.2 adb 基础命令

adb devices adbinstallapp-debug.apk adb shell pm list packages|grepreverse adb shell dumpsys package com.example.reversedemo adb shell am start-ncom.example.reversedemo/.MainActivity adb logcat|grepReverseDemo adb shell run-as com.example.reversedemolsfiles

关键理解:

  • adb install用于安装未上架测试包。
  • dumpsys package能看到 Activity、Service、Receiver、Provider、权限和签名摘要。
  • logcat是动态分析的第一手证据,但正式包不应输出敏感日志。
  • run-as只对 debuggable 应用可用,正式包不能依赖这个能力。

3.3 Frida 设备验证

Frida 需要电脑端版本和设备端frida-server主版本一致。

frida--versionadb shell getprop ro.product.cpu.abi adb push frida-server /data/local/tmp/frida-server adb shellchmod755/data/local/tmp/frida-server adb shell /data/local/tmp/frida-server frida-ps-Uai

验证标准:

检查项通过标准
USB 连接adb devices显示 device
Frida 服务设备端frida-server正常运行
进程枚举frida-ps -Uai能列出 App
版本一致无 protocol mismatch 报错

4. 授权 Demo 工程设计

建议创建一个ReverseDemo,故意包含学习用的风险点和后续修复点。不要直接拿第三方商业 App 当练习目标。

4.1 Demo 功能清单

功能初始实现用于练习
登录页用户名密码写死为demo/123456静态字符串定位、日志检查
会员判断isVip()本地返回布尔值Smali 修改、Frida Hook
接口请求请求本地测试服务/api/profile抓包、参数篡改、重放
请求签名客户端生成timestamp + nonce + hmac静态定位签名函数、动态打印明文
Native 方法nativeCheck()返回环境检测结果JNI 定位、Native Hook
Root/代理检测简单检测su、代理端口绕过检测与防护复测
防护开关release 开启混淆、签名校验对比加固前后分析成本

4.2 Kotlin 示例:本地会员判断

packagecom.example.reversedemoobjectUserCenter{privateconstvalLOCAL_USER="demo"privateconstvalLOCAL_PASSWORD="123456"funlogin(user:String,password:String):Boolean{returnuser==LOCAL_USER&&password==LOCAL_PASSWORD}funisVip(userId:String):Boolean{returnuserId=="10001"}funfeatureName():String{returnif(isVip("10002"))"vip-video"else"free-video"}}

这个 Demo 故意把账号、密码和会员判断放在客户端。后续章节会证明:只要关键权益依赖客户端判断,就可以被静态修改或动态 Hook 影响。

4.3 Kotlin 示例:网络签名函数

objectSigner{privateconstvalCLIENT_SECRET="demo-client-secret-change-me"funsign(path:String,timestamp:String,nonce:String,body:String):String{valraw="$path|$timestamp|$nonce|$body|$CLIENT_SECRET"returnsha256(raw)}privatefunsha256(value:String):String{valdigest=java.security.MessageDigest.getInstance("SHA-256")returndigest.digest(value.toByteArray()).joinToString(""){"%02x".format(it)}}}

这个写法也故意不安全:只要密钥在客户端,就可能被静态搜索、动态打印或从内存里定位。真正的核心鉴权应由服务端掌握,客户端只能持有短期凭证。

4.4 Native 示例:JNI 检测

#include<jni.h>#include<unistd.h>extern"C"JNIEXPORT jboolean JNICALLJava_com_example_reversedemo_NativeGuard_nativeCheck(JNIEnv*,jobject){returnaccess("/system/bin/su",F_OK)!=0;}

这个 Native 方法用于练习:

  • 用 jadx 找到System.loadLibrary
  • readelfnm或 Ghidra 找 JNI 函数。
  • 用 Frida Hook Java 层或 Native 层返回值。
  • 把检测结果从“可绕过”改造成“只作为风险信号,不作为唯一安全判断”。

5. Demo 构建与运行

5.1 Debug 包

./gradlew assembleDebug adbinstall-rapp/build/outputs/apk/debug/app-debug.apk adb shell am start-ncom.example.reversedemo/.MainActivity adb logcat|grepReverseDemo

Debug 包适合学习调试,但不代表真实防护状态。它通常包含调试符号、日志、未混淆类名,攻击成本很低。

5.2 Release 包

./gradlew assembleRelease apksigner verify--verboseapp/build/outputs/apk/release/app-release.apk adbinstall-rapp/build/outputs/apk/release/app-release.apk

Release 包要重点检查:

  • 是否关闭debuggable
  • 是否启用 R8/ProGuard 混淆。
  • 是否删除敏感日志。
  • 是否启用签名校验和完整性校验。
  • 是否启用 Network Security Config。

6. 本章 Demo:环境验收实验

6.1 实验任务

  1. 编译并安装ReverseDemodebug 包。
  2. adb shell dumpsys package记录包名、版本、Activity 和签名摘要。
  3. 用 jadx 打开 APK,找到UserCenter.isVip()
  4. 用 apktool 反编译 APK,找到 Manifest 和 Smali 目录。
  5. 用 Burp/mitmproxy 抓到 Demo 的一次接口请求。
  6. frida-ps -Uai确认能看到 Demo 进程。

6.2 验证表

步骤命令或工具通过标准证据文件
安装 APKadb install -r app-debug.apk显示Success01-install.txt
查看包信息adb shell dumpsys package能看到 Activity 和签名02-package.txt
静态查看jadx-gui能定位isVip()03-jadx-screenshot.png
资源反编译apktool生成AndroidManifest.xmlsmali/04-apktool-log.txt
抓包Burp/mitmproxy能看到 Demo 请求05-http-sample.txt
Frida 枚举frida-ps -Uai能看到进程06-frida-list.txt

6.3 常见问题

问题原因处理
adb devices显示 unauthorized设备未授权电脑手机弹窗允许 USB 调试
INSTALL_FAILED_UPDATE_INCOMPATIBLE已安装不同签名包卸载旧包后重装测试包
jadx 打不开 APKAPK 损坏或路径含特殊字符换短路径,先用unzip -t检查
apktool 重打包失败资源解码异常或版本旧升级 apktool,保留错误日志
Frida 连接失败server 架构或版本不一致按 ABI 下载同版本 server
HTTPS 看不到明文App 启用证书绑定或未信任用户证书本章只记录现象,后续章节专门处理

7. 本章交付物

完成本章后,建议产出:

case-reversedemo/ 01-env/ 01-install.txt 02-package.txt 03-jadx-screenshot.png 04-apktool-log.txt 05-http-sample.txt 06-frida-list.txt case-notes.md

case-notes.md至少包含:实验环境、工具版本、APK 信息、已完成步骤、未完成原因、下一步计划。

8. Android 运行模型

8.1 从源码到 APK 的完整链路

Android 逆向要先理解“源码不是 APK 的最终形态”。一个普通 Kotlin/Java 项目从源码到安装包大致经历:

阶段输入输出逆向关注点
Kotlin/Java 编译.kt.java.class语法糖会被展开,例如 Kotlinobject、默认参数、协程状态机
DEX 转换.classclasses.dex方法数、字符串池、类结构、调用引用
资源编译res/AndroidManifest.xmlresources.arsc、二进制 XML资源 ID、组件声明、字符串
Native 编译C/C++.soJNI、符号、导入函数、架构 ABI
打包DEX、资源、so、assets未签名 APK目录结构、压缩内容
签名未签名 APK、证书可安装 APKV1/V2/V3/V4 签名、证书摘要
安装APK/data/app/...、应用沙箱包名、UID、私有目录、权限

学习时要把 jadx、apktool、adb、Frida 分别放在这条链路里理解。jadx 更接近 DEX 反编译,apktool 更接近资源和 Smali,adb 更接近运行环境,Frida 更接近运行时行为。

8.2 Android 进程和沙箱

每个 Android App 默认运行在自己的 Linux UID 下。这个 UID 决定了它能访问哪些文件、能否读写其他应用目录、能否通过 Binder 调用系统服务。

概念解释实操观察
UID应用安装后分配的 Linux 用户 ID`adb shell dumpsys package
私有目录/data/data/<pkg>/data/user/0/<pkg>debug 包可尝试run-as <pkg>
进程名默认是包名,也可为组件单独配置进程`adb shell ps -A
权限Manifest 申请,运行时授权adb shell dumpsys package <pkg>
SELinux限制系统资源访问adb shell getenforce

逆向时常见误判是:在 root 设备上能看到的文件,不代表普通设备也能看到;debug 包能run-as,不代表 release 包也能。

8.3 Activity、Service、Receiver、Provider 的逆向意义

组件正常用途逆向分析点Demo 设计
Activity页面展示和交互是否可被外部启动、是否绕过登录态DebugPanelActivity
Service后台任务、长连接、播放、同步是否导出、是否接受外部 IntentSyncService
BroadcastReceiver接收系统或应用广播是否可被伪造广播触发DebugReceiver
ContentProvider跨进程数据访问是否暴露敏感数据DemoProvider

Demo 中可以故意放一个导出 Activity,再在后续章节验证:外部命令能否直接启动,页面是否校验登录态。

adb shell am start-ncom.example.reversedemo/.DebugPanelActivity adb shell am broadcast-acom.example.reversedemo.DEBUG_ACTION adb shell content query--uricontent://com.example.reversedemo.provider/user

8.4 Intent 与 Deep Link

Deep Link 风险不是“能打开页面”本身,而是打开后是否能执行敏感操作。

<activityandroid:name=".DeepLinkActivity"android:exported="true"><intent-filter><actionandroid:name="android.intent.action.VIEW"/><categoryandroid:name="android.intent.category.DEFAULT"/><categoryandroid:name="android.intent.category.BROWSABLE"/><dataandroid:scheme="reversedemo"android:host="open"/></intent-filter></activity>

验证命令:

adb shell am start-aandroid.intent.action.VIEW-d"reversedemo://open/vip?userId=10002"

检查点:

  • 页面是否要求登录。
  • 参数是否做白名单校验。
  • 是否允许跳转到任意 URL。
  • 是否触发支付、提现、绑定账号等敏感动作。
  • 错误参数是否导致崩溃或信息泄露。

9. Demo 工程细化

9.1 推荐 Demo 模块划分

ReverseDemo/ app/ src/main/java/com/example/reversedemo/ MainActivity.kt LoginActivity.kt DebugPanelActivity.kt UserCenter.kt Signer.kt ApiClient.kt NativeGuard.kt RiskDetector.kt StorageLab.kt src/main/cpp/ native_guard.cpp src/main/res/xml/ network_security_config.xml

每个类负责一个学习主题:

文件学习主题后续章节对应
UserCenter.kt登录和会员判断静态分析、Smali、Frida
Signer.kt请求签名和硬编码密钥jadx 搜索、Hook 参数
ApiClient.ktOkHttp/Retrofit 请求抓包、重放、篡改
NativeGuard.ktJNI 声明Native 分析
RiskDetector.ktroot、debug、proxy 检测Hook 和防护复测
StorageLab.ktSharedPreferences、SQLite、文件本地数据风险

9.2 Demo 风险开关设计

为了方便对比,可以把风险点做成可切换模式:

objectLabSwitch{constvalUSE_LOCAL_VIP_CHECK=trueconstvalUSE_CLIENT_SIDE_SECRET=trueconstvalPRINT_SENSITIVE_LOG=trueconstvalENABLE_EXPORTED_DEBUG_PAGE=trueconstvalENABLE_NATIVE_ROOT_CHECK=true}

实验方式:

开关打开时验证关闭或修复后复测
USE_LOCAL_VIP_CHECKHook/Smali 可影响会员页服务端接口拒绝核心权益
USE_CLIENT_SIDE_SECRETjadx/Frida 能定位签名材料服务端不再依赖客户端长期密钥
PRINT_SENSITIVE_LOGlogcat 可看到敏感字段release 无敏感日志
ENABLE_EXPORTED_DEBUG_PAGEadb 可直接启动导出关闭或入口鉴权
ENABLE_NATIVE_ROOT_CHECKNative 方法可被 Hook检测仅作为风险信号

9.3 Demo 后端最小设计

即使是 Android 逆向学习,也建议准备一个最小后端。否则只能验证客户端现象,不能证明服务端是否安全。

接口建议:

接口用途风险验证
POST /login返回测试 tokentoken 存储、日志泄露
GET /profile查询用户资料越权访问
POST /vip/resource访问会员资源本地会员判断是否影响服务端
POST /order/pay模拟下单支付金额篡改、订单归属
POST /risk/report上报环境检测结果风险信号设计

服务端最小校验:

  • token 必须有效。
  • userId由 token 推导,不能信任客户端传入。
  • 签名必须覆盖 path、method、timestamp、nonce、body hash。
  • nonce 只能使用一次。
  • 高风险操作需要服务端二次校验。

10. 工具验证深水区

10.1 adb 深入命令

任务命令用途
查看安装路径adb shell pm path com.example.reversedemo定位 base.apk
拉取 APKadb pull /data/app/.../base.apk分析已安装包
查看应用 UID`adb shell dumpsys packagegrep userId`
查看权限`adb shell dumpsys packagegrep permission -n`
启动 Activityadb shell am start -n <pkg>/<activity>验证导出页面
发送广播adb shell am broadcast -a <action>验证 Receiver
查看崩溃adb logcat -b crash定位异常
查看网络代理adb shell settings get global http_proxy抓包排错
清除数据adb shell pm clear <pkg>复现实验初始状态
卸载应用adb uninstall <pkg>解决签名冲突

10.2 jadx 使用细节

操作目的注意
全局搜索字符串找 URL、密钥、错误文案混淆后字符串仍常保留
搜索方法名找业务入口混淆后方法名可能不可用
查看调用者建立调用链反射和动态加载可能断链
导出 Gradle 项目方便全文搜索不能当源码直接运行
对比 debug/release看混淆和日志差异release 更接近真实环境

10.3 apktool 使用细节

apktool d-fapp-debug.apk-odecoded-debug apktool b decoded-debug-orebuilt.apk

常见参数:

参数用途
-f覆盖输出目录
-o指定输出目录或文件
--use-aapt2使用 aapt2 构建资源
--no-res不反编译资源,适合资源异常时
--no-src不反编译 Smali,只看资源

apktool 成功反编译不代表能成功重打包。资源异常、签名差异、版本差异都可能影响安装。

10.4 Frida 环境排错清单

现象排查方向处理
unable to connectUSB、frida-server 未运行检查adb devices和 server
protocol error电脑端和设备端版本不一致下载同版本 frida-server
permission deniedserver 无执行权限chmod 755
只看到系统进程权限或设备连接异常用 root 环境或调试设备
spawn 后黑屏Hook 脚本异常阻塞先注释修改逻辑,只打印
类找不到类未加载或包名错误先触发页面或枚举 ClassLoader

11. 实验记录规范

11.1 每次实验必须记录的字段

# 实验记录 ## 基本信息 - 实验名称: - 实验日期: - 操作人: - App 包名: - App 版本: - APK 哈希: - 设备型号: - Android 版本: - 是否 root: ## 工具版本 | 工具 | 版本 | 用途 | ## 操作步骤 1. 2. 3. ## 证据 | 证据 | 文件 | 说明 | ## 结论 - 已验证: - 未验证: - 限制: - 下一步:

11.2 APK 哈希记录

shasum-a256app-debug.apk shasum-a256app-release.apk

为什么要记录哈希:

  • 保证报告和样本对应。
  • 避免 debug/release 混用。
  • 复测时确认是否同一版本。
  • 多人协作时减少证据争议。

11.3 证据命名规范

类型命名示例
命令输出01-adb-devices.txt
截图02-jadx-isvip.png
Hook 脚本03-hook-isvip.js
Hook 日志04-hook-isvip.log
抓包样本05-profile-request.http
修改前代码06-before.smali
修改后代码07-after.smali
复测矩阵08-retest-matrix.md

12. 阶段练习

12.1 入门练习

练习操作通过标准
APK 解压unzip -l app.apk能解释主要目录
包名识别apkanalyzer或 Manifest能写出包名和版本
设备安装adb installApp 可启动
日志查看adb logcat能过滤 Demo 日志
jadx 查看打开 APK能定位MainActivity

12.2 进阶练习

练习操作通过标准
导出组件验证adb shell am start能证明是否可外部启动
本地存储查看debug 包run-as能找到测试数据
网络代理配置Burp/mitmproxy能抓到 Demo 请求
Frida 枚举frida-ps -Uai能看到 Demo 进程
Native 提取unzip -p能提取目标 ABI so

12.3 专项练习

主题任务输出
Manifest列出所有组件和导出状态manifest-audit.md
DEX找登录、会员、签名方法dex-map.md
网络抓 3 个关键接口api-flow.md
NativenativeCheckjni-map.md
防护对比 debug 和 releasebuild-compare.md

13. 验收考试

最终验收要求:

  1. 在本机完成 Demo 编译和安装。
  2. 用不少于 8 条 adb 命令完成设备、包、组件、日志、代理检查。
  3. 用 jadx 定位 3 个关键类:登录、签名、Native 声明。
  4. 用 apktool 反编译并找到 Manifest 和 Smali。
  5. 用 Frida 完成进程枚举。
  6. 用 Burp/mitmproxy 完成至少一次授权 Demo 抓包。
  7. 输出完整case-notes.md

评分表:

项目分值扣分点
环境可用20工具版本未记录、设备不可连接
Demo 可运行20debug/release 混淆、包名不清
工具验证20jadx/apktool/Frida/Burp 任一缺证据
记录规范20没有命令输出和截图
安全边界20未写授权范围或使用真实敏感数据

14. 基础、环境与 Demo 工程

本节补充真正的知识点说明。每个知识点都包含需要理解的核心、Demo 中的验证方式和常见误区。

Android 应用基础

知识点核心理解Demo/验证常见误区
APK 文件结构APK 是带签名的压缩包,核心由 Manifest、DEX、资源、Native 库、assets 和签名信息组成。解压ReverseDemo,标注AndroidManifest.xmlclasses.dexlib/arm64-v8a/libreversedemo.so只看 jadx 代码,忽略 Manifest、资源和 so。
DEX 字节码Java/Kotlin 最终会进入 DEX,ART 执行的是 DEX 而不是源码。在 jadx 中对比 Kotlinobject和反编译后的类结构。把反编译代码当作原始源码逐行理解。
Kotlin 编译痕迹空安全、伴生对象、默认参数、协程会生成额外类和辅助方法。搜索IntrinsicsCompanionDefaultImpls看到代码复杂就误以为有安全防护。
应用 UIDAndroid 用 Linux UID 隔离应用,私有目录权限由 UID 控制。dumpsys package查看userId,debug 包尝试run-as把 root 设备能读到的数据当作普通设备也可读。
四大组件Activity、Service、Receiver、Provider 是外部入口和业务承载点。分别用am startam broadcastcontent query验证 Demo 入口。只测试页面,不测试后台组件和 Provider。
Intent 参数Intent 的 extras、data、action 都可能由外部构造,不能默认可信。构造 Deep Link 参数打开会员页。把客户端传入的userId当作服务端可信身份。
签名机制签名证明 APK 来源和升级一致性,不加密代码。apksigner verify --print-certs查看证书摘要。认为 APK 签名能阻止反编译。
Debug 与 Releasedebug 包偏调试,release 包才接近真实上线状态。分别构建两个包并用 jadx 对比混淆、日志和 Manifest。只分析 debug 包后直接给出正式安全结论。

工具与环境

知识点核心理解Demo/验证常见误区
adb 设备通道adb 提供安装、shell、日志、组件触发和数据清理能力。完成adb devicesinstalllogcatam start把 adb 能触发当作漏洞结论,不看触发后的业务影响。
jadx 角色jadx 适合读 DEX 近似源码和调用关系。定位UserCenter.isVip()Signer.sign()认为 jadx 看不到就代表不存在。
apktool 角色apktool 适合资源、Manifest、Smali 和重打包验证。反编译 Demo 并找到 Smali 目录。用 apktool 输出的资源名直接推断业务风险。
apksigner 角色apksigner 验证签名方案、证书和重签名结果。对原包和重签名包分别验证。只要能重签名就认为完整性防护失效,还需结合服务端。
Frida 前置条件Frida 需要设备连接、server 版本、目标进程和注入时机匹配。frida-ps -Uai枚举 Demo。Hook 成功就直接判业务高危。
Burp/mitmproxy抓包工具用于观察和篡改授权测试流量。抓 Demo 的/api/profile请求。抓不到包就认为接口一定安全。
Ghidra 角色Ghidra 用于 so 反汇编、字符串引用、函数重命名和控制流理解。导入libreversedemo.so并搜索nativeCheck只看 Java external 方法,不分析 so。
工具版本记录逆向结果和工具版本强相关,报告必须记录版本。输出tool-version.md不记录版本导致复现困难。

Demo 工程设计

知识点核心理解Demo/验证常见误区
可控授权样本学习逆向必须使用自建 Demo、开源靶场或授权测试包。ReverseDemo中内置测试账号和测试接口。用第三方未授权 App 练习。
本地会员判断客户端布尔值可被 Smali 或 Hook 影响。设计UserCenter.isVip()把本地判断当作核心权益保护。
请求签名函数签名函数用于学习参数覆盖范围和密钥边界。设计Signer.sign(path,timestamp,nonce,body)认为客户端签名必然安全。
测试后端没有后端就无法验证核心业务是否真的越权。提供/login/profile/vip/resource只看客户端 UI 变化,不测接口结果。
Native 检测点Native 适合学习 JNI 和环境检测,但不是绝对安全。设计NativeGuard.nativeCheck()把逻辑放进 so 就认为不可分析。
证据目录证据必须按阶段归档,便于复现和交付。建立01-env02-static03-dynamic截图和命令输出散落,最后无法写报告。

使用方式

每个知识点都要落到三件事:能解释原理,能在ReverseDemo或授权样本里找到证据,能写出验证结果和修复边界。

http://www.cnnetsun.cn/news/2212683.html

相关文章:

  • ClaudeClaw:面向巨量代码库的智能管理与语义搜索平台
  • 自感的物质重塑与唯物主义的本体论重构——岐金兰论AI时代“唯心恐惧症”的终结
  • ## 4 Agent 的感知层:多模态输入(文本、图像、音频、传感器)
  • Arduino Portenta H7 Lite开发板工业应用与成本优化解析
  • 保研个人陈述别再套模板了!手把手教你用STAR法则写出让导师眼前一亮的文书(附500/1000/1800字实例拆解)
  • 不只是医学影像:手把手教你用CTK Widgets库快速打造专业级Qt桌面应用
  • MinIO Windows安装踩坑实录:从环境变量失效到服务启动失败的全面解决指南
  • Bifrost AI Gateway:统一AI模型调用,实现智能路由与故障转移
  • 别再死记硬背了!用一张图搞懂嵌入式Linux启动三巨头:U-Boot、Kernel、Rootfs的协作关系
  • 深入MTK SensorHub 3.0架构:以SH3001和VC36658为例,详解传感器驱动与HAL的协作机制
  • 家庭网络“双网关”现象解析与通用桥接配置指南
  • 告别‘text/plain’:彻底搞懂Flask静态文件Content-Type与Vite打包的兼容性配置
  • 光线追踪与3D高斯渲染的GRTX架构优化实践
  • ESP32-CAM四驱遥控车DIY指南
  • ISAC系统中杂波建模与抑制技术解析
  • NVIDIA AI红队:机器学习安全攻防实战解析
  • OpenClaw Agent Templates:模块化配置快速构建专属AI助手
  • Arm Cortex-A76处理器错误分析与解决方案
  • 对比直接使用原厂 API 体验 Taotoken 聚合服务在接入便捷性上的优势
  • VeLoCity皮肤:为VLC播放器注入全新视觉体验与交互设计的界面革命
  • 大模型后训练优化:ODC架构显存与通信效率提升实践
  • 老旧电视盒子救星:手把手教你给创维H2903刷入安卓4.4.2精简固件,告别卡顿
  • 2026/03/30飞书 V7.65 功能更新详解:AI 深度融合办公场景,aily、妙搭、多维表格与妙记全面升级
  • 别再只用收盘价了!用Python实战对比Parkinson、Garman-Klass等三种高阶波动率算法(附完整代码)
  • 告别机械按键:在中颖51项目里低成本集成触摸功能(SH79F9476 Touch Key实战)
  • DDrawCompat完整指南:让经典游戏在Windows 11上焕发新生的终极解决方案
  • STM32 CubeMX配置FreeRTOS通信的避坑指南:为什么你的信号量会丢失,队列会溢出?
  • 5分钟上手Jets.js:打造电商网站极速产品搜索体验的完整指南
  • 7个维度深度对比:Nano Emacs与Elegant Emacs谁才是最适合你的Emacs美化方案?
  • AI驱动浏览器:基于LLM的网页智能理解与自动化交互架构解析