开发者社区> 玄学酱> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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(转载)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android Studio进行APP设计开发之矢量图及XML文件转换
Android Studio进行APP设计开发之矢量图及XML文件转换
0 0
Android studio开发APP时设置更改启动时的主界面程序
Android studio开发APP时设置更改启动时的主界面程序
0 0
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案
0 0
Android开发:使用Java对手机截图图片进行任意区域的颜色对比度处理操作
开发项目过程中,对于手机屏幕截图,需要对获取到的截图的任意部分进行区域颜色对比度的识别操作,由此判定任意指定区域是否满足某对比度基本标准,但是该功能在网上任何地方都没有找到过Java方面的代码,于是根据RGB转换测试的原理:即获取每个像素点的RGB,通过RGB对比度定义公式进行像素点的集合换取。
0 0
开发android项目的常用jar包
开发android项目的常用jar包
0 0
Android Studio开发Android APP
Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。 Android Studio 主窗口由下图标注的几个逻辑区域组成:
0 0
开发时遇到监听的事件处理机制和SoundPool播放音效解决方法以及外部类的使用【Android】
开发时遇到监听的事件处理机制和SoundPool播放音效解决方法以及外部类的使用【Android】
0 0
【Android】开发Android应用时对于Handler消息传递与缓存问题深入运用and理解
【Android】开发Android应用时对于Handler消息传递与缓存问题深入运用and理解
0 0
ANDROID开发之http调试常见错误
ANDROID开发之http调试常见错误
0 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
文章
问答
文章排行榜
最热
最新
相关电子书
更多
手机卫士性能优化方案-Android篇
立即下载
Android内存泄露自动化链路分析组件——Probe
立即下载
Android内存泄漏自动化链路分析组件Probe
立即下载