DNS 配置

GFW真是太不要脸了,现在给google来了个中间人攻击,把他的证书替换了,真是吊的飞起。现在就算用dnscrypt也没有用了。因为GFW没有阻止ip,直接就是攻击。CTMD。不过我偶然发现只要DNS不是解析到中国的就不会遭受中间人攻击。因为CDN的关系,DNS可以根据客户端ip来解析对应的服务器ip。我如果解析到美国的google ip就不会被中间人攻击。当然,全局的转发也是可以的,比如socks,但速度还是有区别的。

注意:这里说的都是在教育网,没有在其他网络尝试。

unbound + dnscrypt + opendns

opendns的ip是208.67.222.222,208.67.220.220 {443, 53, 5353},支持加密传输。这在之前dnscryptunbound已经讨论过。但这种方法已经不适合。因为他会解析到google对应东南亚的ip。

ssh tunnel + nc

这个是比较蛋疼,也比较复杂。我也没有试过,总体来说,先建立ssh本地转发tunnel,然后用nc将udp转为tcp,经ssh tunnel转发。那么解析的ip就不一样了。具体看链接

ssh tunnel + unbound

我认为这是最合适的方法。先要启用unbound tcp-upstream,并设置forward-zone。我的unbound.conf文件见文末。然后启用ssh tunnel:  ssh -L 9053:8.8.8.8:53 server-ip  。最后是修改resolv.conf文件。只要改为 nameserver 127.0.0.1 ,一切ok,测试结果见文末。

ssh reverse tunnel + unbound

这个也行,原理跟上面类似,但这里用的是ssh reverse tunnel。比如  ssh -R 9053:8.8.8.8:53 user@china-host 。这个命令要在国外主机运行,他的意思是连接到china-host,并将通过china-host:9053的流量,经过国外主机(本主机)转发到8.8.8.8:53。有点小复杂。原理是一样的,也是能跑起来的。

测试结果

链接

  1. unbound conf
  2. udp to tcp
  3. ssh port forwarding

 

Android Root 原理

题外话:最近确实很闲,因此想要升级nexus 7了。可是安装了twrp recovery之后,OTA升级总是不成功,出现error: has unexpected content。前面也讲过怎么擦除后升级。 也可以只擦除system和boot分区,这样不会影响数据。但总这样不是办法,网上说用Philz Touch Recovery,感觉还是不靠谱,索性就换了个cyanogenmod(CM)的ROM。感觉很OK!接下去就了解了一下root的原理。

Root原理

android约等于linux。这就导致android对root的处理方式也类似与linux。看他的su源文件。截取如下:

就是说只有ROOT用户和SHELL用户(adb shell)可以获得root权限,之后启动setuid的shell。这不是坑爹吗。所以我们要改的话要把下面的条件去掉,然后编译。 (怎么编译后面讲) 其实这只对4.3以前的android有效,现在android增加安全方面的考虑,禁止setuid了。而现在的root方式比较复杂,可以看superuser的源代码。

编译su

有人就喜欢动手尝试,我也是。编译这个需要懂交叉编译。有点麻烦,而且编译出来的是静态的,先不管。所以直接使用NDK,Superuser也是采用这种方法。其实可以编译任意c代码。写个helloworld就行了。

替换su

既然su可以用shell运行,那连上电脑不就行了。但是无论是adb shell还是adb root都不行,adbd cannot run as root in production builds,这有点蛋疼。简单方法果然不行,所以还是要用recovery,怎么刷recover,就不提了。我用的是TWRP,总感觉比CWR好用。然后方法就多了,可以先把su复制到普通文件夹,然后在TWRP中移动到/system/xbin。或者直接adb sideload,这个方法要写edify脚本,见链接。

SuperUser

实际上root复杂的多,像SuperUser要对能获取root权限的app进行管理,否则肯定会悲剧。参照源码,可以得到如下流程图(来自http://www.imooc.com/video/2570)。

superuser

编译android

还是闲的蛋疼,所以试着编译android。可是主页上说要16G内存才行,我加上swap才8G。不管先试。tmd,编译了4个多小时,还是没编出来。观察编译过程,主要是chromium在编译,最后内存飙到7G,我也顶不住了,就放弃了。看个内存跳舞的图。android也快出x64的了,详见01.org

memory-building

链接

  1. Edify script language,  Make Flash Zip
  2. android su source code,  superuser su,  linux susuperuser
  3. building
  4. imooc