小柏实战学习安卓图文教程-第五课-识别加固1
本节课主题:现在所有的app都有加壳,所以我们先识别壳,通过ApkScan-PKID 和 Detect It Easy (DIE);
tips: 前三课的知识足够用了,这节课开始就是真正的实战了,不同网络其他教程,都是从简单的开始,然而我们直接从最难的开始;万事开头难,加油!
(文字可能有点多,耐心读,识别加固的思路,经验和常识,你需要记下来的)
1.为了防止脱壳过程中触发某些app的保护机制(包括但不限于删除系统文件,格式化C盘等极端操作),所以需要先安装虚拟机vmware,所有操作都在虚拟机完成,要养成这个好习惯;
教程链接:https://www.cnblogs.com/shaun88/p/19455159
补充一个安装java开发环境的教程:https://www.cnblogs.com/shaun88/p/19457416
2.主流查壳工具对比
|
工具类别 |
工具名称 |
核心特点 |
识别方式 |
适用场景 |
|---|---|---|---|---|
|
专用查壳工具 |
ApkScan-PKID |
专门为APK设计,轻量快速 |
特征匹配+模式识别 |
快速批量检测,初步筛查 |
|
Detect It Easy (DIE) |
支持格式多,检测深度高 |
多引擎特征库扫描 |
深度分析,处理复杂情况 |
|
|
在线查壳平台 |
腾讯云移动安全 |
无需安装,专业分析 |
云引擎分析 |
快速检测,获取详细报告 |
|
Virustotal |
多引擎对比,全球样本 |
57个杀毒引擎扫描 |
了解全球检测情况 |
|
|
逆向集成工具 |
Android Killer |
一体化逆向环境 |
内置查壳模块 |
逆向流程中快速判断 |
|
手动分析方法 |
Lib特征分析 |
最准确,无工具依赖 |
文件结构+特征文件识别 |
精准识别,理解实现原理 |
一、ApkScan-PKID
工具简介
ApkScan-PKID 是专门为安卓APK设计的查壳工具,集成了多种检测引擎,能识别市面上大部分主流加固方案。
下载地址链接:https://pan.quark.cn/s/d8dfb3989875
1.物理机把下载好的压缩包解压后得到的jar,放到虚拟机里面;
物理机把下载好的apk样本文件,放到虚拟机里面;


2.打开ApkScan-PKID文件:
工具文件同级目录,右键, 打开cmd

3.输入命令:
java -jar .\ApkScan-PKID.jar
以此启动pkid
"java -jar .\" 然后tab 键,可以自动补齐命令

4.浏览样本文件:CrackMe.apk

5.正常现象,查不到加固信息,(毕竟实战嘛,怎么可能一下子就让你查到0.o)

总结pkid如下:
使用方法
-
启动jar包:也可以源码启动
-
加载APK:点击"选择APK"或直接将APK拖入窗口
-
查看结果:工具会自动分析并显示检测结果
检测结果解读举例:
================================
APK名称:com.example.app_v2.3.1
文件大小:45.2 MB
加固状态:● 已加固
加固厂商:腾讯乐固
加固版本:V3.7.0
特征识别:tencent.yun
风险等级:中等
================================
优点
-
检测速度快,支持批量
-
针对安卓加固优化
缺点
-
对新型小众加固识别有限
-
无法提供深度分析报告
二、Detect It Easy (DIE) - 专业级选择
工具简介
DIE 是一款功能强大的多格式查壳工具,虽然不是专门为安卓设计,但其强大的特征库能识别大量加固方案。
下载地址: 课件上面的连接给过了,本节课的工具都在里面了;
-
官网:
https://github.com/horsicq/Detect-It-Easy -
支持Windows/Linux/Mac
1.下载好压缩包,压缩包放到虚拟机中,然后在虚拟机中进行解压,就得到了die

2.双击打开die, 右上角打开目录选择样本文件,直接打开



3.解析的信息出来了,别急,慢慢看,实战没你想的那么简单

4.慢慢分析:
4.1.关键发现是扫描结果中出现了"assets/main.apk"。这很特别,正常APK不会在assets里放另一个完整APK。这强烈提示这个APK使用了某种“加壳”保护——外壳APK内部包裹着真正的应用APK。这种技术类似于PC软件的“加壳”,外壳负责解密和加载核心代码。

4.2继续看其他文件流,有很多ELF动态库(.so文件),分布在armeabi-v7a和x86架构目录下,是典型的安卓原生库结构。编译器信息显示主要使用GCC 4.7-4.9,目标系统是Android 4.1.1-5.0,说明这个APK兼容较旧Android版本。

4.3还发现一些特殊文件,比如assets/script.lr、luasocket_x86.zip、publicsuffixes.gz。luasocket暗示可能使用了Lua脚本引擎,这种技术在一些游戏或复杂应用中常见,用于逻辑热更新。

4.4技术画像详解
-
加固模式确认:双APK外壳
最关键的证据是:
Stream: APK(Deflate, "assets/proxy.apk") -
-
这证实了它采用经典的 “双APK”外壳方案:
-
外壳Loader:
CrackMe.apk本身。它的唯一职责是解密、加载并运行assets/proxy.apk。 -
核心应用:
assets/proxy.apk。这才是真正的业务应用,包名为com.nx.proxy。我们的所有逆向目标(如算法、逻辑)都在这里。
-
-
多架构原生保护库(壳的引擎)
扫描结果中大量出现的
libsc*.so(如libsc16.so,libsc17.so,libsc18.so,libsc19.so)是加固厂商提供的核心保护库。它们的作用包括:-
解密与加载:解密
proxy.apk并在内存中动态加载。 -
反调试:防止调试器附加。
-
环境检测:检测是否运行在模拟器、ROOT环境或XPosed/Frida框架下。(这不是一个好消息,感觉我都不一定搞得定了)
-
代码虚拟化/混淆执行:可能对关键代码进行保护。
-
-
依赖的第三方库
-
libopencv_java4.so:OpenCV计算机视觉库。表明核心应用可能涉及图像识别、扫码、人脸检测等功能。 -
libocapi.so:用途不明,可能是某个特定硬件或服务的SDK。 -
libc++_shared.so:C++标准库,说明保护库或核心应用部分使用了C++编写。
-
-
编译环境与目标
-
编译器:GCC 4.6.x, 4.7, 4.8, 4.9。版本较老,可能与壳的开发时期有关,也意味着其对抗现代脱壳工具的能力可能存在已知漏洞(这可能是好消息)。
-
目标系统:Android 4.1.x (Jelly Bean) 到 5.0 (Lollipop)。说明外壳最低兼容到这个版本,但并不代表它不能在新系统上运行。
-
总结die如下:
使用方法
-
启动DIE
-
将APK文件拖入窗口
-
查看"Signatures"选项卡
主要特征
-
支持超过600种文件格式
-
内置多种检测引擎
-
可自定义特征库
-
支持脚本扩展
适合场景
-
需要对APK进行深度分析
-
遇到ApkScan无法识别的加固
-
需要了解详细的文件结构信息
三、在线查壳平台(便捷选择,不过个人觉得用处不大,只能当做交叉验证猜想的准确性而已)
1. Virustotal
网址:https://www.virustotal.com


耐心等待结果后,下载完整报告,有6个报毒,别担心.
这个在线病毒检测结果说明了几点关键信息,但完全不必惊慌,这在逆向分析领域是非常常见的现象。
核心结论:这是一个安全的、用于学习的CrackMe程序
这个检测结果不仅没有危险,反而印证了我们之前所有的技术分析。下面是详细解读:
1. 为什么会被标记为“恶意”?
-
低检出率:65家厂商中只有6家报告,比例极低(约9.2%)。这表明绝大多数顶级安全厂商(如卡巴斯基、ESET、赛门铁克等,从图中看未检出)都认为它是安全的。
-
报毒厂商的特征:图中显示报毒的厂商(如
Ikarus,K7GW)通常以激进、高误报的启发式检测闻名。它们很可能检测到了以下“可疑”特征,而这些特征正是我们分析过的保护机制:-
加固/加壳行为:
CrackMe.apk使用的商业加固技术(libsc*.so等),其代码特征和行为模式(如动态解密、加载隐藏的DEX)与部分恶意软件为了躲避查杀而使用的技术高度相似。安全软件无法区分这是“保护”还是“躲避”,所以会触发警报。 -
敏感权限与高危行为:应用可能申请了网络、存储等权限,并且有从
assets加载并执行代码的行为,这触发了“风险软件”或“潜在不受欢迎程序”的检测规则。
-
-
报毒名称分析:
-
PUP/Android.Malct.xxxxxx:PUP意为“潜在不受欢迎的程序”,不是病毒。 -
Android.Riskware.Agent.OLV:Riskware意为“风险软件”,指其行为有潜在风险。 -
Android.Os.Evo/Trojan:这些是最常见的误报名称,通常指其使用了“进化性”的加壳或混淆技术。
-
简单说:安全软件把它“保护自己代码的技术”误判为“恶意软件隐藏自己的技术”了。
2. 这个结果对我们意味着什么?
-
印证了我们的技术分析:在线检测结果证实了这个APK确实使用了强保护/加壳技术。这和我们发现的
libsc*.so、双APK结构、加密的Lua脚本等完全吻合。它不是一个人畜无害的“Hello World”程序,而是一个有实战价值的练习目标。 -
说明它是“良民”:真正的、广泛传播的恶意软件,在VirusTotal上的检出率会非常高(通常超过40/65)。仅有6家报毒,且是大厂未报、小厂误报的模式,基本可以断定这是一个用于安全研究、CTF比赛或逆向学习的合法CrackMe程序。
-
无需担心安全问题:只要你在虚拟机或专用测试机中运行和分析它(正如我们之前一直强调的),就绝对安全。它的“恶意”行为仅仅是保护自己,不会格式化你的电脑或窃取数据。
总结在线查壳平台如下:
特点:
-
57个杀毒引擎同时扫描
-
全球样本对比
-
历史版本分析
注意事项:
-
上传的文件会被公开
-
不适合敏感应用检测
在线平台优缺点
优点:
-
无需安装软件
-
分析全面专业
-
持续更新引擎
缺点:
-
需要上传APK(隐私风险)
-
依赖网络连接
-
可能有文件大小限制
四、手动解压样本后分析lib目录:
1.将 CrackMe.apk重命名为 .zip并解压。

2.全部解压缩一下,查看assets和lib目录





3.关键发现详解
3.1. 双APK核心结构
assets目录中存在 main.apk 和 proxy.apk,这证实了“外壳加载器+内嵌应用”的经典加固模式。其中:
-
main.apk 很可能是主要的应用程序模块,包含用户界面和核心逻辑。 -
proxy.apk 可能是一个代理或通信模块,用于处理网络请求、与服务器交互或管理插件。
3.2. 脚本驱动与图像识别
-
script.lr:这是一个关键文件。.lr扩展名常见于加密或打包的Lua脚本。这强烈表明该应用的大部分业务逻辑是用Lua编写的,并通过脚本引擎动态执行。逆向的关键之一就是解密和分析此脚本。 -
eng.traineddata:这是 Tesseract OCR 引擎的英文语言训练数据文件。这意味着应用具备文字识别(OCR)功能,例如从图片中提取文字、验证码识别等。 -
luasocket_arm.zip与luasocket_x86.zip:这是Lua的网络库luasocket,针对ARM和x86架构分别打包。它使得Lua脚本能够进行网络通信。
3. 多架构原生保护
lib目录下包含 armeabi-v7a(32位ARM设备) 和 x86(模拟器) 两个子目录,其中应包含加固厂商的 libsc*.so 系列保护库。这确保了应用在真机和模拟器上都能运行并被保护。
4.关键发现与深度分析
-
保护核心 (
libsc*.so):-
文件极小(5-6KB),这极不寻常。通常,完整的加解密逻辑库不会这么小。
-
推测:这四个文件可能只是“桩”模块或“加载器”。它们的主要功能是:
-
动态加载隐藏在
assets/目录中(如文件0,1,2)的真正、体积更大的保护逻辑。 -
实现反调试、环境检测等轻量级检查。
-
提供一个极简的接口,供外壳的
classes.dex调用,从而启动整个保护流程。
-
-
-
功能核心 (
libopencv_java.so):-
体积巨大(armeabi-v7a版10MB,x86版36MB),这证实了OpenCV计算机视觉库被完整打包。
-
作用:这是实现二维码识别、图像特征匹配、人脸检测、图片预处理等核心功能的引擎。这个CrackMe的挑战很可能围绕“图像识别”展开。
-
-
专用OCR库 (
libocapi.so):-
结合
assets/eng.traineddata文件,说明应用除了通用的OpenCV,还集成了一款专用的OCR引擎,用于高精度文字提取。这可能是验证的另一个维度。
-
-
辅助模块 (
libassist.so):-
从名称推测,可能是实现某些工具函数、算法或作为
libopencv_java.so与libocapi.so之间的桥梁。
-
-
多架构支持:
-
同时提供
armeabi-v7a(32位真机) 和x86(模拟器) 版本,说明开发者考虑了app在模拟器中使用的场景。x86 版本的libopencv_java.so更大,是因为模拟器环境不同。
-
所以这是一个典型的、多层次的、功能指向明确的商业级加固样本,其复杂性和完整性远超普通“破解练习”,极具学习和实战价值。
好的这节课就先讲这两个工具,简单总结一下:
五、实战查壳流程建议
新手推荐流程
-
第一步:使用ApkScan-PKID快速扫描
-
第二步:使用Detect It Easy (DIE)快速扫描并分析
-
第三步:如有疑问,手动解压检查lib目录
专业分析流程
-
初步筛查:ApkScan-PKID或DIE
-
在线验证:上传到Virustotal对比
-
手动确认:解压分析文件结构
-
深度分析:使用专业工具进一步分析
查壳结果记录表
建议建立自己的样本库,记录查壳结果:
|
应用名称 |
版本 |
文件大小 |
加固状态 |
加固厂商 |
特征文件 |
检测工具 |
|---|---|---|---|---|---|---|
|
应用A |
v3.2.1 |
68MB |
已加固 |
腾讯乐固 |
libmain.so |
ApkScan |
|
应用B |
v5.1.0 |
42MB |
未加固 |
- |
- |
手动验证 |
|
应用C |
v2.0.3 |
35MB |
已加固 |
360加固 |
libjiagu.so |
DIE |
六、重要安全建议
1. 虚拟机操作
强烈建议在虚拟机中进行所有逆向操作:
- 使用VMware或VirtualBox创建隔离环境
- 定期创建快照,方便恢复
- 避免在主力机上操作
2. 样本管理
-
建立独立的样本库目录
-
按加固类型分类存放
-
记录每个样本的检测结果
-
定期更新样本库
3. 工具更新
-
定期更新查壳工具
-
关注新的加固技术
-
参与安全社区讨论
七、常见问题解答
Q1:所有工具都检测不到加固,是不是就没加固?
不一定。可能是:
-
使用了新型或小众加固方案
-
加固特征被隐藏或修改
-
工具特征库未更新
解决方法:手动解压分析,特别关注lib目录和AndroidManifest.xml。
Q2:不同工具检测结果不一致怎么办?
正常现象。不同工具的检测引擎和特征库不同。
建议:
-
以手动分析结果为准
-
使用多个工具交叉验证
-
参考在线平台的检测结果
Q3:如何判断加固强度?
参考指标:
-
加固厂商:主流厂商>小众厂商
-
特征复杂度:多层保护>单层保护
-
反调试措施:有反调试>无反调试
-
代码混淆程度:高级混淆>简单混淆
八、学习资源推荐
学习社区
-
吾爱破解论坛(www.52pojie.cn)
-
看雪学院(www.kanxue.com)
-
GitHub相关开源项目
样本获取
-
应用商店历史版本
-
第三方APK下载站
-
开源应用(对比加固前后)
九、总结
查壳是安卓逆向的第一步,也是至关重要的一步。通过本文介绍的工具和方法,我们可以:
-
快速判断APK是否被加固
-
准确识别加固厂商和类型
-
选择合适的逆向策略和方法
记住:没有完美的加固,只有还没找到的漏洞。掌握查壳技能,是我们逆向之路上的第一把钥匙。

浙公网安备 33010602011771号