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

看此篇文章之前大致先了解什么是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的服务软件,但也可以用于取证目的。但要记住,罪犯也可以使用这种方法。

时间: 2024-11-16 14:05:56

Android 如何从底层解锁?AT指令的操作的相关文章

Android 蓝牙 能否广播一条指令让多个蓝牙设备收到?

问题描述 Android 蓝牙 能否广播一条指令让多个蓝牙设备收到? 请教各位大神,蓝牙是否能广播一条指令让多个蓝牙设备收到? 我想通过手机通过控制多个蓝牙灯,如何处理?在线等. 解决方案 你可以构建一个蓝牙局域网来实现你的要求 http://blog.163.com/kjpt126%40126/blog/static/4894042620071112113059874/

轻松实现Android自定义九宫格图案解锁_Android

Android实现九宫格图案解锁,自带将图案转化成数字密码的功能,代码如下: LockPatternView.java package com.jackie.lockpattern; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.text.TextUtils; i

android怎么从底层解决防截屏的问题

问题描述 android怎么从底层解决防截屏的问题 android怎么从底层解决防截屏的问题,除了this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);这个. 解决方案 定制一个OS,然后不让用户root,应该就可以实现不让用户截屏.另外,虽然不能截屏,但是总可以用摄像头直接拍手机屏幕吧? 解决方案二: 楼上的意思说的差不多把 解决方案三: 浅谈android截屏问题

轻松实现Android自定义九宫格图案解锁

Android实现九宫格图案解锁,自带将图案转化成数字密码的功能,代码如下: LockPatternView.java package com.jackie.lockpattern; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.text.TextUtils; i

Android 开发之 ---- 底层驱动开发(一) 【转】

转自:http://blog.csdn.net/jmq_0000/article/details/7372783 版权声明:本文为博主原创文章,未经博主允许不得转载. 驱动概述         说到 Android 驱动是离不开 Linux 驱动的.Android 内核采用的是 Linux2.6 内核 (最近Linux 3.3 已经包含了一些 Android 代码).但 Android 并没有完全照搬 Linux 系统内核,除了对Linux 进行部分修正,还增加了不少内容.android 驱动

Android手机屏幕敲击解锁功能代码

1.前言 现在市面上有不少Android手机支持敲击屏幕解锁,敲击屏幕解锁是一项很实用的功能,但一来只支持敲击屏幕,二来只能用于解锁或锁屏,再者我们应用层的开发者切不进去,完全无法玩起来.开发者,开发者,我们既然身为开发者何不搞点大新闻,那么这次我来教教各位如何用代码来实现手机的敲击识别,听起来是不是很有趣,有些跃跃欲试呢.事实上在ios上已经有实现这个功能的应用:Knock,一款敲击来解锁Mac电脑的应用,售价4.99美元,约为33人民币.有时候真想去做ios开发,可以开心的为自己的应用定价,

Android 通过onDraw实现在View中绘图操作的示例

以下是对Android通过onDraw实现在View中绘图操作的示例代码进行了详细的分析介绍,需要的朋友可以过来参考下   Android绘图操作,通过继承View实现,在onDraw函数中实现绘图.下面是一个简单的例子: 复制代码 代码如下: public class AndroidTest extends Activity {     /** Called when the activity is first created. */     @Override     public void

javaee-当String的对象,从a编程ab的时候,底层jvm会执行哪些操作?

问题描述 当String的对象,从a编程ab的时候,底层jvm会执行哪些操作? 我觉这个问题会设计到很多的知识点 public static void f3(){ String str = "a"; str+="b"; } 例如线程,栈,堆 各位们可以说下自己的理解吗? 解决方案 先创建一个str指向存储a的内存,相加的时候产生b的内存,加完产生存储ab的内存并且str指向存储ab的内存,a b短时间还再占用内存随后被回收 解决方案二: 字符串的操作相对特殊,每次操

Android官方入门文档[7]样式化操作栏

Android官方入门文档[7]样式化操作栏   Styling the Action Bar样式化操作栏   This lesson teaches you to1.Use an Android Theme2.Customize the Background3.Customize the Text Color4.Customize the Tab Indicator You should also read•Styles and Themes•Android Action Bar Style