android系统架构像安装了还原卡

用Android平板与RaspberryPi配置便携物理渗透设备(Pwn Pad & PwnPi)
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,以及驱动之类有没有要打补丁的情况。请猛点击)
下面的操作都以zd1211b为例。
1)获取源码与固件
在Github上能下载到RaspberryPi&的内核源码 地址:&
现在已经有3.12内核的源码了。不过鉴于比较保守的原则。我选择了3.10.y这个分支
我这边连Github有时候有点蛋疼。所以我就选择了Download Zip
网速快的同学可以自行选择使用git clone的方法。
& &&解压这东西之所以也拿出来讲&是因为我在解压的时候也遇到了问题。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@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方便等下打驱动补丁
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的连接情况
参考资料:&
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 介绍(/jasonliu/archive//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& & & & & ()
usb-modeswitch-data& & & ()
还需要安装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-.tar.bz2
cd ../usb-modeswitch-data-
make install
接下来就能开始配置了
&cd&/usr/share/usb_modeswitch/&&&&#在这个目录下找到你手机对应的设备ID的配置文件,我的手机是12d1:1031对应的文件名就是12d1:1031
vim 12d1:1031
# Huawei U8110 / Joy, Vodafone 845 (Android smartphone)
TargetVendor=
TargetProduct= 0x1035
MessageContent=&00&
# for Android SDK
NoDriverLoading=1
注意那个TargetVendor和TargetProduct这两个参数顾名思义就是目标的设备ID,那我们怎么知道我们的设备能正常工作的ID是多少呢?我想到一个比较便捷的方法。因为在Windows下这类操作都比较简单,在Windows下安装好驱动,然后在设备管理器里看能正常工作的设备的ID。下面是图解(驱动不好找的话自备各类手机助手)
然后看看获取的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
/dev/ttyUSB0
password &vnet.mobi&
show-password
usepeerdns
noipdefault
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就可以拨号了。[拨号的时候要断开手机上的网络连接])
参考这两篇文章
(内有td-scdma 和cdma 1x的配置文件)
4、连接思路
& & 身为一个物理渗透设备,而且还支持3g,又有有线网卡和无线网卡,如果我们不能连接到设备那就失去了好多选择以及乐趣。之前单纯的以为可以通过手机开启 usb tethering 通过RNDIS让树莓派上网然后手机通过iptables端口转发加上树莓派上的花生壳之类的动态域名软件获取IP,然后正向连接到物理渗透设备的端口。(后面知道了这个想法不行。)
物理渗透设备,在大部分情况下都会是在内网,而内网的话正向连接这么直接的东西一般是没有机会用的。那么只有反向连接了。
比较好用的就是SSH 远程转发 (ssh remote forwarding) 也就是ssh -R选项,它可以在执行-R命令的机子上通过SSH隧道 绑定到隧道另一边服务器的端口。更多介绍点击 IBM的
它的命令格式是:
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
但是只有上面那些是不够的,那只是反弹连接的思路
下来有几个连接思路,我把它分成两部分来说
第一部分:获取目标网络使用权前
& & 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:防暴力破解之类的)
#!/bin/bash
#Auto Remote Forwarding and check rndis connection for RaspberryPi
#By FallenSec
#Edit some option below to configure your Own script
c_remoteserver=
#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=
#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
echo -e &|33[0m Auto Remote Forwarding Script | __ ) _
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
echo -e &33[32m|33[34m
echo -e &33[32m|33[34m
___|_ _| | | ___ _ __ / ___|
___ 33[32m |&
echo -ne &33[32m|33[34m&
| |_ / _` | | |/ _
'_ ___
/ _ / __| &
echo -e &33[32m|&
echo -e &|33[34m
_| (_| | | |
__/ | | |___) |
echo -e &|33[34m
__,_|_|_|___|_| |_|____/ ___|___| 33[32m|&
--------------------------------------------33[0m&
WARN=&[33[33mwarn33[0m] &
FAIL=&[33[31mfail33[0m] &
OK=&[ 33[32mok 33[0m] &
if [ `echo $?` -eq 0
echo -ne &$OK&
echo -ne &$FAIL&
while (loop=0)
ping -c 1 $c_pingserver &/dev/null 2&&1
checknet=`echo $?`
if [ $checknet -eq 0 ]
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 ]
echo -ne &$WARN&
echo &Remote server seems down or Network is not working.&
ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport
echo &Create remote forwarding.&
while (loop=0)
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 ]
echo -e &[....] 33[31;1mNetwork connection down!!!&
break #In the loop of checking find a timeout .Break to Warning
if [ $checkrf -eq 255 ]
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 ]
echo -ne &$WARN&
echo &Remote server seems down or Network is not working .&
ssh -f -N -R $c_serverport:localhost:$c_localport $c_serveruser@$c_remoteserver -p $c_serversshport
echo &Create remote forwarding.&
echo -ne &$OK&
echo &Remote forwarding is working.&
sleep $c_sleeptime
echo -ne &$WARN&
echo &Connection Failed.Restarting Now.&
ifconfig $c_myusb down 2&/dev/null
if [ `echo $?` -eq 255 ]
while( PHONE=1 )
echo -e &33[31mPlease Plugin Your Phone And Enble USB Tethering!!!!33[0m&
ifconfig $c_myusb down 2&/dev/null
if [ `echo $?` -eq 0 ]
echo -ne &$OK&
echo &Stop usb network adapter.&
ifconfig $c_myusb up
echo &Start usb network adapter.&
dhclient $c_myusb &/dev/null 2&&1
echo &Obtian a IP address .&
使用的时候,保存成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:
+-----------------+
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连接是否正常&.(我承认这不是一个高明的办法但它挺有效的,求大神给建议改进)
还有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 权威指南》
《SSH-KeyGen Man Page》
此时,树莓派最基本的通过3g手机共享上网自动远程端口转发的配置就完成了。如果是不同的网络情况可以自行修改脚本(如已知周围有热点,或者已经获得过周围加密无线网络密码(有线网络使用权)等情况)
下面是一个小小的演示视频(演示上述脚本以及无线网卡、有线网卡、Android Phone USB tethering 共享上网(RNDIS)、USB Modem 3G拨号上网(3G上网卡同支持USB modem的手机)的功能测试)
树莓派部分终于写完了,一直拖着,在编写与调试脚本的时候遇到了不少问题,幸亏之前找人很便宜的买了一台Motorola Laptop dock 用来当成树梅派的显示屏。有时候代码写错了,树梅派开机一直死循环&.不断插拔储存卡挂载改代码,大概花了2个天的时间才写完,后面还参考Linux启动的感觉添加了一些提示文字,颜色,ASCII字(当然是我的网名哈哈)&
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所需要的一个模块),串行通信设备。这些设备的驱动、模块都是要在内核上面开启的,而官方内核几乎是都没有开启上面功能。如果我们想要使用,那就需要开始配置内核了。而资料触手可及的谷歌亲儿子系列,让我们开展这项工作变得容易了不少。(如果你好好去实践,那么就能离很多订制内核的大神们近了不少。)
谷歌官方的内核编译教程。
(当初什么都不懂的时候,有看到了这个教程,一步一步跟着做,也有遇到不少问题。而过了一个月的现在,我已经能够熟练配置出默认的内核了)
首先稍微介绍一下我自己的理解:
编译安卓的内核,一般是在PC机上通过交叉编译工具链(Cross Compile Toolchain)进行交叉编译,然后再写入到Android机子启动
(我交叉编译的环境是Kali linux 1.0.5 amd64)有的系统不能运行官方提供arm-eabi-gcc,比如32位debian 7 ,至少是不能直接运行。下个系统来编译要不要了多久(有兴趣的同学可以去解决那些不同构架运行程序的问题,然后写个文章发出来:P )
1、获取源码以及交叉编译工具链
mkdir&android&#在HOME目录建立android目录用来放置编译内核所需要的工具
cd&android
git&clone&/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
#下载交叉编译器,要想知道自己当前的系统版本能不能支持交叉编译器
#先下载下来,然后进到&arm-eabi-4.6/bin/目录
#执行&&./arm-eabi-gcc&看看是现实不能执行二进制文件,还是提示没有输入文件
#如果是不能执行二进制文件那最简单的解决方法就是下个支持的系统,比如上述我所用的
#之前稍微试着去解决了,不过都没啥突破性的进展,最后在google&code上有人回复了一个好像是要64位系统才能够使用
#如果显示的是没有输入文件,那就可以回到android目录接着继续下面的步骤了
git&clone&/kernel/msm.git&&#下载源码
完成后执行
git branch -a #查看所有分支
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&()
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&
Raw file 地址 点我&
下载后自行替换 drivers/usb/otg/msm.otg.c #记得备份防坑爹
3) 要使用USB modem 就要给内核添加USB drivers for GSM & CDMA Modems 默认是官方内核默认是编译不过去的要修正参数 (同样是flar2大神的ElementalX内核里拿来的)
Github地址 See Change&
Raw file 地址 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&开始配置内核
内核主界面
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&下的其余部分
接着从配置主页进到 &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 参考&
1) 编译打包工具
#&cd&android
#&git&clone&
/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%&(),&5.87&MiB&"&655&KiB/s,&done.
Resolving&deltas:&100%&(),&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/
/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&&里下载。现在官方已经放出了最新的android 4.4.2 KOT49H 的出厂镜像。下载后解压,然后将boot.img放到android目录下
#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&0x&--ramdisk_offset&0x&--second_offset&0x&--tags_offset&0x&--cmdline&'console=ttyHSL0,&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进行解包。
gzip&-d&ramdisk.cpio.gz
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&0x&--ramdisk_offset&0x&--second_offset&0x&--tags_offset&0x&--cmdline&'console=ttyHSL0,&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
&&& 截图:
&&& 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 内核 下载地址 (配置内核,搭服务器录视频,在另外一个舍友电脑上下视频软件写字幕渲染,一个多月从从来没有接触到内核,到现在渐渐会自己配置内核,拓展自己想要的功能。从从来没有写过shell脚本到写了个快200行的程序。再次感谢Google 与 xda-developers 能让人学到非常多关于android的东西以及英语&这应该算是国内第一篇比较完整的PWN Pi 以及PwnPad的打造教程(第N篇内核编译教程&),写完的感觉真的挺好的&第一次码了这么多字(码完字开始备考&.期末考&.)&
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 android系统架构 的文章

 

随机推荐