Android木马揭秘之用户定位技术的实现

本贴最后更新于 2873 天前,其中的信息可能已经事过景迁

这几年安卓系统的普及速度可谓迅猛,一时间各式各样的设备都承载着安卓系统,手机、平板、机顶盒等都忠实地成为了安卓系统的用户。由于安卓系统在移动设备上的使用率最高,而移动设备上存储的数据往往涉及到个人隐私,如手机通讯录、短信内容、拍摄照片、阅读书目、保存文档等,有时更会涉及到经济利益,这诱惑着一些利益集团开始制作基于安卓系统的远程控制程序,即安卓系统木马。首个安卓系统木马应属 2010 年出现的“Trojan-SMS.AndroidOS.FakePlayer.a”,这是一个以扣取用户手机话费为目的的盈利性安卓系统木马。随着需要的发展,单纯的盈利性木马已经不是重点,用户的隐私数据才是核心,
尤其是具有用户行为监视性的木马最受关注。所谓“用户行为监视性的木马”就是指该类安卓木马能够监视用户的所在、所说、所做。“所在”即用户所处位置在哪里;“所说”即通话内容,聊天内容;“所做”即在操作什么程序,在干什么活动。这一类的木马由于涉及到用户核心利益,往往经济价值较大,多用于私人侦探、商业窃密等领域,平时很难见到,更不要说了解其核心代码、实现机制。为此,本文将逐步向读者揭秘这些高级安卓木马的核心实现技术,帮助大家更好地了解这些木马实现技术,从而做好对个人隐私的保护,防范该类木马的入侵。本文旨在讨论技术,凡利用本文技术进行违法活动的作者与杂志概不负责。
这里首先要向大家揭秘的是高级安卓木马是如何实现对用户定位的,即如何知道用户的“所在”。如果你利用百度搜索安卓定位原理,会发现百度给出的解释不外乎是利用 GPS 或者手机基站定位,甚至结合 Wi-Fi 信号。原理不错,但这只是原理,要想具体实现定位可是有一定难度的。以手机基站定位为例,现在传统的实现方式是利用 AndroidSDK 中的 API(TelephonyManager)获得 MCC、MNC、LAC、CID 等信息,然后通过 Google 的 API 获得所在位置的经纬度,最后再通过 GoogleMap 的 API 获得实际的地理位置。这其中,MCC 即 MobileCountryCode,移动国家代码(中国的为 460);MNC,MobileNetworkCode,移动网络号码(中国移动为 00,中国联通为 01);LAC,LocationAreaCode,位置区域码;CID,CellIdentity,基站编号,是个 16 位的数据(范围是 0 到 65535)。由于谷歌存储了 MCC、MNC、LAC、CID 等信息,一旦我们能够获取当前移动设备所在基站的这些数据,就可以通过向谷歌的“http://www.google.com/loc/json”网址发送查询数据获取基站所在经纬度。
得到经纬度后,我们将其转换为实际地址,这需要向谷歌的“http://maps.google.cn/maps/geo?key=abcdefg&q=”发送经纬度数据,最终获得移动设备所在实际地址。这样的实现代码在网上很多,你会发现它们都不好使了,为什么呢?因为“http://www.google.com/loc/json”这个网址现在已经不能访问了。这个可悲的消息使得我们意识到必须采用一种相对稳妥的方法来实现移动设备定位。在对某个安卓木马程序做逆向分析时,发现一种新的基于手机基站定位实现技术。当然在这之前,细心的读者会发现为什么我们一直在详细讲解基于手机基站的定位实现,而不采用最为常用的 GPS。因为手机这样的移动设备一旦进入到房屋内等封闭场所,GPS 信号就衰减为 0,不足以实现定位,而手机信号多半都是存在的,所以基于手机基站的定位方式更为稳妥,这就是为什么很多高级安卓木马会采用该方式实现定位的原因。言归正传,我们发现的这个安卓木马采用了基于百度提供的定位 SDK。根据百度官方的解释:百度 Android 定位 SDK 支持 Android1.5 以及以上设备,提供定位功能,通过 GPS、网络定位(WIFI、基站)混合定位模式,返回当前所处的位置信息;反地理编码功能:解析当前所处的位置坐标,获得详细的地址描述信息。如此丰富的技术支持,难怪该安卓木马会采用这个 SDK。
百度 Android 定位 SDK 的使用非常简单,首先在百度的官网下载最新的库文件,将 liblocSDK.so 文件拷贝到 libs/armeabi 目录下,将 locSDK.jar 文件拷贝到工程根目录下,并在工程属性->JavaBuildPath->Libraries 中选择 AddJARs,选定 locSDK.jar,确定后返回,就可以在程序中使用百度 Android 定位 SDK 了。在代码实现时,首先需要初始化 LocationClient 类,其代码如下:
publicLocationClientmLocationClient=null;
publicBDLocationListenermyListener=newMyLocationListener();
publicvoidonCreate(){
mLocationClient=newLocationClient(this);
//声明 LocationClient 类
//注册监听函数
mLocationClient.registerLocationListener(myListener);
}
接着实现 BDLocationListener 接口。BDLocationListener 接口有一个方法,作用是接收异步返回的定位结果,参数是 BDLocation 类型参数。其代码如下:
publicclassMyLocationListennerimplementsBDLocationListener{
@Override
publicvoidonReceiveLocation(BDLocationlocation){
if(location==null)
return;
StringBuffersb=newStringBuffer(256);
sb.append("time:");
sb.append(location.getTime());
sb.append("\nerrorcode:");
sb.append(location.getLocType());
sb.append("\nlatitude:");
sb.append(location.getLatitude());
sb.append("\nlontitude:");
sb.append(location.getLongitude());
sb.append("\nradius:");
sb.append(location.getRadius());
if(location.getLocType()==BDLocation.TypeGpsLocation){
sb.append("\nspeed:");
sb.append(location.getSpeed());
sb.append("\nsatellite:");
sb.append(location.getSatelliteNumber());
}elseif(location.getLocType()==BDLocation.TypeNetWorkLocation){
sb.append("\naddr:");
sb.append(location.getAddrStr());
}
logMsg(sb.toString());
}
}
接着设置参数。设置定位参数包括定位模式(单次定位,定时定位),返回坐标类型,是否打开 GPS 等。实现代码如下:
LocationClientOptionoption=newLocationClientOption();
option.setOpenGps(true);
option.setAddrType("detail");
option.setCoorType("gcj02");
option.setScanSpan(5000);
mLocClient.setLocOption(option);
最后,发起定位请求。请求过程是异步的,定位结果在上面的监听函数中获取,代码如下:
if(mLocClient!=null&&mLocClient.isStarted())
mLocClient.requestLocation();
else
Log.d("LocSDK_2.0_Demo1","locClientisnullornotstarted");
实际测试效果如图 1 所示。从图中可以看出,演示程序准确定位到了我此刻手机所在的位置,定位精度在百米内。木马程序一旦使用了这样的技术,完全可以实现对用户所在的监视,你此刻是不是有一种毛骨悚然的感觉呢?
安卓木马分析图
Android 木马揭秘之用户定位技术的实现 移动安全

定位代码实现后,就可以利用移动网络将用户数据时时上传至控制端网站,由控制端用户查看。结合以往数据,就可以勾画出一个人一段时间内的行踪,对被控制者来说,此刻的手机或者其它移动设备就成为了出卖自己的第一元凶。定位代码的成功实现,只是高级安卓木马程序的一部分功能,随后的工作还有很多,我会陆续将这些核心技术向读者一一揭秘。

危险漫步黑客博客

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • huomingfei

    支持,写的挺有用的,正好需要

推荐标签 标签

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 281 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 8 关注
  • V2Ray
    1 引用 • 15 回帖 • 2 关注
  • sts
    2 引用 • 2 回帖 • 154 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 694 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    53 引用 • 85 回帖
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 16 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8207 回帖 • 2 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 29 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 12 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 110 关注
  • OnlyOffice
    4 引用 • 20 关注
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 6 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    42 引用 • 25 回帖 • 1 关注
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    207 引用 • 2031 回帖 • 1 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    712 引用 • 1174 回帖 • 152 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 1 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    320 引用 • 1679 回帖 • 2 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 597 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖 • 1 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    170 引用 • 802 回帖 • 1 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖 • 1 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 49 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖 • 1 关注