首页 > 其他分享 >一次简单的蓝牙相关安卓代码逆向记录

一次简单的蓝牙相关安卓代码逆向记录

时间:2023-06-07 14:25:24浏览次数:61  
标签:逆向 安卓 低功耗 蓝牙 修改 日志 设备

前言

  本来工作方面和安卓根本没任何交集,把这个过程记录下来,只是一个小总结。涉及到的知识点有,安卓逆向,Smali修改,安卓apk签名,蓝牙连接,ADB。

基本需求

  手里有一个设备,是支持双模蓝牙的。也就是经典蓝牙使用的名称和MAC地址,和低功耗蓝牙使用的是一样的。之前其他人开发过一个安卓应用,采用经典蓝牙和设备通讯并对设备进行测试。想要抓取下安卓应用和设备之间的通讯数据,进行一些分析。

解决思路

  因为设备上的代码不能修改,也没有调试接口,就不考虑从这里下手了。对于蓝牙通讯,虽然有专门的监听设备,也不考虑购买。发现nRF Connect可以显示一些蓝牙上的数据,但是只支持低功耗蓝牙,所以考虑让安卓应用使用低功耗蓝牙来和设备进行通讯。
  安卓应用只有部分源代码,无法重新编译。而且本身也不是做安卓开发的,重新开发一个应用,时间成本太高。搜索到了Apktool这个工具,可以对安卓apk文件进行逆向工程。想着修改的地方应该不多,就朝着这一步进行了。
  蓝牙连接方式这一块的Java源代码是有的,而且逻辑也比较简单。就是根据应用自己的蓝牙连接方式,以及设备支持的蓝牙模式来选择是低功耗蓝牙还是经典蓝牙。想要使用低功耗蓝牙,只要把一些变量强制修改成低功耗蓝牙需要的值就可以了。对照着蓝牙连接的Java源代码,将逆向出来的Smali文件进行了修改,这一步主要理解了put用法,以及switch语句生成的Smali指令流程,使用了const和move指令来强行修改变量的值。
  修改之后,再使用Apktool合成新的apk,但是在安装到手机时出现问题。查阅网上资料,可能的原因是没有签名。在Ubuntu系统上安装了apksigner工具,并进行签名后,在手机上安装成功。
  安卓应用扫描蓝牙时,没有任何设备出现。使用该应用另外一个测试菜单时,询问要获取定位权限,之后可以扫描出蓝牙。和设备进行连接,确实使用的是低功耗蓝牙,但是却不能连接成功。
  查看蓝牙连接代码,使用的是connectGatt。以函数名为关键字进行搜索,发现有人碰到了类似的问题。原来这个函数最开始只有三个参数。在Android M之后,这个函数被重载了,增加了几个参数。第四个参数可以是BluetoothDevice.TRANSPORT_AUTO,BluetoothDevice.TRANSPORT_BREDR或BluetoothDevice.TRANSPORT_LE。默认是AUTO,要连接到低功耗,就要使用LE。再修改Smali指令,加入第四个参数,取值是2。重新安装应用后,运行时出现闪退。
  怀疑和在Smali中增加参数有关,搜索invoke-virtual相关,发现不仅有实参列表,还有形参列表。同步修改形参列表,增加I表示整型参数。重新安装应用,可以以低功耗蓝牙方式进行连接。但是和设备通讯不稳定,之前可以和设备完成整个测试流程,使用新的应用会概率性地出现测试流程中断。
  控制测试流程的源代码没有了,只好另外想办法。在现有的代码中看到有日志功能,并且使用了android.util.Log类,可以使用adb logcat提取出相应日志。日志功能默认是没开启的,再次修改Smali文件,合成新的apk。安装后的日志可以通过adb logcat提取出来。
  从日志中看到有一次向设备发送蓝牙数据后,没有得到回应,之后测试就中断了。本来想要继续分析日志,来看为什么没有得到回应时,突然想到既然可以通过logcat查看到日志,那么在原来的应用基础上进行一点修改,不就可以看到蓝牙通讯数据了,也不用强制使用低功耗蓝牙了。
  在最开始的应用上,使能日志功能,经典蓝牙通讯没有出现问题,也可以通过logcat看到蓝牙通讯数据。至此,最开始的需求已经得到满足。

随想

  如果对于安卓足够熟悉,可能一开始就会想到使用adb来查看日志这个选项。而不会走到要强制使用低功耗蓝牙,并解决后续若干问题的路上。也再次提醒要注意XY问题

标签:逆向,安卓,低功耗,蓝牙,修改,日志,设备
From: https://www.cnblogs.com/watsondd/p/17462987.html

相关文章

  • 11. Mybatis的逆向工程
    正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:Java实体类Mapper接口Mapper映射文件1.创建逆向工程的步骤‍①添加依赖和插件‍<!--依赖MyBatis核......
  • 开发板-高通MTK开发板,4G/5G安卓方案开发定制
    开发板是一款用于嵌入式系统开发的电路板,它由中央处理器、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等一系列硬件组件组成。通常情况下,嵌入式系统开发者可以根据自己的需要自行订制开发板,也可以自主设计开发板。开发板不仅可以帮助初学者了解和学习系统的硬件和软......
  • re | buuctf逆向刷题之Ultimate MineSweeper全分析
    写在前头最近在buuctf上刷逆向题,做到UltimateMineSweeper,这是一道用.NET写的扫雷题,题目不难,有类名和函数名符号,分析起来很容易,耐心一点都能找到flag,但是我还是对这个题目很感兴趣,毕竟每个逆向爱好者都有一颗破解扫雷的心,所以我还是认真的把整个程序都逆了一遍,再加上目前在网上看......
  • uniapp能对接蓝牙打印机吗? 答案是肯定的
    ​答案是肯定的,以下是一个使用“uni-bluetooth-print”插件连接蓝牙打印机的示例代码:1.在项目目录中运行以下命令安装插件:npminstalluni-bluetooth-print2.在代码中导入插件:importbluetoothPrintfrom'uni-bluetooth-print';3.调用 `connect()` 方法连接蓝......
  • 在Windows中通过批处理设置仅允许指定的蓝牙设备硬件ID,请按照以下步骤进行操作
    在Windows中通过批处理设置仅允许指定的蓝牙设备硬件ID,请按照以下步骤进行操作:打开记事本或其他文本编辑器。输入以下内容:CopyCode@echooffsetHARDWAREID=DEVICE_ADDRESS_IN_HEXregadd"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Bluetooth"/v"A......
  • 对于安卓发送 http 请求的实践
    配置权限配置要注意配置的位置1添加网络权限<manifest><application>.......</application><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission......
  • 逆向大法好-----实战中的IDA和OD一把梭
    0X01一直对D盾检测账号克隆的功能感到好奇,终于跟着老师傅的教程手把手学会了怎么用IDA,OD配合去逆向分析。D盾有一项功能是账号克隆:通过StudyPe查看,使用了NetUserEnum相关的函数通过查看msdn的例子:https://docs.microsoft.com/zh-cn/windows/desktop/api/lmaccess/nf-lmaccess-netus......
  • 逆向思维获取他人信任
    以往的做法以往的做法往往是尽量收集受害人信息,从而简历与受害人之间的信任,随着人们对个人信息的重视以及官方对诈骗分子的宣传,大部分人都拥有极高的警惕性,而且收集一个人尽可能多的信息从而应对各种***钻古怪的问题并不容易,这样的成本显然是极高的。反向建立自己与受害人之间的......
  • 带你入逆向坑,怎样在win10上安装并使用Z3库
    点点关注,本萝莉就亲亲你上回说到三道不同平台的Reverse题目带你入逆向坑本文主要是写一下自己在使用Z3约束器来解方程时遇到的坑失败了好多次 才流泪写下这篇教程(好几次都想放弃)  避免大家和我一样浪费时间百度谷歌了好久也没找到方法话说大佬们是不是有什么技巧ps:大家给......
  • MT6853(MTK6853)核心板 5G联发科安卓核心板定制
    MT6853(MTK6853)核心板是一款高性能低功耗的核心板,由八核CPU组成,其中包括两个主频高达2GHz的ArmCortex-A76的大核,以及6个小核(2GHz的Cortex-A55)。GPU采用强大的ArmMaliG57,具有快速响应和优秀的3D渲染能力。此外,高性能LPDDR4X内存频率高达2133MHz,加快了数据读写速度,使设备......