前言

自从丢了iphone,换了安卓之后,手机的可玩性瞬间提升了一大截

之前在手机里跑Python,用的是QPython3,有诸多不便。一直想要在手机里跑linux环境,能使用linux工具箱的同时,又能以编程的方式与手机交互(发短信,拍照,打电话什么的),而且最好不要影响手机正常的使用。

busybox当然是个不错选择,但我更偏好Termux

Termux(一个Android App,仅支持Android 5.0及以上版本 ,可以在Google Play和F-Droid上下载)是一款开源且不需要root,运行在Android上极其强大的linux模拟器,支持apt管理软件包,支持python,ruby,go,nodejs…甚至可以手机作为反向代理、或Web服务器

安装好打开之后,你将看到这样的界面

使用

提高输入效率

打开Termux之后,我们面对的是一个命令行界面,常用的手机输入工具,搜狗之类的,并没有功能键,无法输入esc、ctrl、alt、tab…

Termux提供了一些解决方案:

音量键(-)模拟Ctrl,所以你要中止输入到一半的命令,只好按下音量键(-)+c即可(等效于Ctrl+c)

你也可以使用音量键(+)+q显示扩展键:ESC、CTR、ALT、TAB、-、/、|

你有多种方式提高输入效率:

  • 使用蓝牙键盘
  • Hacker’s Keyboard: 一个输入法App,提供一切你需要的按键,方便地在Android上输入快捷键组合、特殊符号,提高Coding和CLI的效率
  • 在电脑中使用ssh接入Termux
  • 安装Jupyter Notebook,在电脑中使用浏览器连接Termux(可以在网页中使用terminal)

在以上多种方式中,我最喜欢Jupyter Notebook

安装Jupyter Notebook

  • apt install clang python python-dev fftw libzmq libzmq-dev freetype freetype-dev libpng libpng-dev pkg-config (目前(2017.12.24)默认安装的Python版本是3.6.4
  • pip install jupyter
  • jupyter notebook --ip=0.0.0.0

假设你的手机在局域网里的ip为:192.168.0.100,那么访问你在局域网中的浏览器里输入192.168.0.100:8888即可,接下来会要求你输入token,如此一来远程访问便没有安全问题。token在jupyter notebook运行起来之后手机界面中会有,如截图中所示:

在浏览器中输入token之后,即可使用浏览器来访问termux。选择Terminal:

之后你便可以在浏览器中进入termux的terminal,和ssh进入几乎相同

安装依赖

进入linux,我做的第一件事一般是把我日常使用的工具装好。Termux支持apt管理软件包,所以这一切来的很轻松:

apt install tmux fish vim git

公网访问

我们如何把手机中的端口暴露到公网呢,有两种方式都很方便:

  • 使用ssh反向代理(使用autossh解决隧道的稳定性问题)
  • 使用ngrok(使用ngrok arm版本)

如此一来手机中运行的网站你就可以在公网访问它,当然你也可以把ssh端口暴露到外网,这样你可以在任何有网络连接的地方连接到你的手机里。前提是Termux处于运行状态

使用Python驱动手机

结下来才是精彩之处

我们先安装termux的插件Termux:API,用于访问手机硬件。安装完Termux:API App之后,还需要在terminal里安装termux-api:apt install termux-api,之后就可以在terminal中操控手机硬件,这样一来我们可以以编程的方式来控制手机,

什么 “亲爱的每天早上6点钟准时电话喊你起床”,还不是从不晚点!什么“短信一定秒回哦” 还不是毫秒级的速度!什么“今天是你的生日,我准时在12点给你发了这条祝福短信” 还不是差一秒绝对是网络延迟!

巧伤诚 :(

展示一些好用的api

  • 获取手机剪贴板内容: termux-clipboard-get

  • 设置剪贴板内容: termux-clipboard-set 你好啊

之后你在手机中粘贴内容时,便会把你好啊粘贴出来。利用剪切板接口,你可以方便地在电脑和手机间传输内容,而不必通过微信、QQ之类的东西

  • 获取联系人列表: termux-contact-list

  • 发送短信:termux-sms-send -n 10010 hello

通过以上指令我们成功给10010发了hello

更多有趣的连接可以参考: Termux:API

有了这些接口,我们可以在Python中使用subprocess来操控手机。已经有人做了简单包装,以供python调用termux-api: termux_python

邪恶一下

使用Termux你可以轻松把手机打造为一个渗透工具

日常使用的nmap当然没有问题(当然你可以以轻松使用routersploit、slowloris、Hydra),惊人的是竟然连Metasploit Framework都可以使用!

如果你对使用termux来做渗透感兴趣,参考termux Hacking


2018.06.03更新

最近看到这篇文章访问的人比较多,做个更新

termux和termux:api今年做了一个更新,增加了好几个有趣的api,其中我最喜欢termux-sensors,这个api能帮我们拿到几乎所有的手机传感器数据!

此外我之前fork了一个项目,简单用python包装了一下termux:api: termux_python

参考