我是如何Hack一个机器人的? 我是如何hack一个机器人的英文
haoteby 2024-11-06 18:36 14 浏览
在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
相关推荐
- 谷歌开源大模型评测框架正式发布,AI模型评测难题迎刃而解
-
近日科技巨头谷歌正式推出其开源大模型评测框架LMEval,这一创新工具为全球AI开发者和企业提供了标准化的模型评估解决方案。LMEval的发布不仅标志着AI模型评测迈入透明化时代,更通过多项核心技术...
- Android 开发中文引导-动画和图形概述
-
安卓系统提供了各种强大的API,用来将动画应用于界面元素和自定义2D和3D图形的绘制当中。下面的小节大概的描述了可用的API和系统功能并帮助你决定那个方案最适合你的需要。动画安卓框架提供了两种动画系统...
- Qt5 C++入门教程-第12章 绘图(QPainter)
-
QPainter类在Qt5中进行绘图时起着重要作用。绘图操作是通过QPainter类在响应paintEvent方法时完成的。线条在第一个示例中,我们在窗口的客户区绘制了一些线条。line...
- 文创测评︱《如意琳琅图籍》:本土原创解谜书的胜利?
-
设想这样一个场景,你打开一本书,就化身为乾隆三十六年紫禁城中的画画人周本,有一天你在故纸堆中找到一本神秘的《如意琳琅图籍》,踏上寻宝旅程,历经各种离奇复杂的故事……这是故宫与奥秘之家联手打造的创意解谜...
- gif动图制作攻略!快快收藏(求gif制作的动图)
-
有事没事斗图玩是当下人们乐此不疲的事情,手里的gif动图也渐渐成为了人们抬杠互怼的一大资本。好有趣,好炫酷,gif是怎么做出来的?我也想做。什么?你不会?没关系,我来教你!首先介绍一下制作gif动图需...
- eduis未能初始化界面 无法启动 问题解决办法
-
1.如果edius安装后启动后出现failedtoinitializeskin中文提示无法初始化界面的错误。这说明你的电脑安装了双显卡,而edius所使用的是图形显卡。可以选择edius图标右键...
- Flash Player模拟器更新:Rufffle(flash模拟器安卓下载高版本)
-
Ruffle是一个适用于WindowsPC的FlashPlayer模拟器,用Rust编写。Ruffle作为一个独立的应用程序在所有现代操作系统上原生运行,并通过使用WebAssembly在所有现代...
- 支持终身免费4G流量,星星充电7kW星际智能交流充电桩拆解
-
前言近期星星充电推出了一款星际智能交流充电桩,在正面设有灯条,可根据灯条颜色和显示直观了解充电状态,并设有屏幕显示充电状态和ui表情。充电桩支持220V/7kW充电功率,适配主流新能源车型。并支持终身...
- 乐动随心之fancy pop(乐动随心壶多少钱一个)
-
跳动飞扬的音符像是连通人与人之间心电感应的通关密码,融化陌生,拉近彼此。此次我们邀请到宅男女神江语晨,化身音乐精灵。在歌手、演员身份间游刃自如的她,为我们生动诠释了三种不同的音乐时尚风格,娴静可爱,灵...
- Asus Zenflash 手机也能玩引闪,从此相机是路人
-
在讲解Zenflash之前,不得不提索爱的K750c,这个机器采用了氙气闪光灯,让手机的拍摄上了档次,可玩性更高,不过,说实话,当时手机的摄像头像素低,成像一般,没有掀起太大的波澜,可现在,手机的Cm...
- Axure有哪些鲜为人知的使用技巧?(axure的使用教程)
-
阿拓带你飞:不管是想入门产品经理还是已经是PM的人对AXURE都很关注,它是制作产品原型的重要工具,但是有多少人了解AXURE的使用技巧?本文是来自“知乎问答”整理的回答,一起来看看那些不常用的使用技...
- 挑战黑夜 华硕ZenFlash氙气闪光灯评测
-
【机锋配件】说到摄影,相信许多朋友都非常喜欢,不管是外出游玩拍拍风景,还是和朋友之间聚会,都会掏出手机拍两张,在餐前拍照晒朋友圈更是成为了许多用户的日常爱好,就算不是专业的摄影爱好者,大家也都有一颗热...
- WPS 演示倒计时 3 步设置!从数字动画到进度条全场景教程
-
做PPT时想添加倒计时却找不到入口?WPS演示自带的"动画+计时"功能就能轻松实现——无论是课堂互动的30秒答题倒计时、商务汇报的5分钟限时讲解,还是活动暖场的动...
- flash动画an制作MG动画元素如何调节透明度,小白...
-
如何在flash动画软件里面调节mg动画元素的透明?因为flash动画软件现在已经升级为flash动画软件,所以直接用新版flash动画软件开工,基本功能都差不多,只是flash增加很多智能化、人性...