Android 如何从底层解锁?AT指令的操作

简介: 看此篇文章之前大致先了解什么是AT指令,AT命令(Attention)在手机中,用于对modem(也就是移动模块)通过串口命令进行操作,处理与语音电话、短信和数据。 其实安卓的拨打电话之类,底层执行的都是AT指令,包括基站。

看此篇文章之前大致先了解什么是AT指令,AT命令(Attention)在手机中,用于对modem(也就是移动模块)通过串口命令进行操作,处理与语音电话、短信和数据。
其实安卓的拨打电话之类,底层执行的都是AT指令,包括基站。

hardware\ril\reference-ril\Reference-ril.conRequest() 处理RIL_REQUEST_DIAL 时会 调用requestDial();
requestDial()中转换RIL_REQUEST_DIAL 请求为AT指令;
通过at_send_command()下发;
经过at_send_command_full,at_send_command_full_nolock ,writeline()写到设备中。

想具体了解的同学可以看

frameworks\base\telephony\Java\Android\telephony\TelephonyManager.java
frameworks\base\telephony\java\com\android\internal\telephony\ITelephony.aidl
frameworks\base\telephony\java\com\android\internal\telephony\RILConstants.java
frameworks\opt\telephony\src\java\com\android\internal\telephony\Phone.java
frameworks\opt\telephony\src\java\com\android\internal\telephony\PhoneBase.java
frameworks\opt\telephony\src\java\com\android\internal\telephony\PhoneProxy.java
frameworks\opt\telephony\src\java\com\android\internal\telephony\RIL.java
packages\services\Telephony\src\com\android\phone\PhoneInterfaceManager.java
hardware\ril\include\telephony\ril.h和hardware\ril\reference-ril\ril.h
hardware\ril\libril\ril_commands.h
hardware\ril\libril\ril_unsol_commands.h
hardware\ril\reference-ril\reference-ril.c

请求可以看下面

在onRequest中添加处理RILJ发送过来的AT命令
在processSolicited中添加
如果是2G网络frameworks\opt\telephony\src\java\com\android\internal\telephony\gsm\GSMPhone.java
如果是3G网络,比如CDMA2000:
frameworks\opt\telephony\src\java\com\android\internal\telephony\cdma\CDMAPhone.java

调试的话可以按照下面来操作

调试的时候可以用logcat -b radio命令查看信息。

一些常见的LOG TAG是:

 RIL: /hardware/ril/reference-ril/refereince-ril.c
 AT: /hardware/ril/reference-ril/atchannel.c
 RILD: /hardware/ril/rild/rild.c
 RILC: /hardware/ril/libril/ril.cpp
 RILB frameworks/base/telephony/java/com/android/internal/telephony/BaseCommands.java
 RILJ: /frameworks/base/telephony/java/com/android/internal/telephony/gsm/RIL.java
 GSM: /frameworks/base/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java



现在大多数智能手机也可以作为一个调制解调器。几乎每个调制解调器都是Hayes兼容的,这意味着它支持Hayes在1977年开发的AT语言的命令。每个型号都支持一些由制造商定义的基本命令集。有时这个命令集可以扩展,并可以包含非常有趣的命令。


让我们研究LG智能手机的行为。当您通过USB将其连接到计算机时,您可以自动访问调制解调器(图1)。LG特有的是,即使手机的屏幕被锁定,调制解调器也可用。
KARL-dujinyang

因此,即使手机受密码保护,我们也可以使用AT命令了解有关手机的一些有用信息。(图2)。
KARL-dujinyang

要了解这个模式支持什么命令,我们必须检查其固件。例如,对于Android智能手机,我们只需要研究文件/ system / bin / atd。图片3-5演示了在LG G3 D855手机上找到的一些AT命令。
KARL-dujinyang
KARL-dujinyang


很明显,手机支持大多数基本的AT +命令集,可以用于提取关于它的公共信息(图5)。但最感兴趣的是LG专有命令(AT%类型的命令)。这些命令(如AT%IMEIx,AT%SIMID,AT%SIMIMSI,AT%MEID,AT%HWVER,AT%OSCER,AT%GWLANSSID)返回有关手机的基本信息。其中包括一个命令AT%KEYLOCK(图4)。你可能猜到这个命令允许你管理屏幕锁定状态。为了研究这个命令行为,我们可以运行一个调试器并使用交叉引用来找到它的处理函数代码。如图6所示。
这里写图片描述

当调用命令AT%KEYLOCK时,根据参数数量,会从/system/lib/libatd_common.so库中调用lge_set_keylock()或lge_get_keylock()函数。图7显示出了函数lge_set_keylock()的代码。
这里写图片描述


正如你从图片8中看到的,如果你传递给函数lge_set_keylock()的值为“0”= 0x30,它将最终调用该函数,这将移除屏幕锁,无论你是用什么方法来锁定它(你可以使用PIN,密码,模式或指纹来锁定屏幕)。然后它将返回字符串“[0] KEYLOCK OFF”(图8)。
这里写图片描述
很明显,命令AT%KEYLOCK = 0允许您删除屏幕锁定,而无需任何额外的操作。

值得一提的是,此命令只会删除屏幕锁定,而不会影响用户设置。

该命令的工作原理如下:它将零值(意味着解锁)写入特殊RAM区域,该区域存储着负责屏幕锁定的值。这意味着该命令不以任何方式修改ROM。此行为是可以用来取证的,因为不访问任何用户数据,并且重新启动智能手机后将返回锁定状态。该命令不允许调查员找到屏幕锁定PIN /模式/密码; 它只是删除它一段时间。

为了进行此分析,我们使用了LG G3 D855型号(带有V20g-SEA-XX固件)。然而,上述AT命令已经被证明在其他LG智能手机(LG G4 H812,LG G5 H860,LG V10 H960等)上也可以正常工作。所有这些模型支持这种方法。

因此,它是很容易解锁手机的。所有你需要只是拥有一个LG Android智能手机,然后通过USB连接到一台电脑。这个后门显然是LG的服务软件,但也可以用于取证目的。但要记住,罪犯也可以使用这种方法。

相关文章
|
8月前
|
Java 数据库 Android开发
【专栏】Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理
【4月更文挑战第27天】本文探讨了Kotlin在Android开发中的多线程优化,包括线程池、协程的使用,任务分解、避免阻塞操作以及资源管理。通过案例分析展示了网络请求、图像处理和数据库操作的优化实践。同时,文章指出并发编程的挑战,如性能评估、调试及兼容性问题,并强调了多线程优化对提升应用性能的重要性。开发者应持续学习和探索新的优化策略,以适应移动应用市场的竞争需求。
216 5
|
8月前
|
Java Android开发
Android系统 获取用户最后操作时间回调实现和原理分析
Android系统 获取用户最后操作时间回调实现和原理分析
229 0
|
8月前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
150 0
|
5月前
|
开发工具 Android开发
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
207 4
解决Android运行出现NDK at /Library/Android/sdk/ndk-bundle did not have a source.properties file
|
5月前
|
开发工具 Android开发
Flutter: Android SDK not found at this location,Android Studio not found at xxx
Flutter: Android SDK not found at this location,Android Studio not found at xxx
176 2
|
7月前
|
XML API 开发工具
Android Bitmap 加载与像素操作
Android Bitmap 加载与像素操作
63 2
|
6月前
|
Android开发
Android kernel 操作gpio
Android kernel 操作gpio
73 0
|
7月前
|
存储 算法 Java
Android 进阶——代码插桩必知必会&ASM7字节码操作
Android 进阶——代码插桩必知必会&ASM7字节码操作
328 0
|
8月前
|
XML Java API
Android 浅度解析:系统框架层修改,编译,推送相关操作
Android 浅度解析:系统框架层修改,编译,推送相关操作
300 0
|
8月前
|
Android开发
[Android]视图的控触操作-MotionEvent
[Android]视图的控触操作-MotionEvent
73 0