Android中PIN和PUK码解锁研究
由于目前手头没有真机,只是在模拟器上修改部分telephony代码来调出请求输入PIN码的界面。具体方法:修改external/qemu/telephony/sim_card.c中的asimcard_create()函数,将card->status = A_SIM_STATUS_READY改为card->status = A_SIM_STATUS_PIN,然后重新编译代码生成image,启动模拟器就直接进入PIN码解锁界面。
PIN码解锁界面属于Phone Policy的一部分,代码位置在
framework/base/policy/src/com/android/internal/policy/SimUnlockScreen.java。当用户输入PIN码按下OK键时,会调用checkPin()函数,通过启动一个线程CheckSimPin来调用TelephonyManager的supplyPin()接口,并注册一个类似于Callback的虚函数onSimLockChangedResponse()并实现之,这样当supplyPin()调用返回时,触发该Callback函数。
supplyPin()接口的具体实现在PhoneInterfaceManager中,代码位置在
packages/apps/Phone/src/com/android/phone/PhoneInterfaceManager.java。首先创建一个线程并启动来维护一个Handler用于接收RIL上来的消息(SUPPLY_PIN_COMPLETE)。随后调用IccCard的supplyPin()方法并将Handler注册上去,此后一直wait,直到Hander收到指定消息后将其唤醒返回,并将操作结果传给其调用者。
如果成功,返回值为true,代表PIN码验证成功。 此时SimUnlockScreen中的onSimLockChangedResponse()方法会被调用,它会通知KeyguardUpdateMonitor去更新SimState的状态为IccCard.State.READY,并通知锁屏程序解锁成功。
如果失败,SimUnlockScreen界面会一直存在,直到连续输入三次失败后,IccCard.java会发出一个Action为”ACTION_SIM_STATE_CHANGED_LOCKED”的广播,由于KeyguardUpdateMonitor对它进行了监听,所以它的onReceive()会被触发,并根据Intent携带的Extras进行SIMState的修改,此时由于reason为“PUK”,故将SIMState置为PUK_ REQUIRED,并触发所有注册监听SIM状态改变的Callback。KeyguardViewMediator的onSimStateChanged()被调用,由于SIMState状态为PUK_ REQUIRED,所以屏幕Mode被设置为LockScreen此时会进入锁屏界面按道理此时需要输入PUK码进行PIN码的修改。但是由于目前的流程中没有对PUK码的请求输入进行处理,所以导致锁屏界面解锁后整个界面不可操作,具体原因可能要调查现有的锁屏程序,不过据我所知目前Android原生态的锁屏都有这个问题,即一旦PIN码锁住之后,手机使用不了,必须将SIM拔出在支持PUK解锁的手机上解锁之后才可以继续使用。
另外目前底层包括framework中均已支持PUK码的解锁,所以工作量都集中在应用程序及锁屏的部分代码中,有些问题可能还需要锁屏来支持。其实目前PUK解锁方式可以通过在紧急拨号盘中输入”**05*PUK*PIN*PIN#”来完成,只不过一般用户根本不知道和使用这个功能。所以需要自己来实现一套PUK码解锁界面,从目前来看放在Keyguard中比较合适。
经验呀
原文链接:http://blog.sina.com.cn/s/blog_6c1b75e70100tk2p.html
Android中PIN和PUK码解锁研究相关推荐
- 手机PIN、PUK码之谜
起因: 最近好多钱不翼而飞的事件发生,偶然看到一个小新闻,如果把SIM卡锁上,那么手机被偷之后第一层密码通过 刷机可以破解,你的手机卡不会被莫名的利用进行贷款消费之类的活动. 过程: 打开手机的设置- ...
- Android中ICS4.0源码Launcher启动流程分析【android源码Launcher系列一】
最近研究ICS4.0的Launcher,发现4.0和2.3有稍微点区别,但是区别不是特别大,所以我就先整理一下Launcher启动的大致流程.Launcher其实是贯彻于手机的整个系统的,时时刻刻都在 ...
- Ubuntu 14.04 64bit上curl-7.37源码包中的sample 源码示例研究
curl是Linux平台上(本人不考虑其他平台)很好用的一个工具软件,它有命令行,有C接口API,更常见的编程用途是php和python版本.如果在C/C++平台上使用curl,可以直接去官网 htt ...
- Android中的二维码生成与扫描
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51260428 本文出自:[顾林海的博客] 前言 月底离开公司,准备月底 ...
- java toast_详解Android中的Toast源码
Toast源码实现 Toast入口 我们在应用中使用Toast提示的时候,一般都是一行简单的代码调用,如下所示: [java] view plaincopyprint?在CODE上查看代码片派生 ...
- android中Zing二维码扫描,二维码生成
Android中二维码扫描的最常用库是zxing和zbar,zxing项目地址为https://github.com/zxing/zxing,目前还有多个人在维护.zbar主要用C来写的,对速度有要求 ...
- android获取按键键值,android中按键的扫描码和键值
kernel中的按键驱动通过input子系统上报的键值叫做扫描码(ScanCode),对应头文件在 kernel/include/uapi/linux/input.h andorid中的用到的按键才叫 ...
- Android开发——Android中的二维码生成与扫描
0. 前言 今天这篇文章主要描述二维码的生成与扫描,使用目前流行的Zxing,为什么要讲二维码,因为二维码太普遍了,随便一个Android APP都会有二维码扫描.本篇旨在帮助有需求的同学快速完成二维 ...
- android 中的二维码生成与去除白边
现在二维码应用越来越广泛,把一个url转换为二维码图片,让后去扫描,应用太多了.现在 zxing:core 包也用的相当广泛,android studio 使用也很方便,在 gradle 中加入配置, ...
最新文章
- 谷歌推出情境感知API
- 如何有效使用每一点脑力总结_如何更有效地节省脑力和编码
- 为什么 HashMap 的加载因子是0.75?
- 【自动驾驶】定位方式:RTK定位与激光融合定位
- Ryu oslo学习总结
- php basic syntax
- linux查看指定用户的所有进程
- hazelcast入门教程_Hazelcast入门指南第3部分
- 2022年轻人潮流爱好报告:被朋友圈高赞的神秘爱好,不烧钱还能脱单
- linux配置caffe环境,ubuntu14.04环境下配置caffe
- sql示例_PARSEONLY SQL命令概述和示例
- R语言转换并保存json文件--使用jsonlite包
- promoter:启动子预测程序(PPPs)软件现状及分析
- 预定系统 mysql_Jsp+Ssm+Mysql实现的酒店预定管理系统毕设指导思路模板
- POI导出 Excel 加水印支持 SXSSFWorkbook 和 XSSFWorkbook 模式
- 电子协会 C语言 1级 34 、分段函数
- virtualbox安装mac os x雪豹
- Python爬虫:查国家安全信息库
- 【转】小玄子和小桂子
- 软件测试中系统的功能测试,软件测试中的43个功能测试点(下)
热门文章
- 《Java 后端面试经》Java 基础篇
- scrapy 项目实战(一)----爬取雅昌艺术网数据
- Leetcode PHP题解--D35 876. Middle of the Linked List
- java 四则运算_四则运算————javaweb版
- C++ 贪心算法 摇摆序列
- Biological Pathways 生物途径(通路)
- 软件测试--白盒测试、黑盒测试、α测试、β测试
- 联发科技嵌入式_【MTK联发科技嵌入式驱动工程师面试】面试官人很好,问的问题很基础。-看准网...
- 23种设计模式-单一原则
- GMO宣布聘用高级管理人员Amy Shang来领导公司在大中华区的工作