我是如何Hack一个机器人的? 我是如何hack一个机器人的英文
haoteby 2024-11-06 18:36 33 浏览
在Hack Day这样的伟大节日里,还是应该做一点Hack的事。很久没有干过这么刺激的事,想想也觉得有点小激动。
Blabla,当然这个Robot可能没有你想的那么高端,Hack的目的只是为了控制这个机器人。而这个所谓的机器的主要功能都集中在客户端上,我们可以在手机上通过BLE(蓝牙低功耗)来控制这个机器人。
所以,我们的目的其实很简单——自己写APP来控制这个机器人。而APP的主要功能都是通过蓝牙控制来实现的,而蓝牙协议的第一步就是连接。在最开始的时候我想的连接方式是PIN码 + AT指令,结果发现我完全错了,BLE实际上更简单。
因此,我觉得有PIN码的存在,所以第一步就是抓包。
蓝牙通讯抓包
为了做到这一步,我们需要一个大名鼎鼎的“WireShark”。不过,我们是要拿这个软件来分析日志。
第一步,我们需要在开发者选项中启用日志分析。在开发者选项中有一个功能, [Enable Bluetooth HCI snoop log/启用蓝牙 HCI 信息收集日志]。如下图所示:
第二步,我们我们就可以打开应用,做一些正常的操作,然后这些操作就会存储到一个日志文件里。而这个日志文件只能用WireShark打开。
第三步,就是用WireShark打开这个日志。从日志中找寻手机发往机器人的指令,发现里面都看不懂。
接着想起来,似乎可以反编译他们的代码。
反编译代码
开始尝试反编译代码,发现步骤也挺简单的:
用apktool反编译apk
用dex2jar将dex转为jar
用jd-gui查看反编译后的软件,并导出
查看代码
虽说原理很简单,但是实践起来就坑了。先反编译了最新的APK,然后发现这个APK被360加固了。。接着开始回溯这个软件的版本,360加固出得比这个软件晚,那么我应该可以找到这个软件的早期版本。
而事实是,我在国内都找不到这个APK的早期版本,只好拿包名去搜索,然后中奖了——找到了一个早期的版本,并且反编译成功了。
接着,我全局搜索PIN码等等的东西都没有结果,我的思路错了。。。
最后,我看到了代码里的:
Log.i("robotControl", "forward left 30");
既然,他可以打日志,那我应该是可以查看日志的。
日志记录
于是,我找到了Android的logcat命令,然后凑了一条指令出来。
adb -d logcat com.example:D *:D > debug.log
运行软件,分析日志。从大量的数据里找到:
D/BluetoothAdapterService(23908452)(16911): getState() - mAdapterProperties: com.android.bluetooth.btservice.AdapterProperties@1e554c00
D/BluetoothAdapter(17239): 448307125: getState(). Returning 12
D/BtGatt.GattService(16911): registerClient() - UUID=037decf9-4d7e-49d8-9f82-85202eea480f
看着日志,看着日志。突然有一个瞬间,我意识到BLE是不需要PIN码的。我只需要找到对应的UUID,以及对应的Service就可以了。
现在,我可以写自己的应用了。
编写自己的APP
这一次,在网上简单地找了一个Cordova BLE的示例。(后面才发现这个坑挖得太深,以至于掉了进去。Cordova对WebSocket的支持不好,不过这和这个主题没有啥关系。。)
分析设备
按代码的逻辑,我们可以在连接上设备的时候查看设备的服务——并根据具体的服务及txCharacteristic,来做对应的发送数据。而依据write数据的代码,我们需要两个东西一个是设备的UUID,一个Characteristic。一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic。
如,我们要发送和接收数据都需要有对应的Characteristic。蓝牙技术联盟似乎定义了一些GATT(Generic Attribute Profile ),如下是一个设备的缩略数据:
{
"name": "Battery Demo",
"services": [
"1800"
],
"characteristics": [
{
"service": "1800",
"characteristic": "2a00",
"properties": [
"Read"
]
}
]
}
如这个设备,提供了一个代码为1800的服务。这个服务里包含了一个characteristic为2a00的属性,我们只需要通过1800这个Service UUID,以及characteristic 2a00就可以读取这个设备的Device Name——这个是蓝牙技术联盟定义的Characteristics。
而这时,就找到了UUID为fff0,TX Characteristic为fff1。
控制机器人
所以我们的设备信息便如下所示:
var robotInfo = {
serviceUUID: "0000fff0-0000-1000-8000-00805f9b34fb",
txCharacteristic: "0000fff2-0000-1000-8000-00805f9b34fb", // transmit is from the phone's perspective
rxCharacteristic: "0000fff1-0000-1000-8000-00805f9b34fb" // receive is from the phone's perspective
};
接着,继续看之前的反编译代码,发现他是这么控制的。
左转指令X2
右转指令X3
前进指令X1
后退指令X4
当然,他还有更多的指令,只是我不需要那么多。。。然后我找到了一个名为nipplejs的库,来当游戏手柄。
小结
现在,我们已经可以控制这个机器人了。
代码及细节可以关注我的微信公众号: phodal
相关推荐
- 如何为MySQL服务器和客户机启用SSL?
-
用户想要与MySQL服务器建立一条安全连接时,常常依赖VPN隧道或SSH隧道。不过,获得MySQL连接的另一个办法是,启用MySQL服务器上的SSL封装器(SSLwrapper)。这每一种方法各有其...
- k8s 证书问题排查_k8s dashboard 证书
-
从去年开始一些老项目上陆陆续续出现一些列的证书问题,(证书原理这里就不说了,官方文档一堆)多数刚开始的表现就是节点的kubelet服务起不来,节点状态NotReady表现日志如下failed...
- 企业级网络互通方案:云端OpenVPN+爱快路由器+Win11互联实战
-
企业级网络互通方案:OpenVPN搭建公有云+爱快路由器+Win11三地互联实战指南「安全高效」三地局域网秒变局域网实施环境说明...
- OpenV** Server/Client配置文件详解
-
Server配置详解...
- 接口基础认知:关键信息与合规前提
-
1.核心技术参数(必记)...
- S交换机通过SSH登录设备配置示例(RADIUS认证+本地认证独立)
-
说明:●本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。●通过不同的管理域来实现RADIUS认证与本地认证两种方式同时使用,两...
- SSL证书如何去除私钥密码保护_ssl证书怎么取消
-
有时候我们在生成证书的时候可以加入了密码保护。然后申请到证书安装到了web服务器。但是这样可能会带来麻烦。每次重启apache或者nginx的时候,都需要输入密码。那么SSL证书如何去除私钥密码保护。...
- SSL证书基础知识与自签名证书生成指南
-
一、证书文件类型解析...
- S交换机通过SSH登录设备配置示例(RADIUS认证)
-
说明:本示例只介绍设备的认证相关配置,请同时确保已在RADIUS服务器上做了相关配置,如设备地址、共享密钥、创建用户等配置。假设已在RADIUS服务器上创建了用户名yc123,密码test#123。对...
- HTTPS是什么?加密原理和证书。SSL/TLS握手过程
-
秘钥的产生过程非对称加密...
- HTTPS TLS握手流程_进行tls握手
-
1.客户端向服务器发送`ClientHello`消息,包括支持的TLS版本、加密套件、随机数等信息。2.服务器收到`ClientHello`消息后,解析其中的信息,并根据配置选择一个加密套件。3....
- Spring Boot 单点登录(SSO)实现_spring boot 单点登录jwt
-
SpringBoot单点登录(SSO)实现全指南单点登录(SingleSign-On,SSO)是一种身份验证机制,允许用户使用一组凭证登录多个相关但独立的系统。在微服务架构和企业级系统中,SS...
- 源码分享:在pdf上加盖电子签章_pdf如何加盖电子公章
-
在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...
- 微信支付商户API证书到期 怎么更换
-
微信支付商户API证书到期更换是一个非常重要的操作,需要仔细按照流程进行。如果证书过期,所有通过API的支付、退款等操作都会失败,将直接影响您的业务。请按照以下详细步骤进行操作:重要前提:分清...