Android与我的Daily Life
实验室同学问我为什么喜欢Android,怎么说呢,我觉得它特别可折腾,我俨然已经把它当成一台电脑来折腾了,更不必说它是如何融入我的日常生活的。照搬小学弟sayisee同学的创意,我也做了一个自己的android的timeline或者说waterfall,也算梳理一下每天的android生活吧。
本文参加的是“首届 Google 暑期大学生博客分享大赛——2010 Android 篇”比赛。再次说明,这个timeline创意不是我想出来的,如果同学们觉得这个创意很不错,就请去sayisee同学的大学生乱弹琴博客那里留言帮他顶起支持他吧,谢谢。
实验室服务器被黑记(上)
早晨上班一到实验室,weekface告诉我说实验室的那台服务器貌似出问题了。他之前写过一个crontab脚本来每天执行一次备份任务,结果今天上去一查,已经不执行好久了,然后查crontab -l,他的那句任务竟然消失不见了,取而代之的指向了一个莫名其妙的脚本。
我立刻上去看,因为从没遇到这种情况,首先想到的会不会是实验室有同学上来动过,于是问了一下,房间里知道root密码的一共就四个同学,依次询问都说没有动。一边问着,一边看那个脚本的内容,立刻懵了,里面是一些很难阅读的shell命令,这才意识到不妙,出事了。然后查当前在线用户,结果who命令竟然返回的是空!接着last,我靠last也被替换了。赶紧去拔了网线,已经很明显了,我们服务器被黑了。
接下来一步一步去查找蛛丝马迹。who、last命令已经直接被替换了,root用户的.bash_history已经被我们这几天的新操作给覆盖掉,/var/log/secure也被清空,很干净嘛。然后看crontab修改记录,时间是Jun 27 17:27:21,这时上个周日,这个时间我们都没人上来动过服务器,所以判断这个时间就是被黑的时间。原来已经这么久了我们都没发现,真汗。。。然后查看是否有什么损失,服务器上在跑的服务有http、mysql、svn、ftp这几个,这几个服务都没有被添加账号,其实就我们做东西的这水平,真没什么值得别人费尽周折来偷窥甚至偷窃的。即便如此,还是心有余悸。
那个神秘的脚本是窥视所有破坏的关键,比较长,改天再分析。跟weekface反思,本来这台服务器跑的centos版本很低了,应该有很多漏洞,并且我们的防范意识一直不强,root密码仅仅是一个10位的纯英文,很容易就被暴力破解了,而且shell的roo密码还跟mysql的root密码是一样的,再而且吧,当时我为了能够回宿舍后,ssh远程回实验室继续干活(唉,一言难尽哇),还把这台服务器的22端口从路由器上映射了出去……这不是自己找着被人黑么……
如何建立android的C/C++交叉编译环境
Android的底层是纯粹的linux内核,可以简单的理解为上面跑了个Dalvik Java虚拟机而已。因此,构建android上C/C++的交叉编译环境也就成为了一个很大的需求。特别是对于已经取得root权限的机器,如果能直接运行按需编译的二进制文件,那么将可以做很多有意义和有趣的事情。
很不幸,Google没有直接给出如何建立这个交叉编译环境,但是我们可以借助Google提供的强大的NDK (Native Development Tools)来达到这一目的。NDK的本来目标是编译得到.so动态链接库文件,然后通过JNI提供给上层的Java调用,从而实现C/C++程序的简易迁移。而编译.so和编译成二进制可执行文件的过程是完全一样的,这就给了我们可以发挥的空间。
有两种方式获取交叉编译所需的工具链:git下prebuilt这个project或者直接去下载NDK,我这里arm-eabi的版本是最新的4.4.0。
1 | git clone git://android.git.kernel.org/platform/prebuilt.git |
然后创建一个helloworld.c文件。
1 2 3 4 5 6 | //// root@delleon:~/android/myapp# cat helloworld.c #include <stdio.h> int main() { printf("HelloWorld!\n"); return 0; } |
接下来创建Makefile文件。注意修改其中的NDK_DIR和SDKTOOL为自己的目录,修改APP为自己的待编译程序主文件名。另外注意自己的arm-eabi的版本,若有变化则也需要修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #### root@delleon:~/android/myapp# cat Makefile APP=helloworld NDK_DIR := ~/android/android-ndk-r4 NDK_HOST := linux-x86 SDKTOOL := ~/android/android-sdk-linux_86/tools TOOLCHAIN_PREFIX := $(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/bin/arm-eabi- CC := $(TOOLCHAIN_PREFIX)gcc CPP := $(TOOLCHAIN_PREFIX)g++ LD := $(CC) COMMON_FLAGS := -mandroid -ffunction-sections -fdata-sections -Os -g \ --sysroot=$(NDK_DIR)/build/platforms/android-5/arch-arm \ -fPIC \ -fvisibility=hidden \ -D__NEW__ CFLAGS := $(COMMON_FLAGS) CFLAGS += -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DSK_RELEASE -DNDEBUG CFLAGS += -UDEBUG -march=armv5te -mtune=xscale -msoft-float -mthumb-interwork -fpic -ffunction-sections -funwind-tables -fstack-protector -fmessage-length=0 -Bdynamic CPPFLAGS := $(COMMON_FLAGS) \ -fno-rtti -fno-exceptions \ -fvisibility-inlines-hidden LDFLAGS += --sysroot=$(NDK_DIR)/build/platforms/android-5/arch-arm LDFLAGS += -Bdynamic -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0 LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/lib/gcc LDFLAGS += -L$(NDK_DIR)/build/prebuilt/$(NDK_HOST)/arm-eabi-4.4.0/arm-eabi/lib LDFLAGS += -nostdlib -lc -llog -lgcc \ --no-undefined -z $(NDK_DIR)/build/platforms/android-5/arch-arm/usr/lib/crtbegin_dynamic.o $(NDK_DIR)/build/platforms/android-5/arch-arm/usr/lib/crtend_android.o OBJS += $(APP).o all: $(APP) $(APP): $(OBJS) $(LD) $(LDFLAGS) -o $@ $^ %.o: %.c $(CC) -c $(CFLAGS) $< -o $@ %.o: %.cpp $(CPP) -c $(CFLAGS) $(CPPFLAGS) $< -o $@ install: $(APP) $(SDKTOOL)/adb push $(APP) /data/local/bin/$(APP) $(SDKTOOL)/adb shell chmod 755 /data/local/bin/$(APP) run: $(SDKTOOL)/adb shell /data/local/bin/$(APP) clean: @rm -f $(APP).o $(APP) |
最后直接make,然后make install进手机里看一下吧。通过adb shell和手机里的Terminal等软件执行的结果是一样的。
后记:还有一个叫Codesourcery的工具链,下载下来有130多M,我使用它来编译helloworld时无误但是放到手机上则运行不起来。不想细究了,我认为NDK提供的工具链已经非常优秀。感兴趣的朋友可以自己试试Codesourcery。
Linode 360 VPS BenchMark
昨天帮实验室买了个Linode 360的VPS,梦寐以求哇,迫不及待的去折腾。选在了加州的fremont机房,北京网通的ping值大概在210ms左右,很极品的速度了,ssh上去交互只有一点点地小卡。装的CentOS 5.5,然后配了几个shell账号,通过he.net提供的tunnel broker增加了IPv6的支持,最后装了个启用passenger-ruby模块支持的nginx。明天继续折腾。
下班前顺便跑了一下Unix Bench 5.1.2,硬件配置上是一颗Intel Xeon L5520 2.27GHz四核的CPU, 8M Cache, Xen虚拟化,360M RAM,16GB Hard Drive。结果如下。
========================================================================
BYTE UNIX Benchmarks (Version 5.1.2)
System: li165-73: GNU/Linux
OS: GNU/Linux -- 2.6.32.12-linode25 -- #1 SMP Wed Apr 28 19:25:11 UTC 2010
Machine: i686 (i386)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
Hyper-Threading, MMX, Physical Address Ext
CPU 1: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
Hyper-Threading, MMX, Physical Address Ext
CPU 2: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
Hyper-Threading, MMX, Physical Address Ext
CPU 3: Intel(R) Xeon(R) CPU L5520 @ 2.27GHz (4533.5 bogomips)
Hyper-Threading, MMX, Physical Address Ext
18:35:04 up 1 day, 2:19, 1 user, load average: 0.00, 0.00, 0.00; runlevel 3
------------------------------------------------------------------------
Benchmark Run: 二 6月 08 2010 18:35:04 - 19:03:21
4 CPUs in system; running 1 parallel copy of tests
Dhrystone 2 using register variables 9671772.5 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1914.6 MWIPS (10.5 s, 7 samples)
Execl Throughput 1259.3 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 302168.6 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 77339.6 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 880748.9 KBps (30.0 s, 2 samples)
Pipe Throughput 425294.5 lps (10.0 s, 7 samples)
Pipe-based Context Switching 22283.7 lps (10.0 s, 7 samples)
Process Creation 2188.1 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 3003.2 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 846.0 lpm (60.0 s, 2 samples)
System Call Overhead 437322.7 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 9671772.5 828.8
Double-Precision Whetstone 55.0 1914.6 348.1
Execl Throughput 43.0 1259.3 292.9
File Copy 1024 bufsize 2000 maxblocks 3960.0 302168.6 763.1
File Copy 256 bufsize 500 maxblocks 1655.0 77339.6 467.3
File Copy 4096 bufsize 8000 maxblocks 5800.0 880748.9 1518.5
Pipe Throughput 12440.0 425294.5 341.9
Pipe-based Context Switching 4000.0 22283.7 55.7
Process Creation 126.0 2188.1 173.7
Shell Scripts (1 concurrent) 42.4 3003.2 708.3
Shell Scripts (8 concurrent) 6.0 846.0 1410.0
System Call Overhead 15000.0 437322.7 291.5
========
System Benchmarks Index Score 433.5
------------------------------------------------------------------------
Benchmark Run: 二 6月 08 2010 19:03:21 - 19:31:52
4 CPUs in system; running 4 parallel copies of tests
Dhrystone 2 using register variables 34776757.0 lps (10.0 s, 7 samples)
Double-Precision Whetstone 7017.4 MWIPS (10.3 s, 7 samples)
Execl Throughput 4465.6 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 279935.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 73559.9 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 993067.5 KBps (30.0 s, 2 samples)
Pipe Throughput 1545852.2 lps (10.0 s, 7 samples)
Pipe-based Context Switching 153438.0 lps (10.0 s, 7 samples)
Process Creation 4991.3 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 6503.9 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 985.1 lpm (60.1 s, 2 samples)
System Call Overhead 1479565.4 lps (10.0 s, 7 samples)
System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 34776757.0 2980.0
Double-Precision Whetstone 55.0 7017.4 1275.9
Execl Throughput 43.0 4465.6 1038.5
File Copy 1024 bufsize 2000 maxblocks 3960.0 279935.4 706.9
File Copy 256 bufsize 500 maxblocks 1655.0 73559.9 444.5
File Copy 4096 bufsize 8000 maxblocks 5800.0 993067.5 1712.2
Pipe Throughput 12440.0 1545852.2 1242.6
Pipe-based Context Switching 4000.0 153438.0 383.6
Process Creation 126.0 4991.3 396.1
Shell Scripts (1 concurrent) 42.4 6503.9 1533.9
Shell Scripts (8 concurrent) 6.0 985.1 1641.9
System Call Overhead 15000.0 1479565.4 986.4
========
System Benchmarks Index Score 999.7
[MOD]屏蔽Sprint Hero黑屏时MENU键的解锁功能
本MOD功能:
- 原先手机黑屏后,不小心按下MENU键也会触发屏幕解锁。刷了这个补丁后则不会触发。这样手机放在兜里再也不用担心不小心碰到MENU键了。
- 除了修改MENU键屏幕解锁外,本补丁不影响原rom的其他任何功能。
适用机型:
Sprint HTC HERO200
适用rom:
基于Sprint官方1.5 / 2.1 RUU制作的所有rom(不适用于基于eris制作的rom)
安装方法:
- 下载附件,更名为update.zip复制到sd卡上
- 重启手机,按住小房子+挂机键进入Recovery模式,保险起见建议做个Nand Backup备份
- 不需要Wipe,直接刷这个update.zip
下载地址:
PS. 感谢阿土伯、老梁为本补丁做的测试。刷机有风险,本人不对刷机失败负责。
Sprint HTC Hero 2.1 Release成功提权到root
从Sprint 5月19号发布官方2.1升级,到今天获取root,一共用了整整半个月的时间,期间我和其他朋友尝试过各种方法来试图获取都失败,怪不得Sprint发布2.1时老是跳票,其实绝大多数时间都是去给kernel打补丁去了。期间跟regaw讨论过好几次,都进展不佳,要找kernel版本为2.6.29的提权漏洞并且最好是5月份以后泄露的,这真是一件困难的事情。
Regaw最后使用的办法是通过修改matt写的一个EVO 4G提权漏洞进而使帮助CDMA Hero也获取了提权。感谢大家的努力!
另外在root的过程中我没有刷boot.img。昨晚我帮regaw重新打包了一遍boot.img,这个新boot.img与官方ruu版本中的boot.img唯一差别就是其kernel中的build.prop文件ro.security的值从1改为0。刷与不刷的区别就是,新的boot.img可以使得开机时即进入root,而保留原来的boot.img则需要开机后手动之行su命令才可以切换到root。
历史会永远记住伟大的这一天(你们懂的)。需要获取root的请check这个连接:[GUIDE] How to Root Sprint 2.1 Release for CDMA Hero。
搬家到theplanet
感谢Paveo曾经提供的高速而为稳定的CPH/LampDrive,永远会记住这一美好的时光。
在国内继续待下去真的太纠结了。这次选择了出国,位于Dallas的theplanet机房。提供ssh账号。ping值在230~300之间,速度不是特别理想,但比蜗居在国内要强得多。
搬出来的第一件事情就是删除首页的备案号。备案备案,备你个头。