2011-8-15 13:24:28 阅读24 评论0 152011/08 Aug15
android是基于linux的操作系统,Google为了安全性的考虑,将每个应用列为独立的用户,用OS层的权限控制来保证应用间内容的可控。Linux下的root用户有最大的权限,有些涉及到文件系统或者底层的操作只能通过这种超级权限才能进行。
要开发基于root的应用程序,需要目标机上装有superuser及busybox软件。前者是提权命令“su”的管理器,后者有基本的linux命令。
网上有段代码,用于检测手机是否能获取到root权限:
1: public static boolean isRooted() {
2: Process p; 3: try {
4: // Preform su to get root privledges
5: p = Runtime.getRuntime().exec("su");
6: // Attempt to write a file to a root-only
7: DataOutputStream os = new DataOutputStream(p.getOutputStream());
8: os.writeBytes("echo . >/system/root.txt\n");
9: os.writeBytes("rm /system/root.txt\n");
10: // Close the terminal
11: os.writeBytes("exit\n");
12: os.flush(); 13: try {
14: p.waitFor(); 15: if (p.exitValue() != 255) {
16: return true;
17: } else {
18: Log.e(T, "Process Exit Value is : " + p.exitValue());
19: return false;
20: } 21: } catch (InterruptedException e) {
22: Log.e(T, e.getMessage(), e); 23: return false;
24: } 25: } catch (IOException e) {
26: Log.e(T, e.getMessage(), e); 27: return false;
28: } 29: } 1: // check for root on device
2: if (!RootTools.isRootAvailable()) {
3: // su binary does not exist, raise no root dialog
4: 未root 5: } else {
6: // su binary exists, request permission
7: if (!RootTools.isAccessGiven()) {
8: 未获得权限 9: } else {
10: if (!RootTools.isBusyboxAvailable()) {
11: // checking for busybox needs root
12: 未找到busybox 13: } 14: } 15: }
如果要对系统分区进行写操作,就需要先将系统分区挂载为r/w模式。经测试,部分机型中不存在remount命令,因此此处采用直接执行命令的方式。
此处的Process p为执行su命令后的process对象,即有root权限的Process。
1: private static void remount(Process p, boolean ro) throws IOException {
2: DataOutputStream os = new DataOutputStream(p.getOutputStream());
3: DataInputStream is = new DataInputStream(p.getInputStream());
4: os.writeBytes("df -a /etc\n");//获取/etc分区的挂载信息
5: BufferedReader br = new BufferedReader(new InputStreamReader(is), 8192);
6: String line = null;
7: String filesystem = null;
8: String mountedOn = null;
9: 10: while ((line = br.readLine()) != null) {
11: line = line.trim(); 12: Log.d(T, line); 13: if (line.startsWith("/")) {
14: String[] blocks = line.split("\\s+");
15: filesystem = blocks[0]; 16: mountedOn=blocks[blocks.length-1]; 17: break;
18: } 19: } 20: String cmd = null;
21: if (ro) {
22: cmd = MessageFormat.format("mount -o remount,ro {0} {1}\n",
23: filesystem, mountedOn); 24: } else {
25: cmd = MessageFormat.format("mount -o remount,rw {0} {1}\n",
26: filesystem, mountedOn); 27: } 28: Log.d(T, cmd); 29: os.writeBytes(cmd); 30: } 31:
root后的相关操作的执行主要还是使用linux系统基本命令来完成,busybox实现了大多数的linux命令。
比如要写一个文件:
1: final static String mOtherLines = "echo \"{0}\" >>/etc/tests\n";
2: 3: private static void writeHostsFile(Process p, Vector<String> lines) throws IOException {
4: DataOutputStream os = new DataOutputStream(p.getOutputStream());
5: remount(p, false);
6: for (String l : lines) {
7: os.writeBytes(MessageFormat.format(mOtherLines, l)); 8: } 9: remount(p, true);
10: os.writeBytes("exit\n");
11: os.flush(); 12: try {
13: p.waitFor(); 14: } catch (InterruptedException e) {
15: Log.e(T, e.getMessage(), e); 16: } 17: } 2011-6-23 22:49:17 阅读8 评论0 232011/06 June23
2011-5-20 9:29:36 阅读10 评论0 202011/05 May20
整理一下。前段时间看了《历史的尘埃》、《小地主》、《天擎》,重读了《鬼吹灯》,一部一部来好了。
《历史的尘埃(知秋)》是在百度亵渎吧里看见有人推荐后才读的,不是我喜欢的风格。就整体感觉而言,作者非常喜欢去刻画一些较为血腥、恶心的东西,小说一开始的一大段就是。如果说在最开始的丛林追杀环节里不得不血腥的话,那后面经常可见的杀人场面的细致描写就说不过去了,显然是有意为之。就情节而言,通篇都是阴谋论,一波不知道会有多少折,读起来都会觉得累。主人公阿萨是那种被动的在命运的安排里挣扎求生的家伙,这一点上倒让我想起《色戒》里的王佳芝,两者的人生都是被动时态,其他的方面倒没有什么可比性。
估计知秋同志在写作时太沉湎于自己设定的层层阴谋,而忘了把世界的设定交代清楚,最应该交代清楚的一个问题,就是形成“漆黑之星”的大型魔法阵是怎么回事。往这个方向提一下的话,故事的范围就不再局限在阿萨这一个人所处的时代了,也会使整个故事更为完整。
至于《历史的尘埃》的一些其他的未揭示的情节,如阿萨的父母之类,百科专页上的说明还是不错的。地址在:http://baike.baidu.com/view/501465.htm
《小地主(如莲如玉)》是一部现代穿越文,读起来令人心情舒畅、食指大动。主人公胖子穿越到了文革刚结束的大青山,同时身体得已改造;一起借由“月光宝盒”穿越过来的小女孩奇奇则有了跟动物沟通的能力;除此之外,“月光宝盒”还是一个可以随时存取的无限空间,在里面放过的东西可以保鲜并得到改良。接下来,胖子用自己的知识和能力,保住了大青山的原始生态,走可持续发展的路子,带领村民一起发家致富。作者对山林里的动植物简直是如数家珍,这也是整部小说最吸引人的地方——各种野菜的生长环境、食用方法都由作者娓娓道来,令人大开眼界。整篇小说充溢着浓浓的乡土气息和人情味儿,足以净化读者的心。读完之后再看如莲如玉这个笔名,感觉很贴切。
《天擎》是我读的第一本黑客类小说,篇幅与上面两部相比算是短的。读到它是因为百度小说的一个黑客小说专题,里面对《天擎》的介绍是“史上最佳黑客小说,没有之一”,且居榜首。这部小说的亮点在于把股市的走向和一些国际新闻作为情节放入了小说里面,不去深究的话还是蛮有意思的。小说的前半部分放了一些无用的伏笔,在高潮到一半的时候嘎然而止,略有不爽。此外,人物间的情感描写是一大败笔,作者可能是太过以自我为中心,总是以自己的思想去揣摩他人的思想,导致小说中的人物在感情上没有特殊性,角色不鲜明。
对技术层面的描写则是显得作者在计算机领域只能算是个入门者,或者说是个幻想家。想想也是,技术大牛们估计也没兴趣写这种东西。
如果这部小说是黑客类小说的第一的话,那只能说黑客类小说实在是还没什么人在写。这个类别应该也是硬分出来的吧,这种东西已经属于科幻的范畴了。
至于《鬼吹灯》,当时读的时候只是觉得有点恐怖,现在再读,觉得各方各面都没有什么优点,不评论了。
2011-2-8 10:30:09 阅读10 评论0 82011/02 Feb8
7DB年春节假期即将结束。在这个偶尔能隐约听见鞭炮声响的冬晨,妻子和女儿正在我身边安静的睡着,呼吸声清晰可闻。
前些天看了百度拍的《盒子里的梦想》,也学着算了一下,原来我的年龄还没到10000天。那就让我在生命的第9266天里,回忆一下从8863天开始的事情。
在7DA这年里发生的最令人激动的事情,莫过于小公主的诞生。
小公主很乖,很漂亮,现在已经会在着急的时候叫妈妈了,哈哈。
妻子这一年受苦受累,先是要小心翼翼的挺着大肚子上班,然后是自然分娩,接着就是母乳喂养小宝宝,操心这操心那,实在是辛苦。
于是我们会在空闲的时候遐想一下未来,比如明年带小公主去瘦西湖玩,后年去上海,然后去杭州、去西藏、去新疆、去北海道。
盼2012不要来。
希望(85年“黑松沙士”广告曲)
养几个孩子是我人生的愿望 我喜欢他们围绕在我身旁
作词:李宗盛 作曲:李宗盛 编曲:Chris Babida
如果这纷乱的世界让我沮丧 我就去看看他们眼中的光芒 总有一天我会越来越忙 还好孩子总是给我希望
看着他们一天一天成长 我真的忍不住要把梦想对他讲 总在他们的身上 看到自己过去的模样
对自己、对人生、对未来的渴望
他们是我的希望 让我有继续的力量
他们是未来的希望 所有的孩子都一样
他们是未来的希望 但愿我能给他一个最像天堂的地方 依稀记得他们出生时的模样 我和太太眼里泛着泪光
虽然他长得和我不是很像 但是朋友都说他比我漂亮
毫无意外我真的越来越忙 还好孩子总是给我希望
如果能够陪着他们一起成长 生命里就算失去一些别的又怎么样 虽然我难免还是会想 这样的歌很少人会欣赏
这一首歌无关儿女情长 只献给我家那两个可爱的姑娘
他们在我心里最柔软的地方 虽然我总是身在远方
我生命里美好的一切愿与他们分享
转眼过去多年时间,多少离合悲欢,曾经志在四方少年,羡慕南飞的雁。
各自奔前程的身影勿勿渐行渐远,未来在哪里平凡,谁给我答案。
已经奔三的同学们,想我们当年是多么的意气风发啊,现在你们过得怎样?啥时候再聚聚?
由于在7D9年年底辞掉了原来的工作,我的7DA是以失业态开始的,幸福的失业。
7DA的上半年在本地找了一家自称是国际型大公司的企业做项目,用的是老掉牙的CRT显示器,中午吃地沟油盖饭,在一个没有暖气的屋子里过了半个冬天。当时一起进公司的7个同事现在只剩下2个还在坚守岗位,连HR MM都跳到另一家单位了,哈哈。
现在比较麻烦的就是我的社保、档案、医保还都在南京,去一趟要麻烦死了,不过不管怎样在7DB第一季度一定要搞定这几件事情……
先写到这里。
*7DA是0x7da,也就是十进制的2010.
2011-1-24 20:18:13 阅读110 评论0 242011/01 Jan24
Spica自带的VPN有问题,刷了很多版本都连不上,最后使用OpenVpn连上了。下面是OpenVpn在Spica上的安装步骤:
1,使用CM alpha 8.3 MOD,该MOD自带tun.ko和OpenVpn所需的bin文件。其他版本ROM需Root后,从电子市场下载OpenVpn Installer然后安装。
2,从市场下载OpenVpn Settings,点菜单,进Advanced项,选中第一项 “Load tun kernel module”。为确保效果,我还在Samdroid Tools(有人翻译成三星工具箱)里勾了tun.ko项。
3,把下载的OpenVpn配置文件解压到SD卡/openvpn目录下,或者在上图菜单中自定义位置。
4,重启,打开OpenVpn settings,选中,等,连接完毕。