看此篇文章之前大致先了解什么是AT指令,AT命令(Attention)在手机中,用于对modem(也就是移动模块)通过串口命令进行操作,处理与语音电话、短信和数据。
其实安卓的拨打电话之类,底层执行的都是AT指令,包括基站。
hardware\ril\reference-ril\Reference-ril.c 中 onRequest() 处理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特有的是,即使手机的屏幕被锁定,调制解调器也可用。
因此,即使手机受密码保护,我们也可以使用AT命令了解有关手机的一些有用信息。(图2)。
要了解这个模式支持什么命令,我们必须检查其固件。例如,对于Android智能手机,我们只需要研究文件/ system / bin / atd。图片3-5演示了在LG G3 D855手机上找到的一些AT命令。
很明显,手机支持大多数基本的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的服务软件,但也可以用于取证目的。但要记住,罪犯也可以使用这种方法。