用Android平板与RaspberryPi配置便携物理渗透设备(Pwn Pad & PwnPi)

技术 作者:冷鹰 2013-12-19 13:35:14
写在前面: 在5月份的时候。看到Freebuf 上有一篇文章《WiFi Pineapple Mark IV 无线安全审计的利器》 觉得看起来还挺不错的,但是看到那价钱99美元我就感觉有点贵..(学生党非土豪折腾的时候不爱找家里拿钱…)所以就打消念头了。但是这想法是挺好的,因为之前没接触嘛。后面想到我有一台树莓派,就一直惦记着什么时候来自己打造一套设备。不过挺长一段时间都只是想。 直到前阵子的Freebuf上的5篇文章才有了我现在的这篇。最起初的一篇是《FreeBuf线上活动:9月黑客晒书会(第一期)》看到获奖的瞬间非常非常开心,因为终于要拥有第一本属于自己的计算机安全这方面的书。那时候就一直惦记着要给Freebuf多点贡献;接着让我想法更强烈的是优质文章奖励计划(一直在YY写一篇能拿到200个金币的文章是什么样子的);第三篇是《让你的安卓设备跑起kali——kali for android》 让我的平板成功的跑起了Kali Linux 第四篇是《WiFi Pineapple Mark IV 无线安全审计的利器》 里面对这个设备功能的介绍,想着也要打造一个。第五篇是《图集:俺在国外当会棍——Sector 2013 会场篇、WIFI篇、CTF篇》 里面 @Kevin_2600 手上拿的外接了无线网卡的 Nexus 7。自己也就眼馋的想要搞一个(虽然大神没回答网卡型号,后面还是推测到类似是TP-Link WN722n这样的设备)

0×00:物理渗透设备的选择

Wifi Pineapple这个是我在折腾完树莓派之前了解到的唯一一个无线安全审计设备400Mhz CPU 软件业不少,看起来是不错,但对我来说很大的一个缺点就是太贵了99美元,要支持3G网络还要另购设备。网上好像说系统不开源。 (下面还有几个是折腾完在码字时才了解到的设备) Mini Pwner 基于TP-LINK TL-WR703N或TL-MR3020 3G便携路由器。基于OpenWRT 而且开源,那么能实现的功能应该不少,不过玩的人好像不多。 Pwnie Express 公司下面有卖几个设备。基本上都是通过以有的设备进行定制Power Pwn 和Pwn Plug Elite 都是基于SheevaPlug 反正我是觉得好酷炫,他们实现的一些比如WEB UI ,SMS Text-to-Bash (基于3G 通过短信发送命令并回复。这思路太酷炫了)这公司现在还可以预定2013版的Nexus 7 版的Pwn Pad 以前应该就是Nexus 7 然后外接一个芯片是AR9271的TP-link WL-WN722n 进行无线安全审计。(Nexus 7 2013的Pwn Pad配置下面会有完整的过程)最后最重要的一点,价钱无比的坑爹。基于Nexus 7 2013 的Pwn Pad要995美元,而且还要预定。 我手头上的设备:   网卡:zd1211b芯片的萨基姆760n(小故事:由来上高三时候家里宽带断网了以后又想看电影,然后发现学校教室能收到无线网络遂买网卡破还原卡破密码下片~)如果有人要赞助个TP-link 的722n 研究研究拿更好啦~ USB 3G上网设备&热点:高三买的一把华为C8500(小故事:那时急于想体验安卓,穷学生没收入还找姐姐借了一部分钱狠下心去买的,陪伴了我看了无数的数码新闻,安卓硬件发展太快,后面回想起来只怪当初太年轻….不过后面手机被一个公交司机恶意给摔破屏幕了基本上值回不少钱了,哈哈。除了屏幕碎了,其他功能依旧正常) 树莓派:运行 Kali Linux for Raspberry Pi (小故事:大二上学期期末的时候,发现的设备,临近期末了,咬咬牙找从伙食费里省出了150然后找家里拿了150买的。当初买过来是打算搞个远程控制带摄像头的小车什么的,甚至YY个基于树莓派的飞行器哈哈。后面不了了之放着当Linux 服务器用了挺久的。感觉是个学习Linux的神器) Android 平板 : Nexus7 2代 我很少买电子产品但身边朋友的电子产品几乎都是让我推荐或者代买的…(主要是因为没钱)那时候最初的打算是用来看书(计算机的书都好贵)。支持支持WIFI,GPS(Wifi War-walking时必备)蓝牙4.0[连接蓝牙无线键盘必备] 高分辨率的屏幕(看片啊啥的太方便了)。支持OTG(有了这点有了太多可能外接各种设备)还有非常非常重要的一点,谷歌的亲儿子,开源!!以前知道android 系统开源,但是没有现在理解的这么深刻…特别是在经历了为了配置一个内核而走了太多弯路了以后.. (小故事:大二暑假的时候去工厂流水线打工一小时8块钱,第一个月拿了1699。犹豫了好多次好久,终于在8月2号痛下决心花了1600买了它,虽然曾经被朋友说过,“你这样的人这么会去工厂流水线打工” 但是我觉得那段时间是一个非常好的思考人生的时光。每个大学生都应该去经历一次非常想学习但是因为不想找家里拿钱买自己的东西而去做自己不喜欢的事。这样真的会成长的很快。晚上8点半下班到家然后帮别人改网站赚外快…还借了不少书回来看)  

0×01:树莓派的配置

配置环境(Windows 7 64位 + Ubuntu 13.04虚拟机 32位 + Putty + Pscp) 1、系统镜像安装 系统方面应该是没啥疑问的选择了Kali linux for raspberry pi 里面集成了太多的软件,而平时也比较习惯Kali果断就它了,现在最新版的是1.0.5。但是这个版本网卡会有问题,会显示 no wireless extensions 现在回想起来应该是内核的问题,少了几个选项。官方论坛里面也有人遇到这样的问题(点击这里)后面也有解决的方法就是安装1.0.0版本    Kali Linux for RaspberryPi 1.0.0 (种子点击这里)     1)Windows 下用Win32 disk imager 把镜像写入SD卡。操作太简单了就不介绍了。(软件下载地址点击这里2)Linux
dd if=kali-pi.img of=/dev/sdb bs=512k
(这边要注意sdb要确定是你SD卡,具体的话插入SD卡以后运行dmesg查看具体是什么名字…) 3)写入完用Gparted 这个分区软件把SD卡上镜像所没利用到的空间给扩满 先unmount and resize . (等补充) 2、内核编译 如果你的网卡能在RaspberryPi下正常工作支持注入的话。那么装一下Firmware就好了。Kali Linux for RaspberryPi 上zd1211b芯片的默认网卡驱动是不支持注入的(详情与解决方法点击Aircrack-ng > zd1211rw)(查看网卡支不支持aircrack-ng,以及驱动之类有没有要打补丁的情况。请猛点击Aircrack-ng官网) 下面的操作都以zd1211b为例。 1)获取源码与固件 在Github上能下载到RaspberryPi 的内核源码 地址: https://github.com/raspberrypi/linux 现在已经有3.12内核的源码了。不过鉴于比较保守的原则。我选择了3.10.y这个分支 我这边连Github有时候有点蛋疼。所以我就选择了Download Zip 网速快的同学可以自行选择使用git clone的方法。 2)解压     解压这东西之所以也拿出来讲…是因为我在解压的时候也遇到了问题。zip文件我用unzip解压内核的时候出现”symlink error: File name too long ” 然后用jar解压就没问题了。解压就没问题了。
jar –xf linux-rpi-3.10.y.zip
但是用jar解压交叉编译器时权限设置又会丢失。所以除了内核源码以外的都还是用unzip 3)开始重新编译内核让无线网卡支持注入 #在RaspberryPi上运行
root@kali:~#cp /proc/config.gz /root/ #获取当前kernel的.config文件
#千万要记得不要再当前目录运行zcat config.gz > .config 不然你的Xwindow会打不开VNC也是...那时候不懂,搜了非常久才发现。那时候蛋碎了好久
#关闭 RaspberryPi 拔出SD卡
    #在Ubuntu虚拟机上运行
root@ubuntu:# pwd #当前目录的名字是RPi
/root/RPi
root@ubuntu:# ls
firmware-master.zip  linux-rpi-3.10.y.zip  tools-master
firmware-master  linux-rpi-3.10.y     tools-master.zip
root@ubuntu:# mv linux-rpi-3.10.y linux #将内核源码的目录名字改成linux方便等下打驱动补丁
  #插入SD卡
root@ubuntu:# mkdir /media/ SD
root@ubuntu:# mount /dev/sdb2/ /media/SD #这边的sdb表示的是你SD卡的设备文件名 2是第二个分区。第二个分区是根目录。第一个分区是 /boot
root@ubuntu:# cp /media/SD/root/config.gz .config 
root@ubuntu:# mv .config /linux/ #将配置文件放在内核的文件夹
root@ubuntu:# cd /root/RPi/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
root@ubuntu:# export PATH="$PATH:$PWD" #将交叉编译器的目录添加到PATH中
root@ubuntu:# export ARCH=arm 
root@ubuntu:# export CROSS_COMPILE= arm-bcm2708hardfp-linux-gnueabi- #设置好交叉编译环境
root@ubuntu:# cd /root/RPi/
root@ubuntu:# wget http://trac.aircrack-ng.org/raw-attachment/ticket/894/zd1211rw-inject%2Bdbi-fix-3.7.4.patch
#下载网卡的补丁
root@ubuntu:# patch -Np0 –i zd1211rw-inject+dbi-fix-3.7.4.patch #打补丁,如果怕补丁没打上,可以参照着补丁文件里的具体语句用vim 确认一下作用文件 /linux/drivers/net/wireless/zd1211rw/zd_mac.c
root@ubuntu:# cd linux #进入内核源码目录
root@ubuntu:# make oldconfig
root@ubuntu:# apt-get install ncurses-dev #安装menuconfig 图形配置内核所需要的库
root@ubuntu:# make menuconfig #图形化配置内核
配置内核可以参考下面Nexus7 的配置 #要支持有线网卡的话也是同理,直接勾选网卡芯片所对应的驱动模块,手头上有一个二手usb网卡(dm9601芯片)因为很早的东西了,所以很便宜。 root@ubuntu:# make #就开始编译了 接下来通过下面参考资料的步骤更新vc以及安装模块和替换内核。 通过上面的配置Raspberrypi 已经能成功支持zd1211b芯片的注入模式,Airodump-ng 已经能正常显示当前信号范围下无线网络的客户端与AP的连接情况   参考资料:《[Raspberry Pi] 树莓派 Kernel 编译笔记》   3、 配置3G上网设备   如果一个物理渗透设备不支持3G那就没办法在一开始远程破解无线网络了,所以接下来要开始折腾3G网络。我下面以我的耐摔神器c8500(现在淘宝上功能完整的只要100左右)为例子进行配置。 通过android手机让设备上网有2种方式,一种是usb tether ,还有另外一种是把手机当成和3G上网卡一样的USB modem 通过pppoe 拨号。第一种方式比较简单 只要RaspberryPi 支持rdnis 就可以了。kali linux 1.0.0默认是支持的。将手机通过USB与RaspberryPi 连接,手机上选择USB 绑定然后RaspberryPi上的网络设备就会多出了一个usb0 #简单的途径
    dhclient usb0 #搞定(默认的内核配置会自动加载rdnis_host模块)
    #这之前只要手机能联网并且打开USB绑定(USB Tethering)此时Raspberry Pi就能够上网了
#麻烦的途径 还有一种比较麻烦的就是通过USB Modem拨号(常见的设备比如USB 3G上网卡,以及支持USB modem的手机。当然了我是用我酷炫的C8500)我手机已经开启了调试模式,但在Linux下调试模式现在还无法正常工作。因为Android手机的usb有很多子系统。比如默认挂载的是usb-storage,但是adb和usb modem还不能正常工作。接下来我们就要掏出usb_modeswitch usb_modeswitch 介绍(http://www.cnblogs.com/jasonliu/archive/2011/11/09/2242070.html)简单点来说usb_modeswitch 就是要让我们平时在windows下装了驱动能正常工作的adb,usb_modem这种设备正常工作   首先,确定你设备的ID,插入了设备以后在终端运行dmesg,应该就会看到一行
New USB device found,idVendor=12d1 idPorduct=1031    #记下备用 运行 lsusb同样可以获得  id:12d1 1031
接下来安装usb_modeswitch (官网#需要翻墙) usb-modeswitch-2.0.1          (http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-2.0.1.tar.bz2) usb-modeswitch-data      (http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-data-20131113.tar.bz2) 还需要安装libusb 1.x 在终端直接运行
apt-get install libusb-1.0.0
将上面两个压缩包下载到  raspberry pi 并解压(没有VPN的话 开goagent 下载完scp到树莓派上) #在压缩包的目录运行
tar -xvf usb-modeswitch-2.0.1.tar.bz2
cd usb-modeswitch-2.0.1
make install
tar -xvf usb-modeswitch-data-20131113.tar.bz2
cd ../usb-modeswitch-data-20131113
make install
  接下来就能开始配置了
 cd /usr/share/usb_modeswitch/    #在这个目录下找到你手机对应的设备ID的配置文件,我的手机是12d1:1031对应的文件名就是12d1:1031
vim 12d1:1031
 
# Huawei U8110 / Joy, Vodafone 845 (Android smartphone)
TargetVendor=  0x12d1
TargetProduct= 0x1035
MessageContent="55534243123456780600000080010a11060000000000000000000000000000"
# for Android SDK
NoDriverLoading=1
    注意那个TargetVendor和TargetProduct这两个参数顾名思义就是目标的设备ID,那我们怎么知道我们的设备能正常工作的ID是多少呢?我想到一个比较便捷的方法。因为在Windows下这类操作都比较简单,在Windows下安装好驱动,然后在设备管理器里看能正常工作的设备的ID。下面是图解(驱动不好找的话自备各类手机助手) 99104c447e43b7d1c1d6bc4e1d21bf73 然后看看获取的ID与USB_modeswitch的配置文件里有没有对应(如果你设备ID存在的话!)如果不存在,那就要自己建立。 保存后重新把手机缓缓的插入树莓派。此时手机界面上应该能够跳出一个非常激动人心的“调试模式”了。那时候折腾这个折腾到蛋快碎了。然后dmesg里面也终于出现了
[   12.406805] usbcore: registered new interface driver usbserial
[   12.468079] usbcore: registered new interface driver usbserial_generic
[   12.526598] usbserial: USB Serial support registered for generic
[   12.586989] usbcore: registered new interface driver option
[   12.612650] usbserial: USB Serial support registered for GSM modem (1-port)
[   12.634668] option 1-1.3:1.4: GSM modem (1-port) converter detected
[   12.666828] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB0
  本来本来以为这样就好了。。。。。怀着非常激动的心情把拨号上网给配置了。后面才发现无法拨号无法拨号无法拨号。瞬间心又凉了。因为这是第一次折腾关于Linux下3g拨号,关键词不够犀利。找了好久最后才在xda-developers找到了一个回复    大概就是说要让option 模块知道新设备的ID
echo "12d1 1035"  > /sys/bus/usb-serial/drivers/option1/new_id
 
[  485.833608] option 1-1.3:1.0: GSM modem (1-port) converter detected
[  485.851587] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1
[  485.884724] option 1-1.3:1.1: GSM modem (1-port) converter detected
[  485.904363] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2
[  485.934414] option 1-1.3:1.3: GSM modem (1-port) converter detected
[  485.955435] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3
  这时候就可以开始配置ppp拨号了(因为我的手机是Evdo制式3G,其他制式的配置文件看下面链接)
apt-get install ppp
 
vim /etc/ppp/peers/evdo
 
debug
nodetach
lock
/dev/ttyUSB0
115200
user "ctnet@mycdma.cn"
password "vnet.mobi"
crtscts
show-password
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
defaultroute
ipcp-accept-local
ipcp-accept-remote
connect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-evdo-connect'
disconnect '/usr/sbin/chat -s -v -f /etc/ppp/peers/chat-evdo-disconnect’
 
vim /etc/ppp/peers/chat-evdo-connect
 
TIMEOUT 60
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' /rATZ
OK-AT-OK ATD#777
CONNECT /d/c
 
vim /etc/ppp/peers/chat-evdo-disconnect
ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
SAY "/nSending break to the modem/n"
'' "/K"
'' "+++ATH"
SAY “/nGoodbay/n"
建立了上述的几个文件以后,插入手机。然后
echo "12d1 1035"  > /sys/bus/usb-serial/drivers/option1/new_id #就能够开始拨号了
 
pppd call evdo #就会看到获取到IP了 此时就能上网了
  (实测C8500在设备插入树梅派以后,将ID写入了new_id需要关闭手机上的usb调试再重新打开方可拨号,而C8650不在插入了以后直接将ID写入new_id就可以拨号了。[拨号的时候要断开手机上的网络连接])   参考这两篇文章 《嵌入式Linux下3G USB Modem的使用》 《3G卡片在开发板上的详细解决方法(适用于大多数3G卡片) 》(内有td-scdma 和cdma 1x的配置文件) 4、连接思路 身为一个物理渗透设备,而且还支持3g,又有有线网卡和无线网卡,如果我们不能连接到设备那就失去了好多选择以及乐趣。之前单纯的以为可以通过手机开启 usb tethering 通过RNDIS让树莓派上网然后手机通过iptables端口转发加上树莓派上的花生壳之类的动态域名软件获取IP,然后正向连接到物理渗透设备的端口。(后面知道了这个想法不行。) 物理渗透设备,在大部分情况下都会是在内网,而内网的话正向连接这么直接的东西一般是没有机会用的。那么只有反向连接了。 比较好用的就是SSH 远程转发 (ssh remote forwarding) 也就是ssh -R选项,它可以在执行-R命令的机子上通过SSH隧道 绑定到隧道另一边服务器的端口。更多介绍点击 IBM的《实战SSH 端口转发》 它的命令格式是:
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
#这里我们假设你本机想要连接RaspberryPi且你安装了SSH client 和SSH server 。这边的Local port 是指你本机的哪个端口想和在远程服务器上的[remote port]端口绑定。remote host就是Raspberry Pi 而SSH hostname 就是你本机的SSH服务器 地址如果端口不是默认的22 的话 记得加上 -p xx 接着我们在RaspberryPi下执行
ssh -f -N -R 7001:localhost:22 YourSSHIP
#-f 选项:后台认证用户/密码   #-N 选项: 不执行远程命令,适合只做转发的时候用。 此时,我们就可以在本机执行 ssh username@localhost -p 7001 连接到树梅派的22端口。这里的username是你登录树梅派的服务器使用的用户名,接着输入密码就可以了。命令执行完如果成功的话不会有什么输出。(tip如果中途树莓派重启的话ssh隧道关闭了,短时间本机的7001端口还是会被占用,要到一定时间本机的服务器才会关闭这次连接的会话。此时你只要在本级找到占用7001端口的sshd的pid然后结束掉就可以了。)
netstat -npl | grep 7001 
kill “进程的pid”
  然后重新执行
ssh -f -N -R 7001:localhost:22 YourSSHIP
就OK啦。   但是只有上面那些是不够的,那只是反弹连接的思路   下来有几个连接思路,我把它分成两部分来说 第一部分:获取目标网络使用权前 1、3g网卡拨号上网,成功联网,通过SSH 远程转发 连接到服务器。(也就是插入手机,然后使用pppd拨号,接着使用ssh 远程转发 建立隧道) 2、手机启动usb tether(USB绑定),成功联网,通过ssh远程转发 连接到服务器。 3-0、无线网卡,在获取了目的网络周围的无线网络密码后,配置好无线网络的连接信息自动连接到跳板网络后连接到远程服务器。 3-1*  如果目标网络周围有没加密的热点,但是有paywall (要登录验证)且没有封DNS的端口 可以通过DNS隧道穿之。DNS 隧道配置的方法 详情见《》  (DNS 协议的局限,每次发的数据包都不大,所以速度可能会不怎么理想,但是多一种思路总是好的,还省上网流量主要…..)   ————上述几个方法可以根据目标网络的接入方式选用第二个网络设备为无线网卡或者有线网卡———— 第二部分:获取了目标网络的使用权。 1、可以接入目的网络以后,要看看有没有DHCP 服务器,如果没有的话要用软件抓包嗅探,MAC 地址绑定的话,也要改MAC地址 当能够正常通过目的网络联到外网的话。当然是断开3G网络,(开VPN,)开搞。 2、接入了目的网络,但那网络只能上内网,也还是按照上面接入前的思路,一个网络设备进行本机远程控制RaspberryPi,第二个网络设备与目的网络进行通信。       5、自动化脚本 配置好了设备的网络以及连接方式,但你物理入侵的时候总不能一直是手动输入指令连接服务器吧。接下来就要按照个人的入侵需求来编写脚本。(至少要能够自动远程端口转发吧) 下面是一段基于USB tether(USB绑定)通过手机3g上网然后连接服务器的脚本。首先手机要安装自动打开USB tether 的软件。下面是我看了一个多礼拜的《Linux Shell 从初学到精通》写出来的自动连接并检测远程端口转发是否成功的脚本。主要是利用的ssh可以不登录执行命令的机制。检测间隔时间是600秒,如果时间太快的话SSH连接会阻塞。600秒的话基本没事。(因为是第一次写,脚本是在有限认知里写出来的,只能说能用但不精致高效。如果有大神可以写个更酷炫的主动远程端口转发的思路就更好啦 :) )(注下面脚本为了实现方便,本机和Raspberry Pi两端都是拥root用户,对安全要求比较高的同学,可以在这方面另作修改加强。eg:防暴力破解之类的) &lt;img src='http://fbt.02753.com/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; )(注下面脚本为了实现方便,本机和Raspberry Pi两端都是拥root用户,对安全要求比较高的同学,可以在这方面另作修改加强。eg:防暴力破解之类的)&lt;/span&gt;&lt;/p&gt;      
#!/bin/bash
#Auto Remote Forwarding and check rndis connection for RaspberryPi
#By FallenSec
#My blog http://www.fallensec.com 
#Edit some option below to configure your Own script
c_remoteserver=www.xxx.com     #Your remote server.
c_serveruser=root                #Your remote server’s user .
c_serverport=9999              #The port on your server you want to connection to RaspberryPi
c_serversshport=22            #Your remote ssh server's port .
c_localport=32                 #Your RaspberryPi's ssh server port. Default it’s 22.
c_localuser=root
c_myusb=usb0                     #On my RaspberryPi it always be "usb0" when I enble USB tether on my android phone.
c_pingserver=www.baidu.com       #The server use to check online .
c_sleeptime=600                 #Check ssh connection per 10 mins.
echo -e "33[32m ---------------------------------------------33[0m"
echo -e "33[32m|33[0m                                ____         33[32m|"
echo -e "|33[0m Auto Remote Forwarding Script | __ ) _   _  33[32m|"
echo -e "|33[0m                               |  _ | | | | 33[32m|"
echo -e "|33[0m For RaspberryPi PwnBox        | |_) | |_| | 33[32m|"
echo -e "|33[0m                               |____/ __, | 33[32m|"
echo -e "|33[0m                                      |___/  33[32m|"
echo -e "33[32m|33[34m   _____     _ _            ____             33[32m|"
echo -e "33[32m|33[34m  |  ___|_ _| | | ___ _ __ / ___|  ___  ___ 33[32m |"
echo -ne "33[32m|33[34m"
echo -n "  | |_ / _` | | |/ _  '_ ___  / _ / __| "
echo -e "33[32m|"
echo -e "|33[34m  |  _| (_| | | |  __/ | | |___) |  __/ (__  33[32m|"
echo -e "|33[34m  |_|  __,_|_|_|___|_| |_|____/ ___|___| 33[32m|"
echo -e "  --------------------------------------------33[0m"

WARN="[33[33mwarn33[0m] "
FAIL="[33[31mfail33[0m] "
OK="[ 33[32mok 33[0m] "
f_check()
{
    if [ `echo $?` -eq 0  ]
    then
        echo -ne "$OK"
    else
        echo -ne "$FAIL"
    fi
}
loop=1
while (loop=0)
do  
    ping -c 1 $c_pingserver >/dev/null 2>&1
    checknet=`echo $?`
    if [ $checknet -eq 0 ] 
    then
        echo -ne "$OK" 
        echo "Network is working."
        echo "[....] Staring the kill the old connection."
        ssh $c_serveruser@$c_remoteserver -p $c_serversshport "/root/kill.sh" >/dev/null 2>&1
        checkprogress=`echo $?`
        if [ $checkprogress -eq 255 ]
        then
            echo -ne "$WARN"
            echo "Remote server seems down or Network is not working."
            continue
        else 
            ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport
            f_check
            echo "Create remote forwarding."
        fi
        while (loop=0)
        do  

            echo "[....] Checking remote forwarding connection."
            ssh $c_serveruser@$c_remoteserver -p $c_serversshport "ssh $c_localuser@localhost -p $c_serverport "uname" " >/dev/null 2>&1
            checkrf=`echo $?`
            if [ $checkrf -eq 2 ]
            then
                echo -e "[....] 33[31;1mNetwork connection down!!!"
                break #In the loop of checking find a timeout .Break to Warning
            fi
            if [ $checkrf -eq 255 ]
            then
                echo -e "[....] 33[31;1mSSH session Closed ,restarting now.33[0m"
                ssh $c_serveruser@$c_remoteserver -p $c_serversshport "/root/kill.sh" >/dev/null 2>&1
                checkprogress2=`echo $?`
                if [ $checkprogress2 -eq 255 ]
                then
                    echo -ne "$WARN"
                    echo "Remote server seems down or Network is not working ."
                    break
                else
                    ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport
                    f_check
                    echo "Create remote forwarding."
                fi
            else
                echo -ne "$OK"
                echo "Remote forwarding is working."
            fi
            sleep $c_sleeptime
        done

    else 

        echo -ne "$WARN"
        echo "Connection Failed.Restarting Now."
        ifconfig $c_myusb down 2>/dev/null
        if [ `echo $?` -eq 255 ]
        then
            PHONE=0
            while( PHONE=1 )
            do
                echo -e "33[31mPlease Plugin Your Phone And Enble USB Tethering!!!!33[0m"
                ifconfig $c_myusb down 2>/dev/null
                if [ `echo $?` -eq 0 ]
                then
                break
                fi
                sleep 5
            done
        fi
        echo -ne "$OK"
        echo "Stop usb network adapter."
        ifconfig $c_myusb up
        f_check
        echo "Start usb network adapter."
        dhclient $c_myusb >/dev/null 2>&1
        f_check
        echo "Obtian a IP address ."
    fi
    sleep 3
done
    使用的时候,保存成sh文件。然后在树莓派上设置开机自动运行。 但是仅仅一个脚本还不够。 1、要在本机配置一个脚本,因为树梅派那端如果网络中断,SSH 远程端口转发已经断了,而你此时本机要是刚好连接上去,会一直卡住。所以本机上面还要有一个脚本是用来结束本机端SSH forwarding 的进程。细心的同学会发现脚本里面有一个 /root/kill.sh(因为经验还不够那本Shell 的书还没完全吸收掌握,还没有去研究把2个脚本合成1个。) 在本机的/root/目录下建立kill.sh 然后添加执行权限,kill.sh内容  
kill `netstat -npl | grep 9999 | grep "tcp " | awk '{print $7}' | awk -F "/" '{print $1}’`
#上面命令的9999和前面c_serverport的值要一样。
2、所有自动化脚本基本上配置好了,但是因为实现是基于SSH ,那么生成空口令的公钥用来登录这就必不可少了。
ssh-keygen -t rsa
#还有 dsa ,ecdsa另外这两种方式,你如果不想指定 identityfile 的话,你先试着在树梅派上通过SSH 连接到本机,然后就会显示加密方式如:
The authenticity of host ‘x.x.x.x (x.x.x.x)' can't be established.
RSA key fingerprint is
  #然后看到服务器自动给提示的是“RSA key” 然后你生成的时候就生成RSA算法的密钥,此时如果你生成的是dsa加密的公钥那可能还是要输入密码的,因为服务器那端自动给你是rsa。指定了 identityfile 就没有关系了。 下面是个小例子。本机执行
root@FallenSec:~# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/root/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ecdsa.
Your public key has been saved in /root/.ssh/id_ecdsa.pub.

The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx root@FallenSec
The key is randomart image is:
+--[ECDSA  256]---+
|   o..           |
|  . +            |
| . . .           |
|..    . . .      |
|+      .S+       |
|oo       .o      |
|=.+   . =  .     |
|Eo .   * ..      |
|o       o.       |
+-----------------+
root@FallenSec:~#
接着把$HOME 目录下 .ssh/id_ecdsa.pub传到树梅派对应$HOME目录下的.ssh文件夹
scp /root/.ssh/id_ecdsa.pub root@192.168.1.88:/root/.ssh/rpi_ecdsa_pub #192.168.1.88是RaspberryPi的IP
ssh root@192.168.1.88 "cat /root/.ssh/rpi_ecdsa_pub >> /root/.ssh/authorized_keys"
  (在写这篇文章的时候发现了也回想起了《SSH权威指南》有提到ssh-copy-id这东西。)
ssh-copy-id -i .ssh/id_rsa.pub user@server
  说明:
该命令会提示输入用户 user 在 server 上的SSH登录口令。
当此命令执行成功后,再以 user 用户登录 server 远程主机时,不必输入口令直接登录。
该命令实际上将 .ssh/id_rsa.pub 公钥文件追加到远程主机 server 的 user 主目录下的 .ssh/authorized_keys 文件中
    然后现在连接就不用密码了 :) 记住两端都要分别创建公钥然后传到对方服务器因为脚本的检测机制很重要的一个就是连接对方的服务器再再对方服务器连接回来测试SSH连接是否正常….(我承认这不是一个高明的办法但它挺有效的,求大神给建议改进) &lt;img src='http://fbt.02753.com/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /&gt; 记住两端都要分别创建公钥然后传到对方服务器因为脚本的检测机制很重要的一个就是连接对方的服务器再再对方服务器连接回来测试SSH连接是否正常….(我承认这不是一个高明的办法但它挺有效的,求大神给建议改进)&lt;/span&gt;&lt;/p&gt; 还有2个Tip 我在Raspberry Pi上填写控制端的地址是拥域名的形式,如果域名的IP变了。(花生壳动态IP之类)就会跳出一个让你确认要不要继续连接的提示,此时你要输入 yes or no 。这种提示不便与我们所编写脚本的自动化。如:  
The authenticity of host   'x.x.x.x (x.x.x.x)' can not be established.
RSA key fingerprint is
Are you sure you want to continue connecting (yes/no)? yes
  此时将 StrictHostKeyChecking no 加到/etc/ssh/sshconfig 可以让ssh客户端 自动接受新主机的host key,不用每次都自己输入yes 还有一个,就是在我做稳定性测试(也就是半夜树梅派开着然后服务器通过本地的端口连接SSH)发现长时间没有数据传输的话,连接会话会超时。 设置服务器向SSH客户端连接会话发送频率和时间(在树梅派上设置)
vi /etc/ssh/sshd_config #添加如下两行
ClientAliveInterval 60 ClientAliveCountMax 86400 注:ClientAliveInterval选项定义了每隔多少秒给SSH客户端发送一次信号;ClientAliveCountMax选项定义了超过多少秒后断开与ssh客户端连接   参考资料 《SSH 公钥认证》 《Simplify Your Life With an SSH Config File》 《SSH 权威指南》 《解决SSH会话连接超时问题》 《SSH-KeyGen Man Page》 此时,树莓派最基本的通过3g手机共享上网自动远程端口转发的配置就完成了。如果是不同的网络情况可以自行修改脚本(如已知周围有热点,或者已经获得过周围加密无线网络密码(有线网络使用权)等情况) 树莓派部分终于写完了,一直拖着,在编写与调试脚本的时候遇到了不少问题,幸亏之前找人很便宜的买了一台Motorola Laptop dock 用来当成树梅派的显示屏。有时候代码写错了,树梅派开机一直死循环….不断插拔储存卡挂载改代码,大概花了2个天的时间才写完,后面还参考Linux启动的感觉添加了一些提示文字,颜色,ASCII字(当然是我的网名哈哈) 4431387418470

0×02:Android平板的配置

Pwn Pad 的话,前面有说了我为什么使用nexus 7。这里就不累述了。直接进入主题 一台Pwn Pad 在我心目中的功能(目前我已经实现的功能): 1、要能够外接U盘,硬盘(只要有OTG功能都能有吧) 2、要方便无线war-walking(这个需要GPS,Nexus 7 2013 有这个功能), 3、要能够支持有线网卡(有的地方不能使用无线网络,动静太大,有些地方只有有线网络) 4、要支持3G设备(手机发射热点是一种解决方法,但它的缺点就是太耗电以及无线网络动静太大。外接3G上网卡之类的USB modem或者支持USB共享的手机是个不错的方法) 5、还有很酷炫的一个功能,那就是支持USB串行通信设备比如PL2303,CH341(因为楼主是个工科生,所以和控制器通信这反面的还是有一定的兴趣…可以给单片机下载程序,为便携入侵单片机提供了可能;直接和树莓派的终端通信,可以随时对树莓派进行配置操作,使渗透测试更加灵活。) 6、要能够破解无线网络,对无线网络进行监听注入。(RT8187,ar9170,zd1211b,ar9271,GW3887,rt3070等等有关注过无线安全的同学们看到这边应该很兴奋了,可以在一台平板上就能破解无线了耶) 7、要同时支持上述一个或多个功能(挂个HUB) 8、要满足第七点,还能够边给平板充电边给上述设备供电,不要为电源而烦恼。 (看到这边有同学兴奋了吗) 下面围绕上面几点展开来介绍,如何一步一步实现这些功能 要让Android 平板能够支持有线网卡,外接无线网卡,3G上网卡,RNDIS Host(USB tether的Host-side所需要的一个模块),串行通信设备。这些设备的驱动、模块都是要在内核上面开启的,而官方内核几乎是都没有开启上面功能。如果我们想要使用,那就需要开始配置内核了。而资料触手可及的谷歌亲儿子系列,让我们开展这项工作变得容易了不少。(如果你好好去实践,那么就能离很多订制内核的大神们近了不少。) 谷歌官方的内核编译教程。http://source.android.com/source/building-kernels.html (当初什么都不懂的时候,有看到了这个教程,一步一步跟着做,也有遇到不少问题。而过了一个月的现在,我已经能够熟练配置出默认的内核了) 首先稍微介绍一下我自己的理解: 编译安卓的内核,一般是在PC机上通过交叉编译工具链(Cross Compile Toolchain)进行交叉编译,然后再写入到Android机子启动 (我交叉编译的环境是Kali linux 1.0.5 amd64)有的系统不能运行官方提供arm-eabi-gcc,比如32位debian 7 ,至少是不能直接运行。下个系统来编译要不要了多久(有兴趣的同学可以去解决那些不同构架运行程序的问题,然后写个文章发出来:P ) 1、获取源码以及交叉编译工具链
cd ~
mkdir android #在HOME目录建立android目录用来放置编译内核所需要的工具
cd android
git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
#下载交叉编译器,要想知道自己当前的系统版本能不能支持交叉编译器
#先下载下来,然后进到 arm-eabi-4.6/bin/目录
#执行  ./arm-eabi-gcc 看看是现实不能执行二进制文件,还是提示没有输入文件
#如果是不能执行二进制文件那最简单的解决方法就是下个支持的系统,比如上述我所用的
#之前稍微试着去解决了,不过都没啥突破性的进展,最后在google code上有人回复了一个好像是要64位系统才能够使用
#如果显示的是没有输入文件,那就可以回到android目录接着继续下面的步骤了
git clone https://android.googlesource.com/kernel/msm.git  #下载源码
完成后执行
cd msm
git branch -a #查看所有分支
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/android-msm-2.6.35
  remotes/origin/android-msm-3.9-usb-and-mmc-hacks
  remotes/origin/android-msm-flo-3.4-jb-mr2
  remotes/origin/android-msm-flo-3.4-kitkat-mr0
  remotes/origin/android-msm-flo-3.4-kitkat-mr1
  remotes/origin/android-msm-hammerhead-3.4-kitkat-mr1
  remotes/origin/android-msm-hammerhead-3.4-kk-fr1
  remotes/origin/android-msm-hammerhead-3.4-kk-fr2
  remotes/origin/android-msm-hammerhead-3.4-kk-r1
  remotes/origin/android-msm-mako-3.4-jb-mr1
  remotes/origin/android-msm-mako-3.4-jb-mr1-fr
  remotes/origin/android-msm-mako-3.4-jb-mr1-kgsl
  remotes/origin/android-msm-mako-3.4-jb-mr1.1
  remotes/origin/android-msm-mako-3.4-jb-mr2
  remotes/origin/android-msm-mako-3.4-kitkat-mr0
  remotes/origin/android-msm-mako-3.4-kitkat-mr1
  remotes/origin/android-msm-sony-cm-jb-3.0
  remotes/origin/master

git checkout android-msm-flo-3.4-kitkat-mr1  #目前Nexus 7最新版的是3.4-kitkat-mr1 (2013-12-16)
2、接下来就是给驱动打补丁和Hack Kernel环节了 1) 给zd1211b芯片的驱动打补丁,让它支持注入以及修正dbi的显示
wget   #打之前记得修改补丁的路径我们当前的目录是msm,那就要把补丁的前两行"linux/drivers/"改成 drivers 
patch -Np0 –i zd1211rw-inject+dbi-fix-3.3.2.patch
2) Hack the msm_otg.c 让设备在通过OTG的时候可以边充电,且外接设备也能够有电,且能有足够的电源拖USB hub等 而推出ElementalX和bulletproof系列内核的flar2大神已经有写好代码 Github地址 See Change https://github.com/flar2/flo-ElementalX/commit/1937beb50e69f597e31c3ad0dc0cbd569584364e Raw file 地址 点我 https://raw.github.com/flar2/flo-ElementalX/1937beb50e69f597e31c3ad0dc0cbd569584364e/drivers/usb/otg/msm_otg.c 下载后自行替换 drivers/usb/otg/msm.otg.c #记得备份防坑爹 3) 要使用USB modem 就要给内核添加USB drivers for GSM & CDMA Modems 默认是官方内核默认是编译不过去的要修正参数 (同样是flar2大神的ElementalX内核里拿来的) Github地址 See Change https://github.com/flar2/flo-ElementalX/commit/49a12ca0c4e008c56cede9d26ac3ef0e222acbd2 Raw file 地址 usb-wwan.h  https://raw.github.com/flar2/flo-ElementalX/master/drivers/usb/serial/usb-wwan.h 下载后自行替换 drivers/usb/serial/usb-wwan.h #同样是记得备份防坑爹 3、开始配置内核
#打完补丁以及做完修改以后回到 msm
#设置交叉编译的环境变量
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=arm-eabi-
cd ../arm-eabi-4.6/bin/
export PATH="$PWD:$PATH"
cd ../../msm #回到内核源码根目录
cp arch/arm/configs/flo_defconfig .config #将Nexus 7 2013 (flo) 默认的内核配置文件拷出来
make menuconfig 开始配置内核
内核主界面20131015061609 1)若要想留名的话,在General setop —>里的“Local version – append to kernel release”里可以设置,记得把 Automatically append version information to the version string 取消掉 2)要开启无线网卡驱动的话,首先进入"Networking support —> Wireless —>" 启用 "[*]   Generic IEEE 802.11 Networking Stack (mac80211)",接着配置"Wireless"下的其余部分 30471387418470 接着从配置主页进到 "Device Drivers  —> Network device support  —> Wireless LAN  —> " 目录下勾选你所用的网卡的驱动," ZyDAS ZD1211/ZD1211B USB-wireless support"就是我zd1211b 的驱动。常见的驱动都在这儿   3)开启有线网卡支持 进入“Device Drivers  —> Network device support  —> USB Network Adapters  —>”勾选你拥有的USB网卡对应的芯片,比如我的网卡是DM9601芯片,那我就勾选 "Davicom DM9601 based USB 1.1 10/100 ethernet devices" 4)开启rndis_host支持 进入“Device Drivers  —> Network device support  —> USB Network Adapters  —>”勾选“Host for RNDIS and ActiveSync devices (EXPERIMENTAL)” 5)开启USB modem等3G拨号上网设备的支持 进入“Device Drivers  —> USB support  —> USB Serial Converter support  —>  ”勾选 “ USB driver for GSM and CDMA modems 和  USB Opticon Barcode driver (serial mode) ” 6)开启USB 串口通信设备支持,我所使用的是目前很常见的CH340以及PL2303芯片的USB-TTL 进入“Device Drivers  —> USB support  —> USB Serial Converter support  —>  ”勾选 “ USB Winchiphead CH341 Single Port Serial Driver 和 USB Prolific 2303 Single Port Serial Driver” 7)如果你手机是Iphone 的话,要用手机共享给平板上网 内核里有一个选项 "Apple iPhone USB Ethernet driver" 在 进入“Device Drivers  —> Network device support  —> USB Network Adapters  —>”里,勾选它应该就行了(没手机测试) 现在就配置好内核了。   4、编译内核
make -j4   #-j4的4一般是你CPU核数的2倍 开启多线程
执行了上述命令以后,不出意外如果都按照我上面说的做的话,就能够成功编译出内核了 生成文件在 arch/arm/boot/zImage   这里的zImage 就是我们要的内核 5、生成boot.img 上面我们编译好内核,没办法直接刷入手机里的,要生成boot.img。 (我折腾这些的时候中途放弃过一次,因为是从零开始接触,遇到太多太多问题了…后面好不容易内核编译成功了…boot.img 一直没办法正常工作。休息了一个礼拜以后继续在xda-developers上搜寻着) 后面直到我看到一个大神谢的unmkbootimg ,后面发现之前用的perl版的boot.img解包工具得到的参数太少了,结果重新打包的时候一直不能正常工作。而今才知道还有C语言版的unpackbootimg,但还没测试) 拓展阅读《boot.img的解包与打包》 生成boot.img 参考 《compiling and running our own modified kernel on the Nexus 7 2013》 1) 编译打包工具
# cd android

# git clone 

https://android.googlesource.com/platform/system/core

 bootimg-tools

Cloning into 'bootimg-tools'...

remote: Counting objects: 92, done

remote: Finding sources: 100% (92/92)

remote: Total 19302 (delta 11674), reused 19302 (delta 11674)

Receiving objects: 100% (19302/19302), 5.87 MiB | 655 KiB/s, done.

Resolving deltas: 100% (11674/11674), done.

# cd bootimg-tools/libmincrypt/

# gcc -c *.c -I../include

# ar rcs libmincrypt.a *.o

# cd ../mkbootimg# gcc mkbootimg.c -o mkbootimg -I../include ../libmincrypt/libmincrypt.a

mkbootimg.c: In function 'main':mkbootimg.c:245:9: warning: assignment discards 'const' qualifier from pointer target type [enabled by default]

# cp mkbootimg /usr/local/bin/

# cd ../cpio# gcc mkbootfs.c  -o mkbootfs -I../include
# cp mkbootfs /usr/local/bin/
2) 编译解包工具
# cd ~/android/bootimg-tools/mkbootimg/

# wget 

https://raw.github.com/pbatard/bootimg-tools/master/mkbootimg/unmkbootimg.c

# gcc -o unmkbootimg unmkbootimg.c
# cp unmkbootimg /usr/local/bin/
3) 获取出厂boot.img 最直接的方法就是去 谷歌官方的 “Factory Images for Nexus Devices” https://developers.google.com/android/nexus/images 里下载。现在官方已经放出了最新的android 4.4.2 KOT49H 的出厂镜像。下载后解压,然后将boot.img放到android目录下   4) 解包
#unmkbootimg -i boot.img
kernel written to 'kernel' (6640200 bytes)
ramdisk written to 'ramdisk.cpio.gz' (399979 bytes)
To rebuild this boot image, you can use the command:
mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x80208000 --ramdisk_offset 0x82200000 --second_offset 0x81100000 --tags_offset 0x80200100 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3' --kernel kernel --ramdisk ramdisk.cpio.gz -o boot.img
此时我们的文件夹下面就会有 boot.img  kernel  ramdisk.cpio.gz 这三个文件了 记下上面很长的那一串参数,重新打包的时候就是需要它,可以把记录成一个脚本。要打包的时候就能用了 此时将zImage 拷出来
cp ~/android/msm/arch/arm/boot/zImage kernel
然后官方内核就被覆盖了。 常理来说现在就能通过mkbootimg来生成boot.img 但是由于nexus 7 默认USB有线网卡(eth0)无法获取IP 需要修改init.flo.rc 而init.flo.rc是在ramdisk.cpio.gz里面 此时就要对ramdisk.cpio.gz进行解包。
cd anroid
mkdir tmp
gzip -d ramdisk.cpio.gz
cd tmp
cpio -i -F ../ramdisk.cpio
vim init.flo.rc
在ini.flo.rc添加
service dhcpcd_eth0 /system/bin/dhcpcd -ABDKL

    class main
    disabled
    oneshot

service iprenew_eth0 /system/bin/dhcpcd -n

    class main
    disabled
    oneshot
添加完保存退出在tmp目录运行
find . | cpio -o -H newc | gzip -c > ../ramdisk.cpio.gz
cd android
mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x80208000 --ramdisk_offset 0x82200000 --second_offset 0x81100000 --tags_offset 0x80200100 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=flo user_debug=31 msm_rtb.filter=0x3F ehci-hcd.park=3' --kernel kernel --ramdisk ramdisk.cpio.gz -o boot_new.img
就会生成boot_new.img 然后通过scp拷出来。移动到adb工具目录下(xda下载的adb工具包 百度网盘 地址 提取码fq44 ) 在电脑上装好adb驱动 (各类xx助手or 官方USB驱动) 在adb目录下按住shift 右键 在此处打开命令窗口
adb reboot bootloader #重启到bootloader
fastboot flash boot boot_new.img
刷完启动系统,准备工作几乎全部完成了。现在我们就可以通过OTG使用有线网卡,无线网卡,rndis_hos ,3g modem了   OTG charge mode 的开启
 echo "Y" > /sys/module/msm_otg/parameters/usbhost_charge_mode
OTG charge mode 的关闭
 echo "N" > /sys/module/msm_otg/parameters/usbhost_charge_mode
  开启以后,要边充电边使用OTG要先把 带供电的OTG线的电源接头(USB公头)插入充电器,后把micro USB 公头插入平板   福利资源: Freebuf版 Nexus 7 2013 wifi android 4.4.2 KOT49H PwnPad 内核  下载地址 (点我 提取码 vocb) 特性: 支持市面上几乎所有常见支持无线破解的网卡(rtl8187,ar9170,zd1211b,ar9271,GW3887,rt3070等等但固件需要自己安装) 支持DM9601 USB有线网卡 支持OTG charge mode 支持RNDIS_hos 支持3G网卡、USB_modem 支持pl2303 ch340 USB-TTL 截图: 54081387213761 zd1211、ar9271固件以及开启与关闭OTG charge mode 脚本 下载地址( 点我 提取码vmce ) 用法: zd1211文件夹与htc_9271.fw 复制到/etc/firmware/ (其他网卡固件一样,可以直接从Kali linux里面拷) otgchargestart.sh和otgchargestop.sh 复制到/system/bin 下面设置好执行权限。就可以直接在终端里面使用了 官方原版 Nexus 7 2013 wifi android 4.4.2 KOT49H 内核 下载地址 (点我 提取码 wypa )   结束语: 通过一个多月的构思以及折腾码字。经历了失而复得 刻有我LOGO的U盘,利用舍友空闲的时候码字(一个多礼拜前笔记本进水主板烧了……)。在一个舍友电脑上装虚拟机配置内核,搭服务器录视频,在另外一个舍友电脑上下视频软件写字幕渲染,一个多月从从来没有接触到内核,到现在渐渐会自己配置内核,拓展自己想要的功能。从从来没有写过shell脚本到写了个快200行的程序。再次感谢Google 与 xda-developers 能让人学到非常多关于android的东西以及英语…这应该算是国内第一篇比较完整的PWN Pi 以及PwnPad的打造教程(第N篇内核编译教程…),写完的感觉真的挺好的…第一次码了这么多字(码完字开始备考….期末考….) 希望Freebuf越办越好。 Hacking For Fun . 设备书籍全家福 75111387213559 86021387214961 87191387210364 94281387418469

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接