Android木马如何实现用户定位技术?

简介:

这几年安卓系统的普及速度可谓迅猛,一时间各式各样的设备都承载着安卓系统,手机、平板、机顶盒等都忠实地成为了安卓系统的用户。由于安卓系统在移动设备上的使用率最高,而移动设备上存储的数据往往涉及到个人隐私,如手机通讯录、短信内容、拍摄照片、阅读书目、保存文档等,有时更会涉及到经济利益,这诱惑着一些利益集团开始制作基于安卓系统的远程控制程序,即安卓系统木马。

首个安卓系统木马应属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.weixianmanbu.com/”这个网址现在已经不能访问了。这个可悲的消息使得我们意识到必须采用一种相对稳妥的方法来实现移动设备定位。在对某个安卓木马程序做逆向分析时,发现一种新的基于手机基站定位实现技术。当然在这之前,细心的读者会发现为什么我们一直在详细讲解基于手机基站的定位实现,而不采用最为常用的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(" errorcode:");

sb.append(location.getLocType());

sb.append(" latitude:");

sb.append(location.getLatitude());

sb.append(" lontitude:");

sb.append(location.getLongitude());

sb.append(" radius:");

sb.append(location.getRadius());

if(location.getLocType()==BDLocation.TypeGpsLocation){

sb.append(" speed:");

sb.append(location.getSpeed());

sb.append(" satellite:");

sb.append(location.getSatelliteNumber());

}elseif(location.getLocType()==BDLocation.TypeNetWorkLocation){

sb.append(" addr:");

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木马揭秘之用户定位技术的实现 移动安全

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





====================================分割线================================


本文转自d1net(转载)

目录
相关文章
|
2天前
|
开发工具 Android开发 数据安全/隐私保护
探索iOS与安卓应用开发的异同:技术、工具和市场趋势
在移动操作系统的广阔舞台上,iOS和安卓两大主角各自演绎着怎样的精彩?本文将深入剖析这两大平台在应用开发过程中的技术差异、开发工具的选择以及面对的市场环境。通过数据支撑和案例分析,我们将一窥这两个系统如何影响开发者的决策,并探讨它们未来的发展方向。
|
5天前
|
存储 缓存 Java
Android性能优化:内存管理与LeakCanary技术详解
【7月更文挑战第21天】内存管理是Android性能优化的关键部分,而LeakCanary则是进行内存泄漏检测和修复的强大工具。
|
23天前
|
机器学习/深度学习 人工智能 文字识别
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
文本,文字扫描01,OCR文本识别技术展示,一个安卓App,一个简单的设计,文字识别可以应用于人工智能,机器学习,车牌识别,身份证识别,银行卡识别,PaddleOCR+SpringBoot+Andr
|
1月前
|
Android开发
技术经验分享:Android前后台切换的监听
技术经验分享:Android前后台切换的监听
19 2
|
17天前
|
安全 搜索推荐 Android开发
安卓与iOS的较量:技术深度与用户体验的博弈
在数字时代的浪潮中,安卓与iOS两大操作系统如同巨人般主宰着移动设备的生态。本文将深入探讨这两大系统在技术架构、安全性、应用生态和用户体验等方面的差异,并结合最新的市场数据和技术发展动态,为读者呈现一个全面而深入的分析视角。我们将看到,尽管安卓以其开放性和高度可定制性赢得了广泛的市场份额,iOS则以其卓越的用户体验和强大的品牌忠诚度构建了坚固的护城河。两者的竞争不仅推动了技术的快速进步,也不断塑造着我们对智能手机的期待和想象。
|
25天前
|
5G Android开发 iOS开发
探索iOS与安卓在移动操作系统领域的技术竞争与合作
本文将深入探讨iOS和安卓这两大移动操作系统的技术竞争与合作。通过对市场份额、用户忠诚度、技术创新、生态系统建设以及安全性等方面的比较,我们将揭示这两个系统各自的优势和挑战。同时,我们还将分析它们如何通过技术合作来推动整个移动行业的发展。
|
29天前
|
算法 安全 Android开发
新一代安卓系统:技术演进与用户体验革新
在移动操作系统领域,安卓系统一直处于不断演进的过程中。本文探讨了新一代安卓系统的技术创新,以及这些创新如何为用户带来全新的体验和功能。
18 0
|
29天前
|
编解码 开发工具 Android开发
技术心得:打造自己的智能投屏体验——Android投屏开发入门
技术心得:打造自己的智能投屏体验——Android投屏开发入门
26 0
|
29天前
|
Java API Android开发
技术经验分享:Android源码笔记——Camera系统架构
技术经验分享:Android源码笔记——Camera系统架构
24 0
|
1月前
|
开发工具 Android开发
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
技术经验分享:Android编译命令m、mm、mmm区别及工程搭建示例
19 0