前言

华为手机在刷入第三方rom需要首先解锁手机,而获取解锁码必须要在华为官网进行,并且有14天限制,这无疑给某些特殊需求的用户和rom定制厂商设置了一个很大难题,也为华为保护自身定制软件提供了有利因素,因此这里给出获取华为解锁码的思路。

方法一   
通过在内置存储卡中dump出nvme分区,搜索WVDEVID关键字获得,这样做的缺陷是手机需要root

255|shell@hwp7:/ $ su
root@hwp7:/ # cd /storage/sdcard1/
root@hwp7:/storage/sdcard1 # mkdir -p PartitionBackup
root@hwp7:/storage/sdcard1 # cd PartitionBackup
root@hwp7:/storage/sdcard1/PartitionBackup # dd of=nvme \
> if=/dev/block/platform/hi_mci.0/by-name/nvme
8192+0 records in
8192+0 records out
4194304 bytes transferred in 0.916 secs (4578934 bytes/sec)
root@hwp7:/storage/sdcard1/PartitionBackup # dd of=oeminfo \
> if=/dev/block/platform/hi_mci.0/by-name/oeminfo
65536+0 records in
65536+0 records out
33554432 bytes transferred in 8.768 secs (3826919 bytes/sec)
root@hwp7:/storage/sdcard1/PartitionBackup # dd of=recovery \
> if=/dev/block/platform/hi_mci.0/by-name/recovery
32768+0 records in
32768+0 records out
16777216 bytes transferred in 4.419 secs (3796609 bytes/sec)
root@hwp7:/storage/sdcard1/PartitionBackup # strings nvme | grep WVDEVID -B 1
<font color="#ff0000">1234567890123456</font>

方法二

通过华为工程模式获得,但是需要获得工程模式授权,具体逆向思路如下(华为工程模式的详细介绍请问度娘:))

0x00得到拨号*#*#2846579#*#*呼出的工程模式设置activity的信息

1.首先拨号*#*#2846579#*#*呼出工程模式菜单ProjectMenuAct

2.输入:adb shell dumpsys activity|grep “Runningactivities” –A 7

得到ProjectMenuAct这个Activity的信息,从下图可以看出来该Activity所在的包名为com.android.huawei.projectmenu。

3.得到包名为com.android.huawei.projectmenu对应的apk路径

可以知道ProjectMenuAct这个Activity在/system/app/ProjectMenuAct.apk中,我们把这个apk以及odex给pull下来进行逆向分析。

0x01 反编译ProjectMenuAct .odex

由于华为手机的dalvik虚拟机添加了一些内部java方法,直接用baksmali反编译会失败,需要特殊处理,请详见我博客上的文章: http://blog.csdn.net/autohacker/article/details/50159703

0x02 分析ProjectMenuAct应用

通过代码可以看出,ProjectMenuAct通过android属性系统启动了一个名为atcmdserver的进程用于作为华为手机工程模式的服务端。

0x03逆向atcmdserver

用IDA attach进程atcmdserver

通过在IDA中搜索字符串关键字key,结合交叉引用我们可以逐步找到华为工程模式的命令表所在的内存地址,如下图所示:

进一步调试发现华为工程模式的验证授权流程的主要逻辑是通过

AT^CHECKAUTHORITY
AT^CONFORMAUTHORITY=
而获取bootloader解锁码是如下指令(必须通过授权之后才能获得)
AT^WVKEY?

每一条指令都有先对应的函数来处理,下图中贴出AT^CHECKAUTHORITY的处理程序(图中的各函数通过各种分析处理后修复了堆栈平衡并且根据函数具体功能进行了重命名)


具体的逻辑请见测试代码,如下:
import serial
import timedef calckey(seed):pass  #这里不给出具体加密算法,鉴于合同原因,只给出思路def serio(ser , istr , timeout = 0.5):ser.timeout = timeoutistr=istr +"\r\n"ser.write(istr)ostr = ser.readall()print "send:%s\trecv:%s"%(repr(istr),repr(ostr))return ostrser = serial.Serial('com31',115200)
#ostr = serio(ser , 'AT^LED')
#ostr = serio(ser , '?')
#ostr = serio(ser , 'AT^FBLOCK?')
ostr = serio(ser , 'AT^MODEM=0')
ostr = serio(ser , 'AT^CURC=0')
ostr = serio(ser , 'AT^WVKEY?')
ostr = serio(ser , 'AT^CHECKAUTHORITY=?')
ostr = serio(ser , 'AT^CHECKAUTHORITY')
seed = ostr.split("\r\n")[1]
seed = seed[seed.index(":")+1:].strip()
key = calckey(seed)
#key = 'aa06c7b48dd42909926e8223f34aed30baea9bbe44926d818aa81464f5178150a66da672483cbab08a13cc7240d85066878c2a640c4cf26f3d8a8b6969d0a788304bab1dd567fe80bc6c1ca170eda312af3cb0089f12bdde014dd2a0d516526e8ac403a112ec81e20f3f692dc3d7abb590c2b312613422d6a734817310732125'
ostr = serio(ser , 'AT^CONFORMAUTHORITY='+key)
time.sleep(3000)
"""
ostr = serio(ser , 'AT^CURC=0')
ostr = serio(ser , 'AT^SN?')
ostr = serio(ser , 'AT^BSN?') #Serial NR
ostr = serio(ser , 'AT^PHYNUM?')
ostr = serio(ser , 'AT^ALLVER?')
ostr = serio(ser , 'AT^FBLOCK?')
ostr = serio(ser , 'AT^GETRAM?')
ostr = serio(ser , 'AT^GETEMMC?')
ostr = serio(ser , 'AT^WVKEY?')
ostr = serio(ser , 'AT^VENDORCOUNTRY?')ostr = serio(ser , 'AT^MODEM=1')
ostr = serio(ser , 'AT^MODEM=1')
ostr = serio(ser , 'AT^CURC=0')
ostr = serio(ser , 'AT^CURC=0')
ostr = serio(ser , 'AT^PHYNUM?')
ostr = serio(ser , 'AT^SIMLOCKDATAREAD?')
ostr = serio(ser , 'AT^IDENTIFYSTART')
"""
ser.close()
另外我在上传了分析过程中保存的版本为IDA6.6的idb分析文件,用IDA打开后按快捷键ctrl+M能看到我处理过后的函数,能大大简化逆向分析工程,详见:

http://download.csdn.net/detail/autohacker/9438916

获取华为解锁码的思路相关推荐

  1. root精灵华为解锁,华为刷机精灵解锁

    华为手机怎么解除root权限 不建议root. 1.root后,可能无法达到最佳工作状态,部分软硬功能可能无法正常运行.同时由于第三方固件未经充分测试,可能存在兼容性问题,另外系统安全性无法得到保障, ...

  2. xa 全局锁_索尼Sony Xperia X/Performance/XA解锁教程及解锁码

    来说一下有关索尼Sony Xperia X/Performance/XA的解锁教程了,这个解锁也比较简单的,是解锁BoootLoader的,之前有机友不知道这个,也不会进行解锁,所以下面整于了一下详细 ...

  3. 华为荣耀5X解锁码申请及解锁详细教程

    2019独角兽企业重金招聘Python工程师标准>>> 荣耀5X刷机包下载 华为荣耀5X怎么解锁?很多朋友购买了华为荣耀7都第一时间想获取ROOT权限,华为荣耀5X采用的是高通处理器 ...

  4. 红米note5解锁教程_红米Note 5A解锁BL教程_红米Note5A获取解锁码进行解锁

    下面是有关红米Note 5A手机的解锁教程了,为什么要说手机的解锁操作呢,因为手机不解锁的话就不能进行相关的root操作,所以在这里整理了一个详细的解锁操作供大家参考,这个解锁也是先要获取解锁码,然后 ...

  5. 红米note5解锁教程_红米Note5解锁bl教程_红米Note5获取解锁码进行一键解锁的方法...

    下面也是这个小米红米Note5手机的解锁bl的教程了,为什么要解锁这个bl呢,因为手机只有解锁了bl之后才可以刷第三方的系统包,才可以进行第三方的root包的刷入操作,当然也包括线刷操作,所以这个解锁 ...

  6. 我阅读SDK源码的思路

    作为开发工程师,我相信每个同学都经历阅读别人源码.阅读源码这件事情,我经历了不少次.今天就来谈谈一些我阅读源码的心得. 第一步:配合开发文档找入口,我们阅读源码的时候.会经常碰到下面这种情况 源码之所 ...

  7. 前端怎么获取华为云IoT设备数据

    这个开发过程中没有后端,只能获取华为云设备的实时数据,个人思路是先获取token,拿到token后,携带在请求头中,根据这个获取设备的实时数据,而且也没有数据库,没有注册登录页面,和传统的前后端分离的 ...

  8. 微信小程序利用云函数获取小程序码(二维码) 将buffer流转换为图片

    最近在做毕设,有一个获取小程序码绘制分享海报的需求,因为需要小程序码的数量较多的业务场景,所以只能采用后端生成返回给前端调用或者云开发调用. 生成小程序码的两种方式 HTTPS调用 需要后端生成返回给 ...

  9. 微信小程序获取二维码

    原文链接:https://blog.csdn.net/w410589502/article/details/77702358/ 版权归原有博主,此处为了方便自己是查看,故copy一份,B接口调用,亲测 ...

  10. c#通过HTTPS获取华为北向数据(一)——.NET的sdk和json封装

    第一步 获取华为云物联网平台的证书 (需要证书的可以留言) 第二个证书在华为oceanconnect上传() 本次测试c#端只需要第二个证书就可完成 首先我们看先看看它的api 应为我们只需要读取NB ...

最新文章

  1. python输入什么就输出什么意思_一文读懂Python的输入和输出
  2. 概率编程库Pymc3案例之鲁棒线性回归
  3. Python面试题-朋友昨天去面试,这5个Python面试题都被考到了,太神奇了!
  4. 为 IDES471 激活中文
  5. Swift高速入门之函数
  6. idea文件为橙色去掉版本控制
  7. 行内元素多出的空白文本节点的解决方法
  8. 《C++游戏编程入门(第4版)》——1.9 本章小结
  9. 你还在因为数学对AI望而却步?看看这本秘籍吧
  10. centos7安装docker笔记
  11. Redis--位图BitMap
  12. spring.xml
  13. 英特尔开源技术中心招收虚拟化工程师若干(北京/上海)
  14. csc.exe(C# 编译器)
  15. 自学编程入门,先学什么语言好?
  16. 我的第一个WFF项目
  17. vue实现在线编辑excel(转)
  18. VSCode C/C++ 使用指北
  19. 怎样记账家庭成员收支,搜索查看明细
  20. 记录一次阿里云服务器迁移

热门文章

  1. 南阳理工计算机与信息工程学院,南阳理工学院计算机与信息工程学院
  2. 做了一个电驴 p2p资源搜索小软件
  3. Zynq-Linux移植学习笔记之47-PL部分spi flash文件系统挂载
  4. 电脑开机蓝屏时要怎么解决修复?哪种方便比较好?
  5. MTK手机刷机包打包步骤
  6. android高清壁纸,40张极Cool的Android系统桌面壁纸
  7. FlashFXP v3.5.4注册码+FlashFXP v3.6.0注册码+FlashFXP v3.7.2.build.1266...
  8. Python 如何检测敏感词汇
  9. 中国移动5G智慧港口典型业务场景分析
  10. pycharm 输入法光标跟随