
1. 项目概述一份面向移动安全初学者的工具全景图如果你刚接触移动安全或者从Web安全、系统安全转过来面对Android和iOS两大平台最头疼的恐怕不是原理而是“工具”。该用哪个怎么装怎么连网上资料零散版本新旧不一跟着教程走一半就卡住是很多人的常态。这份清单就是为你准备的。它不是简单的罗列而是我结合多年移动应用渗透测试和逆向工程经验为你梳理的一份从环境搭建、基础调试到深度逆向的“工具作战地图”。目标很明确让你在拿到一个Android APK或iOS IPA文件时知道每一步该用什么工具以及如何快速上手避开那些新手必踩的坑。无论是想学习应用安全、进行合规性安全测试还是对某个应用的工作原理感到好奇收藏这一篇能帮你节省大量东拼西凑找资料的时间。2. 核心思路与学习路径设计移动安全测试尤其是逆向分析其核心思路可以概括为“由外而内动静结合”。所谓“由外而内”是指先从应用的外部行为网络通信、文件操作、日志输出入手再深入到内部的代码逻辑。而“动静结合”则是动态分析运行应用观察其行为与静态分析直接查看反编译的代码相辅相成。对于零基础者切忌一上来就扎进汇编指令和混淆的代码里那会极大挫伤信心。合理的路径应该是先搭建一个可控的测试环境然后学习如何捕获应用运行时的动态数据最后再挑战静态逆向理解代码逻辑。这份工具清单正是按照这个逻辑层次来组织的确保你每一步都有称手的“兵器”。2.1 环境准备测试设备的选型与配置工欲善其事必先利其器。移动安全测试的第一步永远是准备测试环境。这里有两个核心测试设备和代理抓包环境。测试设备的选择 对于Android强烈建议使用一台Root后的真实手机或官方提供的模拟器如Android Studio自带的AVD。Root权限是很多高级工具如Frida、Xposed发挥作用的前提。如果使用模拟器Genymotion是个不错的选择它对Root的支持比较友好性能也较好。对于iOS则需要一台越狱后的iPhone或iPad。越狱是iOS深度测试的入场券。如果没有越狱设备也可以使用Xcode自带的Simulator进行一些基础的动态分析但能力受限很多。代理抓包环境搭建 绝大多数应用都会进行网络通信分析其API是理解业务逻辑的关键。你需要在本机通常是Windows/macOS/Linux电脑上运行一个代理服务器然后将手机的网络流量导向这个代理。Burp Suite或Charles是行业标准。以Burp Suite为例关键步骤是1) 在Burp中开启一个监听代理如0.0.0.0:80802) 在手机Wi-Fi设置中配置手动代理指向你电脑的IP地址和Burp的端口3) 在手机浏览器中访问http://burp下载并安装Burp的CA证书到手机信任凭据中。对于Android 7.0及以上版本由于系统不再信任用户安装的CA证书你需要将Burp的证书以系统级方式安装这通常需要Root后将证书文件移动到/system/etc/security/cacerts/目录并修改权限。注意在真机上配置代理时确保手机和电脑在同一局域网下。如果抓不到包首先检查防火墙是否放行了代理端口其次确认手机代理设置是否正确最后检查证书是否安装并被信任。2.2 工具分类与学习阶段对应关系我将工具分为四大类对应不同的学习阶段和测试目标基础调试与抓包工具这是入门第一步用于观察应用“做了什么”。包括ADBAndroid调试桥、Burp Suite/Charles网络抓包、Logcat日志查看、DrozerAndroid组件测试框架等。这个阶段的目标是熟悉应用的基本行为和数据流。静态逆向分析工具用于查看应用“是什么”。在不运行应用的情况下反编译、解包、查看资源、分析代码结构。包括Apktool、Jadx-GUI、dex2jar、JD-GUI针对Android以及otool、class-dump、Hopper Disassembler、IDA Pro针对iOS。这个阶段需要一定的编程基础。动态运行时分析工具用于在应用运行时干预和探查其“为什么”和“怎么做”。这是深度测试的核心。包括Frida动态插桩框架、Xposed框架Android、Cydia SubstrateiOS已较少用、Objection基于Frida的运行时探索工具。这个阶段挑战最大也最能体现技术深度。专项与辅助工具解决特定问题。如MobSF移动安全自动化扫描框架、SQLite数据库查看器、Keychain/SharedPreferences查看工具、各种脱壳工具等。新手应该按照1-2-3的顺序循序渐进。在掌握第1类工具的基本使用后就可以尝试用第2类工具查看简单应用的代码然后再结合第3类工具进行动态验证和深入分析。3. 核心工具详解与实操入门下面我将挑选每个类别中最关键、最常用的工具详细说明其作用、基本用法和入门实操命令。3.1 基础调试王牌ADBAndroid Debug BridgeADB是连接电脑和Android设备或模拟器的万能瑞士军刀。几乎所有Android测试都从它开始。安装与连接 ADB通常包含在Android SDK的platform-tools目录中。你可以单独下载platform-tools包。连接真机需要开启手机的“开发者选项”和“USB调试”。连接后在命令行输入adb devices如果看到设备序列号后面跟着device字样说明连接成功。如果是unauthorized需要在手机屏幕上点击授权提示。常用命令与安全测试场景adb shell进入设备的Linux Shell环境。这是你操作设备的起点。adb install apk_path/adb uninstall package_name安装和卸载应用。测试前安装待测应用测试后清理环境。adb logcat查看系统日志。可以添加过滤器如adb logcat -s TagName查看特定标签的日志这对调试应用崩溃、观察特定输出至关重要。你可以通过adb logcat | grep -i “password”之类的命令来快速搜索敏感信息泄露。adb pull device_path local_path/adb push local_path device_path在设备和电脑间传输文件。例如备份应用数据adb pull /data/data/com.example.app ./需要Root。adb forward tcp:pc_port tcp:device_port端口转发。将设备上的某个端口映射到电脑上便于本地工具连接。这在后续使用Frida时非常常用。一个典型的安全测试初始流程是adb install test.apk-adb shell-run-as com.example.app或su后进入/data/data/com.example.app目录- 查看私有目录下的数据库、配置文件、缓存文件寻找敏感信息。3.2 静态逆向三板斧AndroidApktool、Jadx、dex2jar面对一个APK文件静态分析的第一步是拆开它看结构。Apktool 它用于反编译APK的资源文件如图片、布局XML、字符串资源和清单文件AndroidManifest.xml并能将修改后的资源重新打包成APK。这对于修改应用资源、绕过某些客户端校验非常有用。# 反编译APK到目录output apktool d your_app.apk -o output # 查看output目录重点关注AndroidManifest.xml和res文件夹 # 修改后重新打包 apktool b output -o modified_app.apk # 新APK需要重新签名才能安装Jadx-GUI 这是目前最强大、用户友好的Android反编译图形化工具。它可以直接打开APK或DEX文件将Dalvik字节码反编译成可读性非常高的Java代码。对于初学者Jadx应该是你查看代码的首选。你可以通过它的搜索功能CtrlF快速定位关键字符串、类名或方法名例如搜索“encrypt”、“token”、“http://”来定位加解密逻辑和网络请求。dex2jar JD-GUI传统组合 虽然Jadx几乎取代了这个组合但有时对于某些加固或混淆过的APK这个老方法可能仍有奇效。流程是用解压软件如7-Zip从APK中取出classes.dex文件用d2j-dex2jar.batWindows或d2j-dex2jar.shLinux/macOS将其转换为classes-dex2jar.jar然后用JD-GUI打开这个JAR文件查看Java代码。实操心得静态分析时不要一头扎进成千上万个类里。先从AndroidManifest.xml入手找到应用的入口Activity、声明的权限、使用的组件特别是exportedtrue的组件可能存在风险。然后在Jadx中搜索“http”、“https”、“password”、“key”等关键词快速定位潜在的风险点。3.3 动态分析利器FridaFrida是一个跨平台的动态插桩框架它允许你向目标进程注入JavaScript代码从而在运行时拦截函数调用、修改参数返回值、枚举模块和内存搜索。它是现代移动安全测试的“屠龙刀”。安装 在电脑上安装Frida客户端pip install frida-tools。在手机上安装Frida服务端frida-server。你需要根据手机架构arm, arm64, x86等和Frida版本从GitHub Releases下载对应的frida-server文件通过adb push传到设备上赋予可执行权限并以root身份运行adb shell su -c /data/local/tmp/frida-server 。基础使用 一个最简单的例子是枚举目标应用加载的模块。写一个Python脚本import frida import sys def on_message(message, data): print(message) # 连接设备 device frida.get_usb_device() # 附加到目标进程前台运行应用 pid device.spawn([com.example.app]) # 如果应用未启动用spawn session device.attach(pid) # 如果应用已运行用attach(pid) # 或者直接 attach(应用名) # session device.attach(com.example.app) # 创建注入脚本 js_code Java.perform(function () { // 枚举所有已加载的类 var classes Java.enumerateLoadedClassesSync(); console.log(Loaded classes: classes.length); // 这里可以写更多的Hook代码 }); script session.create_script(js_code) script.on(message, on_message) script.load() sys.stdin.read() # 保持脚本运行更常见的用法是Hook特定的Java方法。例如Hook一个登录函数的密码参数Java.perform(function () { var LoginClass Java.use(com.example.app.LoginActivity); LoginClass.login.overload(java.lang.String, java.lang.String).implementation function (username, password) { console.log(Username: username); console.log(Password: password); // 明文密码被打印出来了 // 你可以修改返回值比如永远返回true // return true; // 或者继续执行原函数 return this.login(username, password); }; });Objection 对于初学者直接写Frida脚本可能有些困难。Objection是一个基于Frida的命令行工具它封装了许多常用功能让你通过简单的命令就能完成内存搜索、方法Hook、SSL Pinning绕过等操作。安装pip install objection。基本使用objection -g com.example.app explore。进入REPL环境后你可以输入命令如android hooking list activities查看活动android sslpinning disable尝试禁用SSL证书绑定。注意事项Frida的稳定性与目标应用的反调试、反注入措施强相关。有些应用会检测Frida导致注入失败或应用崩溃。这就需要你进行对抗比如修改Frida特征、使用非常规注入方式等这属于更高级的话题。初次使用建议从没有加固的简单应用开始。3.4 iOS逆向入门工具链iOS工具链与Android思路相通但具体工具不同且对越狱环境依赖更强。静态分析otoolmacOS/iOS自带的命令行工具用于查看Mach-O文件可执行文件的信息如头信息、加载命令、符号表。otool -L binary可以查看链接的动态库。class-dump类似于Android的dex2jar它可以从Mach-O文件中提取Objective-C类的头文件.h让你了解应用的类结构和方法声明。使用class-dump -H app_binary -o output_headers_dir。Hopper Disassembler/IDA Pro反汇编器。将机器码反汇编成汇编语言ARM汇编并可以进行控制流图分析。Hopper对个人更友好IDA是行业标杆但价格昂贵。它们是分析核心算法、绕过保护的终极工具。动态分析Cycript/FridaCycript是一个在越狱设备上使用的脚本语言可以注入到进程中混合了JavaScript和Objective-C语法。但现在Frida在iOS上也极其强大其使用方式与Android类似通过frida-ios-dump等工具可以方便地将砸壳后的应用二进制文件拉取到电脑上进行分析。Reveal/FLEXUI分析工具。Reveal是商业软件可以实时查看和修改应用UI层级。FLEX是开源的内嵌调试工具通过注入到应用中提供查看视图层级、网络请求、文件系统等能力。SSL Kill Switch/Objection用于绕过iOS应用的SSL证书绑定SSL Pinning。SSL Kill Switch是一个越狱插件全局禁用证书验证。Objection同样提供了ios sslpinning disable命令来尝试绕过。关键步骤获取解密后的IPA砸壳 从App Store下载的应用是经过加密的无法直接反编译。需要在越狱设备上运行该应用然后通过工具如frida-ios-dump、Clutch、dumpdecrypted将内存中已解密的应用二进制文件导出即“砸壳”才能进行后续的静态分析。4. 实战串联一个简单的Android应用测试流程让我们用一个虚构的、存在漏洞的Android应用“VulnApp”来串联使用上述工具完成一次简单的安全测试。步骤1环境与目标确认准备一台已Root的Android测试机安装VulnApp。电脑上配置好Burp Suite代理手机Wi-Fi设置代理指向Burp并安装好Burp的CA证书系统级。步骤2动态抓包与行为分析启动Burp开启拦截。在手机上打开VulnApp进行登录操作。在Burp中捕获到登录请求POST /login参数为usernameadminpassword123456。发现密码明文传输。关闭拦截让请求通过。观察后续请求发现服务器返回了一个token字段后续API请求都在Header中携带Authorization: Bearer token。步骤3静态代码审计寻找风险点将VulnApp.apk拖入Jadx-GUI。搜索“login”找到登录相关的Activity或方法。定位到LoginActivity.login()方法。查看其实现发现它确实将用户名密码拼接后直接发送。同时发现一个saveCredential()方法将用户名密码用AES加密后存入了SharedPreferences。搜索AES密钥发现密钥硬编码在代码中private static final String AES_KEY VULNAPP123456789;。搜索token的使用发现一个TokenManager类其中getToken()方法从SharedPreferences读取token但refreshToken()方法在构造请求时将设备IDandroid_id作为参数明文发送。步骤4使用ADB验证漏洞adb shell进入设备。切换到应用数据目录su-cd /data/data/com.vuln.app。查看shared_prefs目录下的XML文件cat shared_prefs/user_info.xml。发现加密后的密码字段。由于我们已经从代码中知道了AES密钥和加密模式假设是ECB/PKCS5Padding可以在电脑上写一个简单的解密脚本解密出密码。步骤5使用Frida进行动态验证与深入测试编写Frida脚本HookLoginActivity.login()方法打印甚至修改其参数。编写脚本HookTokenManager.refreshToken()方法查看其发送的设备ID并尝试修改它。使用Objection命令android hooking watch class_method com.vuln.app.TokenManager.refreshToken --dump-args --dump-return来监控该方法。通过以上流程我们发现了1) 密码明文传输2) 本地存储加密密钥硬编码3) Token刷新时敏感参数明文传输。这已经构成了一个基本的安全测试报告的核心发现。5. 常见问题排查与进阶技巧在实际操作中你会遇到各种各样的问题。这里记录一些高频问题的解决思路。5.1 网络抓包常见问题问题Burp/Charles抓不到HTTPS包显示TLS错误或证书错误。排查首先确认HTTP包是否能抓到。如果能问题集中在证书。解决确认证书安装确保Burp/Charles的CA证书已正确安装到手机的“受信任的凭据”中用户级和系统级都检查。应对SSL Pinning很多应用会启用SSL证书绑定只信任自己的证书。你需要绕过它。对于Android常用方法有使用Objection的android sslpinning disable命令使用JustTrustMeXposed模块或Frida脚本如Universal Android SSL Pinning Bypass。对于iOS使用SSL Kill Switch或Objection的ios sslpinning disable。高版本Android限制Android 7对用户证书的限制必须将证书安装为系统证书需要Root。问题抓不到任何包手机无法上网。排查检查电脑防火墙是否允许代理端口如8080入站连接检查手机代理设置中的电脑IP地址是否正确尝试关闭电脑和手机的代理/翻墙软件。5.2 逆向分析常见问题问题Jadx反编译失败或代码乱码。排查APK可能使用了代码混淆ProGuard或加固。解决混淆这是正常的。你需要通过字符串搜索、分析调用链来猜测关键类和方法名。关注未被混淆的库如系统库、第三方SDK。加固如果APK被360加固宝、腾讯乐固等加固需要先“脱壳”。这属于高级技术通常需要动态提取Dex文件。可以使用基于Frida的脱壳脚本如FRIDA-DEXDump或Xposed模块如DexHunter在应用运行时从内存中dump出解密后的Dex。问题Frida无法附加到进程提示Permission denied或进程崩溃。排查应用可能具有反调试或反Frida机制。解决尝试使用spawn方式启动应用device.spawn([com.example.app])然后在应用启动的瞬间注入再调用device.resume(pid)恢复运行。修改Frida-server和frida-gadget的文件名、端口号绕过基于特征名的检测。使用frida -U -f com.example.app --no-pause在应用启动时即注入。对于强对抗需要分析应用的反调试代码并用Frida去Hook这些检测函数使其失效。5.3 工具使用效率技巧ADB效率将常用的ADB命令写成脚本.bat或.sh。例如一键清理日志、重启ADB服务、安装并启动应用。Jadx使用善用“导航”面板和“搜索”功能。在“项目”面板中按包名分类查看。使用“查找用法”CtrlAltF7来追踪某个方法或变量的调用关系。Frida脚本管理不要每次都从头写脚本。建立自己的代码片段库将常用的Hook模板如Hook构造函数、重载方法、枚举类保存下来。使用frida -U -l your_script.js com.example.app来快速加载脚本。环境隔离建议使用虚拟机如VMware、VirtualBox来搭建测试环境特别是进行恶意样本分析时。使用快照功能可以随时回滚到干净状态。移动安全是一个需要不断动手实践的领域。工具只是武器真正的功力在于你对移动系统原理、编程语言和网络协议的理解。这份清单为你铺好了路准备好了工具剩下的就是选择一个目标开始你的探索之旅。记住从简单的、未加固的应用开始逐个工具去尝试遇到问题就按上面的思路去排查每一次解决问题的过程都是你技术栈的一次扎实提升。