2026/10/19 16:25:34

伪“天眼查询系统”恶意样本分析:从静态拆解到全场景防护

伪“天眼查询系统”恶意样本分析:从静态拆解到全场景防护 这段时间做恶意样本分析手里拿到一个安卓应用名字挺正经叫“天眼查询系统”。压缩包一看才3.99MB我当时就想正规工具类应用哪有这么小的。果不其然装进隔离测试机里跑了一圈后台动作一点不老实。这篇文章就把这个样本从静态、动态、网络行为三个方向拆开聊再讲讲个人和企业两个层面到底怎么防。不管是做安全运维的还是普通安卓用户都可以拿这套思路去对比判断自己手机里有没有类似问题。1. 恶意样本初步画像与威胁建模1.1 3.99MB体积里藏了什么APK本质上是一个Zip压缩包体积大小能透露出很多信息。3.99MB对于一个带界面、带图标、还叫“查询系统”的安卓应用来说小得反常。拆开看资源文件极少图标就一两张代码结构非常单薄没有大型离线数据库也没有明显引擎库。这说明它大概率不是个正经的“全功能查询工具”而是一个轻量级Loader也就是先把宿主App装进来后续真正的恶意模块要么从远程服务器下载要么藏在一个加密的so库里等运行时释放。体积小对攻击者来说有三个好处下载快传播方便用户看到“不到4MB”会天然觉得轻量无害即使被杀毒软件查杀换壳重打包的成本也低。对比一下日常正常App最基础的查询工具也需要几十MB的资源、UI框架、第三方SDK3.99MB这种规模往往意味着开发者在刻意“做减法”只留了最核心的恶意逻辑。分析这类样本时我会先确认文件Hash记录MD5和SHA256然后看签名信息。很多恶意样本用的是测试签名或者自签名签名时间异常这些都能作为初步研判依据。1.2 伪装取名背后的心理套路“天眼查询系统”这个名字很有迷惑性。它故意往“监控、查询、系统服务”的方向靠用户一看到会觉得这是某个官方机构或者运营商推出的工具。攻击者再配合仿冒图标、伪造的版本号和开发者名称很容易骗过非技术用户。这类样本经常通过短信链接、社交群聊、网页弹窗传播话术一般是“点击链接安装查询系统可查违章/查订单/查报告”。用户抱着试一试的心态安装后恶意App会要求一堆敏感的权限比如读取短信、通讯录、位置、录音权限等。很多人看不懂权限含义直接点“允许”数据就这么流出去了。真实场景里就有这样的案例一位用户的手机在安装“查询系统”之后银行卡里的钱被分笔转走。后来调查发现恶意App把短信验证码实时转发到了攻击者的服务器银行App的登录短信和转账验证码全部被截获。这就是为什么短信权限在恶意样本里被列为“高危权限”的核心原因。1.3 威胁建模完整攻击路径把这类样本放在威胁模型里看典型的攻击链是诱导安装 - 仿冒图标和界面 - 诱骗授权 - 窃取通讯录与短信 - 回传C2服务器 - 接收远程指令 - 实施二次欺诈。本地权限是入口网络通信是生命线。只要切断其中一个环节攻击链就会断裂。这也决定了防御思路不能只看单点必须把终端、网络、账号三个层面一起管住。对企业来说风险不止是个人隐私泄露。员工手机一旦感染通讯录、微信记录、办公邮箱的验证码短信都可能被窃取。再往下攻击者可能拿着这些信息发起钓鱼攻击甚至获取企业内网系统的初始访问权限。所以员工自携带设备BYOD场景下移动威胁防护不能可有可无。2. 静态分析从APK结构到代码逻辑2.1 解包第一步重点盯Manifest静态分析的第一步是把APK用反编译工具解开重点查看AndroidManifest.xml和DEX文件目录结构。Manifest是整个应用的“身份证”里面写了权限、组件、启动入口、targetSdkVersion。恶意样本的Manifest通常有几个特征申请的权限和核心功能完全不匹配注册了多个Service和BroadcastReceivertargetSdkVersion被人为调低。这里解释一下targetSdkVersion的作用安卓系统从6.0开始引入运行时权限App在安装时没法一次性拿完全部敏感权限必须在调用时弹窗申请。但是如果targetSdkVersion低于23系统会默认走旧的安装授权逻辑用户安装时看到一大堆权限只能整体接受。很多恶意软件故意把版本号压到22就是为了绕过运行时权限机制这是非常典型的“降级攻击”手法。2.2 权限矩阵与危害对照我见过不少恶意样本的权限申请清单来来回回就这些高危项整理成一张对照表很有参考价值。权限正常场景恶意场景READ_SMS / RECEIVE_SMS短信验证码自动填充转发验证码、窃取短信、绕过双因子认证READ_CONTACTS社交推荐批量上传通讯录用于精准诈骗ACCESS_FINE_LOCATION导航、打卡持续跟踪用户位置并回传RECORD_AUDIO录音笔记环境窃听攻击者远程启动录音SYSTEM_ALERT_WINDOW悬浮窗界面劫持、覆盖钓鱼框REQUEST_INSTALL_PACKAGES应用内更新静默安装后续恶意模块判断一个应用是否可疑不要只看它申请了什么权限要看“权限和功能之间对不对得上”。一个叫“查询系统”的工具根本没有语音功能却申请录音权限没有社交功能却申请通讯录这基本就是恶意软件或流氓SDK。2.3 入口点追踪恶意行为藏在哪里解包之后主入口MainActivity是第一个要看的类。恶意样本通常在onCreate里只展示一个简单页面可能是空页面、加载中提示或“服务未开启”的占位文案背地里立即启动后台Service。反编译视图下恶意代码往往会做这几件事使用字符串加密隐藏URL和命令通过反射调用系统API动态加载Dex或so文件。字符串加密是个明显信号。正常商业App做字符串混淆的也有但恶意样本更倾向于把所有关键配置都藏起来。比如硬编码的C2服务器地址会用异或、Base64变种或AES加密等到运行时再解密。分析时我一般会盯着三类代码初始化逻辑里调用了哪些敏感API动态加载的文件来源路径在哪里哪些位置触发了TelephonyManager、SmsManager、AudioRecord等接口。这三个点就是样本的核心恶意行为区域。2.4 加壳与混淆对抗3.99MB的APK完全有能力内置一个加固壳。判断是否加壳很简单把DEX文件拖进代码分析工具如果只能看到壳的入口逻辑或者classes.dex内容极少没有任何业务方法那基本就是加壳了。这时候静态分析就不够用了。思路有两种一个是脱壳借助内存Dump把运行时的真实DEX抓出来另一个是动态调用直接在运行过程中用Hook框架拦截关键函数观察参数和返回值。恶意样本还会做多重对抗比如检测调试器、检测模拟器、检测Root环境。应对方法是在一台无Root标记但带有Hook能力的测试设备上运行或者先用流量侧分析绕开对抗逻辑。3. 动态运行与通信行为拆解3.1 隔离测试环境这么搭动态分析的核心诉求是“看它真正做了什么”。我习惯准备一台不常用的安卓真机恢复出厂设置后关闭自动更新接入一个隔离的测试WiFi网络侧单独做流量镜像和DNS日志。模拟器虽然方便但很多恶意样本能通过Build.FINGERPRINT、传感器列表、CPU指令集等特征识别模拟器一旦发现测试环境就立刻休眠行为全藏起来。真机的指纹更“真实”更容易触发恶意行为。测试环境中还要预置一些模拟数据通讯录放几十个联系人短信放几条验证码记录相册放几张图片账号里挂一个测试邮箱。没有诱饵数据样本偷走了也不知道。这一步是动态分析的必备动作。然后运行样本全程录屏加抓包。重点关注安装后图标是否消失、首次启动时申请权限的顺序、后台服务有没有自动拉起、网络请求是否立刻产生。3.2 现场行为记录看起来什么都没干实际跑这个样本的时候界面就是一个静态页面上面写着“系统加载中请稍后”。但同一时间后台已经完成了三件事读取通讯录读取最近短信收集设备基础信息IMEI、手机型号、安卓版本、MAC地址。这些数据被组织成一段JSON格式的字符串通过HTTP POST请求发送到了远程地址。这里有个值得注意的细节样本并没有直接请求所有权限而是分批诱骗。首次打开只申请“通讯录”和“存储空间”等用户放松警惕后续再弹出“短信”和“悬浮窗”权限。这种渐进式授权策略比一次性弹窗更容易骗过普通用户。除了数据回传这个样本还注册了一个开机广播接收器。也就是说即使用户重启手机应用仍然会在系统启动完成后自动运行继续做后台活动。3.3 网络通信还原C2在很多样本里是命脉恶意样本的远程服务器地址通常有三种获取方式明文硬编码、加密字符串运行时解密、通过DNS解析动态获取。第三种更隐蔽攻击者可以随时切换IP避免被封堵。通信协议方面HTTP是最常见的因为简单稳定高级一点的会用HTTPS并开启证书校验防止流量被劫持解密。部分银行木马还会在访问C2之前先发送“心跳包”用来标识存活状态和接收远程命令。心跳包往往很短但频率固定在流量日志里很好识别。分析网络行为时我最关注三个字段请求的URL路径、POST的数据字段名、返回包的数据长度。恶意流量的字段名常常是固定的比如“dev_id”“contacts”“sms_list”看到这种关键词组合基本能锁定恶意行为。3.4 持久化与自我保护机制恶意样本最讨厌的地方在于“卸不掉”。这个样本在运行后尝试激活设备管理器权限激活成功之后系统设置里的“卸载”按钮会变灰普通用户根本无法直接删除。此外它还可能利用多进程守护一个进程被kill另一个进程立即重新拉起。自我保护方面恶意代码会检查自己是否运行在模拟器、是否有Root权限、是否被调试、是否被安全软件监控。如果发现异常就不执行恶意行为故意“装死”。这给动态分析带来了不少麻烦也解释了为什么有些用户装了安全软件却什么都没扫出来。4. 全场景防护方案落地4.1 个人用户安装前、安装后、处置三步走个人用户不需要掌握逆向分析只需要管好安装源头和权限入口。安装前只从官方应用市场下载App。短信里的下载链接、聊天群里发来的APK安装包、二维码扫码安装包都是高危渠道。看到一个“查询工具”让你扫码安装先停一下去官方应用市场搜一搜有没有同款。伪造应用不会出现在官方市场正规人员也不会用个人链接发安装包。安装时屏幕上的每个权限都要过一眼。工具类应用要录音、要短信、要通讯录直接拒绝安装。还可以在手机设置里开启“安装时校验应用”或“未知来源安装验证”能拦截大部分恶意包。安装后如果发现应用图标消失、手机开始自动安装其他App、电量断崖式下降、套餐流量莫名其妙增加就要警惕了。处置流程如下立刻开启飞行模式切断网络防止数据继续外传。进入手机设置查看应用列表找到可疑应用。如果卸载按钮是灰色先进入“设备管理应用”取消激活。卸载可疑应用后用安全软件做全盘扫描。观察一段时间确认没有残留的闹钟服务或后台进程。如果手机内有支付类App账号密码立即改密码并解绑设备。最后再补一句备份资料时不要把App数据和系统设置一起备份那样可能把恶意软件残留也备份进去。只备份照片、文档等非执行类文件恢复后再手动装应用。4.2 企业环境把移动设备管起来企业层面的防护重点不是“某个人手机中毒”而是“移动设备成为攻击跳板”。很多企业把移动设备管理MDM/UEM当摆设只用来发邮件和打卡实际上它完全可以通过策略限制恶意应用。核心策略有四条下发应用白名单只允许安装企业商店内的签名应用。员工私自安装外部APK时系统直接阻止并告警。检测设备合规状态发现Root、开启未知来源等风险行为时自动隔离企业应用访问。对访问内网的移动设备启用双因子认证和动态设备指纹校验防止用窃取的凭证登录。在网关侧同步监控移动终端的DNS请求和流量日志像“心跳包”这类固定频率的小流量特征可以直接配置成告警规则。最容易被忽视的是员工安全意识培训。企业可以定期发送模拟钓鱼短信统计点击率再对高危人群做专项教育。技术手段能挡住一部分攻击但最终能不能赢还是看人。4.3 应急响应感染后的处置顺序如果确认设备感染了类似样本处置顺序非常关键顺序反了会丢失证据或造成数据二次泄露。整体流程是断网 - 备份 - 取证 - 隔离 - 清除 - 恢复观察。先用飞行模式断网这一步最重要目的不是“让手机休息”而是切断恶意样本与C2的通信防止数据持续外泄。其次把短信、通讯录、图片等重要文档通过数据线拷贝到电脑作为后续判断数据泄露范围的依据。接着进入安全模式在安全模式下第三方应用不会自动启动便于卸载。如果应用激活了设备管理器先在“设置 - 安全 - 设备管理应用”里取消勾选再卸载。卸载之后不要立刻恢复网络先观察一小时看是否有进程自动重新安装。必要时恢复出厂设置这是最彻底的方案。4.4 开发与自检别让你的应用被“重打包”应用被恶意重打包是很多正规开发者遇到的糟心事。攻击者把正常APK下载下来反编译后植入恶意代码再重新签名发布到非官方渠道。用户装了之后出了问题锅还要原作者背。开发者可以做几件事降低风险启用签名校验运行时验证签名是否被替换核心逻辑放到Native层并混淆加固对敏感接口做完整性校验检测重打包痕迹发布前用自动化检测工具扫描权限和敏感API调用把“过度权限”问题提前暴露。这里有一个判断标准可以参考如果最终APK体积明显缩水或者代码里存在高频率的反射调用和动态加载建议重点审查。正规应用不需要隐藏那么多行为而恶意应用恰恰相反。5. 常见问题与排查技巧实录5.1 为什么安全软件没扫出来遇到“天眼查询系统”这类样本单靠某一款手机管家扫不出来太正常了。恶意样本会检测设备上安装的安全软件包名一旦发现就暂停恶意行为有些样本还用壳保护静态特征匹配不出来。所以排查时不要只依赖一款软件可以把APK文件提取出来上传到多个病毒引擎在线扫描再结合包名、权限、流量行为综合判断。5.2 用包名和Hash怎么初判拿到一个疑似应用的APK先算它的MD5和SHA256。SHA256因为抗碰撞性强在威胁情报平台上用得最多。再解包看Manifest里的application label、图标、包名。恶意样本的包名总是起得很像官方比如“com.system.query”“com.mobile.guard”但开发者名是一堆随机字符串没有历史版本记录。遇到这种情况基本可以判定为恶意或高风险应用。5.3 为什么卸载按钮是灰色的最常见原因是恶意应用把自己激活成了设备管理器。解决方案在设置里找到“安全”或“生物识别与密码”选择“设备管理应用”把可疑应用的开关关掉。如果找不到这个入口或者应用隐藏菜单就进入安全模式再操作。某些更顽固的样本会注册为系统管理员需要先清除它的活动组件再执行卸载。5.4 怎么判断应用是不是在钓鱼部分恶意样本会通过WebView加载一个仿冒的登录页诱导用户输入账号密码。判断方法很简单正规的查询工具不会让你填银行卡号、身份证后四位、交易密码。如果一个“查询系统”界面跳出来要这些信息立刻退出并卸载。输入任何密钥之前先确认页面域名或者包名是不是官方渠道。5.5 实际分析中积累的几个经验我处理这类样本时有个习惯先看Manifest里面有没有SYSTEM_ALERT_WINDOW权限也就是悬浮窗权限。这个权限在银行木马和界面劫持类样本里出现频率极高一旦出现后台基本伴随着伪装窗口和点击劫持。第二步看有没有RECORD_AUDIO权限有录音权限的样本危害等级直接上调。第三步如果在静态阶段遇到壳不急着脱壳先抓包看通信流量很多时候C2地址就直接暴露在明文请求里比脱壳快捷得多。如果遇到HTTPS加密流量要看样本里有没有证书固定逻辑。没有证书固定的可以用抓包工具直接做中间人解密有证书固定的就要用Hook框架动态修改校验结果或者直接定位DNS解析结果把远程地址重定向到本地伪造服务器观察样本下一步行为。这个思路比硬啃壳要省力得多。最后再说一个经验分析任何可疑App第一件事永远是先断网。不要直接点开看界面先把权限、组件的清单导出来把诱饵数据准备好然后再运行。顺序一旦错了恶意样本可能已经把数据传输出去后续再怎么分析都是追着尾巴跑。做安全防护和做恶意样本分析逻辑是一样的——永远假设对方在执行不给它任何多余的机会。