您的位置:首页 > 移动开发 > Android开发

Android开发之adb && 破解开屏图案 && 代码判断当前是否处于锁屏状态并绕过解锁页面

2009-11-10 23:55 1131 查看
(1)adb(Android Debug Bridge)是Android提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态。还可以进行以下的操作:

1、快速更新设备或手机模拟器中的代码,如应用或Android系统升级(类似于MS的active sync);

2、在设备上运行shell命令(必须装设备驱动,如果不装对应的设备驱动,adb是不识别的);

3、管理设备或手机模拟器上的预定端口;

4、在设备或手机模拟器上复制或粘贴文件;

(2)安装过程:一般设备连入电脑后,会提示adb设备驱动,指定android开发包的usb_driver文件夹,自动安装完毕即可。之后会在设备管理器中找到adb interfaces。以下为一些常用的操作:

1、安装应用到模拟器:adb install。特别是无法从T卡点击安装软件的时候该方法很有效(比如无launcher)。有时我们装个更新版本的软件时提示签名错误,那就需要先卸载掉老版本的,这个需要ROOT权限才行

2、进入设备或模拟器的shell:adb shell。进入后会提示* daemon started successfully *,在这个Linux Shell中,你可以执行各种Linux的命令(路径是/system/bin/sh);另外如果只想执行一条shell命令,可以采用以下的方式:adb shell [command],如:dmesg会打印出内核的调试信息,避免在串口无用的时候无法调试;用exit退出SHELL状态。用adb devices查看设备连接状态时,如果显示设备Offline时,则需要重启嵌入式平台,或者用adb
kill-server,adb start-server执行看看,直到没有offline的设备,这之后应该就可以正常进入ADB了。

使用adb shell加上若干命令,可以完成一些特定功能。比如:

adb shell setprop ipod_debug 1 设置系统prop参数ipod_debug值为1

adb shell getprop > getprop.log 获取prop参数,并把参数定向到一个文本getprop.log中

adb logcat -v time > main.log 把Logcat消息定向到一个文本main.log中

3、复制文件:你可向一个设备或从一个设备中复制文件,复制一个文件或目录到设备或模拟器上:adb push 或adb pull ,比如把camera的拍照结果传回电脑,用:adb pull /sdcard/DCIM . 把目标文件夹内容拷贝到当前目录(play商店下载的apk包,一般都放在平台的/data/app中,可通过此方式取出来)。

有个拷入快捷的方法,就是在adb push后面直接拖拉文件路径在该处,后面再跟目标路径就行了,比如adb push xxx.apk /system/app,替换掉系统默认的APK;如果是adb install xxx.apk,则是装在了/data/app目录下,可以卸载的。如果操作时提示文件系统只读,尝试下运行adb remount。对应的,可以在shell中用rm删除system/app下面的apk文件,这可以用在卸载apk无效的时候,用rm xx.apk就可。

4、搜索模拟器/设备的实例:取得当前运行的模拟器/设备的实例的列表及每个实例的状态:adb devices

5、查看bug报告:adb bugreport

6、查看Logcat信息和kmesg信息:用adb logcat,在没有UART线的情况下,可查看内核的Kmesg信息,用adb shell cat /proc/kmsg > log.txt,这样Log.txt的内容会不断更新,通过不断的操作,可以得到最新的调试信息(亲身经历如果内核中如果UART打印太多,比如重复的计数器输出,adb打印会丢失LOG数据,uart则完全)。还有adb logcat -b radio,可以看到大量的关于RIL的信息。

7、获取设备的ID和序列号:adb get-product,adb get-serialno

8、访问数据库SQLite3:adb shell sqlite3

9、使用adb时提示“error: more than one device and emulator”,则说明目前PC上连接了多个android设备。在关闭任何设备的前提下,使用-s参数加设备名可以指定操作某个特定的设备。比如:adb -s emulator-5554 shell。

10、使用adb reboot可以重启手机,adb reboot recovery进入recovery模式。

11、kill杀进程,比如用ps | grep xxx*得到进程列表后,用kill进程号直接杀死它。

12、stop && start 重启framework

13、sensorservice & 手动启动sensorservice

14、getevent获得输入设备事件和信息,getevent -i先是列出注册的输入设备列表,诸如/dev/input/eventX等信息。getevent -lt就可以获得eventx实时的数据了,我的手机执行命令结果如下:睡眠之后就没有了



15,adb shell dumpsys列出系统应用的相关信息,adb shell dumpsys > "C:\Users\zhangcheng\Desktop\o.txt"

16,利用adb在没有TP的情况下,运行某个apk。比如我要运行Fps2D_3.1.0,从上面dumpsys的结果中查找Fps2D,得到如下信息:

com.edburnette.fps2d

intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.edburnette.fps2d/.Fps2D

可用am start -n {包(package)名}/{包名}.{活动(activity)名称}来运行某个应用,所以包名就是com.edburnette.fps2d,activity就是.Fps2D。运行命令如下:

am start -n com.edburnette.fps2d/com.edburnette.fps2d.Fps2D,即可运行fps2d这个应用。如果有应用的源码就更简单了,直接在androidmenifast.xml中找到相关信息。

(3)以下是一个综合应用:执行adb shell,进入SHELL命令状态。执行alsa_aplay -C -d 10 -t wav /data/foobar.wav,执行10秒钟的录音,并在特定路径下保存为foobar.wav文件。执行exit退出ADB SHELL,然后在DOS中继续执行adb pull /data/foobar.wav .把录音文件从设备中拷贝到当前电脑目录下,即可使用。

(4)MTK平台对USER版本软件Push更新的apk,可采用如下操作。首先对USER版本机子进行root(比如360ROOT),这个过程并不改变软件系统的权限属性,仅仅是增加了一个ROOT账户。执行:

adb shell

su

mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

chmod 777 /system

cd system

chmod 777 app/

Rm -rf xxx.odex (USER版本的都会有对应apk的odex解压文件)

之后就可以Push了。

(5)如何在ubuntu中使用adb,安装方法:

sudo add-apt-repository ppa:nilarimogard/webupd8

sudo apt-get update

sudo apt-get install android-tools-adb

将android设备连接至电脑,执行adb shell会提示“error: device not found”,adb安装OK。

如果提示无法找到设备,用lsusb查看新增的安卓手机的VID/PID,比如Bus 003 Device 006: ID 0bb4:0c03 High Tech Computer Corp. 那么我们进入到cd /etc/udev/rules.d/下,新建一个51-android.rules文件(sudo vim 51-android.rules),在这个文件中写上:

SUBSYSTEM=="usb", ATTRS{idVendor}==" 0bb4", ATTRS{idProduct}=="0c02",MODE="0666"保存,再为51-android.rules加上权限(sudo chmod a+x 51-android.rules)。之后,再拔掉usb重新插上就可以了。



=============================================================================================

破解普通的图案上锁,对于可以连上ADB的手机,我们可以利用ADB访问手机来破解上了开屏锁的手机。ADB连上后,进入/data/system,删掉gesture.key这个文件,再重启手机就OK 了。

=============================================================================================

判断当前是否处于锁屏状态。代码如下:

import android.app.KeyguardManager;
        
        KeyguardManager mKeyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
        if (mKeyguardManager.inKeyguardRestrictedInputMode()){
        	Log.i("TAG","keyguard now");
        }
        else{
        	Log.i("TAG","keyguard not");
        }

利用这个信息,加上GOOGLE提供的API,可以绕过输入密码才能解锁的页面。安卓系统提供了多种密码页面:图案解锁、PIN码解锁、输入密码解锁。方法如下(未验证):

If(mKeyguardManager.inKeyguardRestrictedInputMode()){
 
    //处于锁定界面,界面则通过KeyguardLock类方法来解锁
 
    KeyguardLock keyguard = mKeyguardManager.newKeyguardLock(getLocalClassName());
 
    keyguard.disableKeyguard();
 
}

还要加上一些权限:

<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>

由于屏幕锁定时通过电脑上豌豆荚等软件只能安装Apk,并不能启动apk,所以此程序要写成开机启动,即当屏幕锁屏时,通过电脑豌豆荚等软件安装此软件后重启即可实现Pass掉屏幕锁界面。

参考原文:http://www.2cto.com/Article/201210/162878.html

参考原文:http://www.oschina.net/question/565065_58462

参考原文:http://www.iteye.com/problems/80141
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: