手机维修学习记录

因为要搞IOT和工控的研究,想从底层研究一下硬件,但一直对电路板这个绿莹莹的东西很害怕。前几天在DEFCON CHINA现场玩了个焊小时钟,觉得焊接还挺好玩的,回家的路上正巧看到迅维论坛的人发朋友圈,有个手机维修培训班,一拍脑门我就来了。说起知道这个论坛还是有点故事的,去年我电脑坏了,macbook pro 2013,开机突然白屏问号,怎么也进不去系统,网上翻了半天,找到了以篇帖子MACBOOK PRO不认硬盘 通病,要花两块钱注册会员,帖子两毛钱,总共两块二,花钱解锁后内容如下:

image

淘宝一个硬盘排线换上就好了,对这个论坛印象还是蛮好的吗,现在这个论坛有网课,直播,实地培训,还有一个集合了各种图纸的查询系统鑫智造,还是很有货的,这玩意长这样:

image

苹果的主板是有PCB的点位图,点击可以去到线路图的窗口中搜索,一个简易的导航功能,安卓的仅有部分有pdf的点位图,具体功能后续介绍。

DAY 1

江湖纪实:基本都修苹果,没多少人修安卓。你扪心自问你android手机坏了,除非想找回里面的数据,要不然你会修么?

找到了一个360的安全研究员的博客:硬件维修笔记

手机维修必不可少:

  • 配件
  • 资料(电路图,点位图,芯片引脚等)

常用大工具:

  • 烙铁:对于板子:350摄氏度,对于芯片270-300摄氏度
  • 风枪:直通风枪(吹小芯片),旋转风风枪(吹大芯片),使用温度 = 基础温度(280左右,4挡风)+ 补偿温度(10-40度)
  • 可变电压电源:修手机:3.3v-5v
  • 显微镜:观察电路板

常用小工具:

  • 斜口钳:拆静电保护套
  • 低温锡膏:138摄氏度融化,一般用作中和焊板和焊小元件(电容电阻等)
  • 中温锡膏:183摄氏度融化,常用焊接芯片
  • 吸锡线:清理焊板上的残留锡膏
  • 焊油:使焊锡在焊板上光泽成球
  • 注射器:向焊板上注射焊油,控制剂量
  • 镊子:夹取原件
  • 螺丝刀:各种型号
  • 洗板水:清晰焊板上残留的脏东西
  • 毛刷:和洗板水无尘布配套使用
  • 松香:判断短路发热
  • 绿油:绝缘体,填补PCB版刮花产生的意通路
  • 手术刀:刮胶
  • 无尘布:清理
  • 钢网:BGA植锡

DAY 2

江湖纪实:要修安卓的人不仅少,而且安卓的芯片大部分打了胶,很考验手上功夫的。

上午主要讲了iphone不同版本的主板的区别,对于iphone6的主板大概如下:

image

上图为一张主板的正反面,可见由SIM卡槽拦腰一刀,上半身是CPU管理,下半身是基带芯片管理,当然也是下半身负责手机的基本通讯功能。

这里有如下知识点:

关于处理器:

  • iphone的处理器是苹果自己生产的a系列处理器,如a8,a9…a12,基于arm指令集
  • a系列处理器硬件上分为两层,上层为ram,下层为cpu,即a系列处理器自带内存
  • android机器的处理器和基带一般是采用高通,联发科等集成好的,但不一定集成内存

关于ROM:

  • 手机的存储固件的flash芯片,在手机行业仍然成为“硬盘”,android的eMMC称之为“字库”
  • 老师说,无论是苹果还是android的硬盘,都无法直接读取其中的内容
  • 苹果手机的存储固件的芯片为nand,常见的厂家为:海力士,东芝,闪迪等
  • android手机的存储固件芯片为eMMC,原理是芯片中封装了nand以及控制器,统一对不同厂商的nand芯片的操作

关于基带:

  • 基带芯片本身负责信息和基带码的转换,信号的发射是由功放芯片和天线完成的
  • 苹果后期与高通发生矛盾,采用了intel基带,被吐槽信号不好,老师说,信号不好未必与基带相关

关于码片:

  • “码片”这词为维修行业的专有名词,貌似是一个EEPROM的flash芯片,许多芯片有属于自己的“码片”,这玩意在制造行业里叫啥目前不知道
  • 如:CPU码片,基带码片等
  • 如果只拆换基带芯片而不拆换基带码片,则基带无法正常工作
  • 码片非常小,不好拆装,目前是通过将基带芯片拆下,把主板的基带芯片的位置连接到机器上,通过机器读取基带码片中的内容,并烧写到新的基带码片中以完成替换
  • 所以猜测各种芯片中都会对自己的码片进行校验,那么推测这些芯片中存在着存储单元用,比如老师说这些a系列的处理器中一定存在着部分代码和数据
  • 后来看了他们的翻译知道了,码片就是一个EEPROM!!!

其他:

  • wifi和蓝牙是在一个芯片上(都是2.4Ghz)

教材上给出了如下的架构图,其中涉及到许多的总线标准,之后再具体分析:

image

下午主要讲了塑胶座焊接,所谓塑胶座就是主板上那些为通过排线连接过来的设备所需要的底座,如显示座,尾插座(usb线),摄像座。过程如下:

  • 热风枪把座吹下来,温度不要太高
  • 利用吸锡线清理板子上残余的锡
  • 上焊油
  • 利用电容给板子上锡,先用烙铁把锡融化在电容两侧成为小球,再用热风枪将电容上的锡粘到板子上
  • 放上座,等待冷却,检查

晚上有个朋友让我看华为4g路由器2的调试接口在哪,问了一个老师,老师猜测在这:

image

找到了一系列的关于硬件破解的文章,记录如下:

HG533和华为4g路由器2已经购买,hhhh回家睡觉!

DAY 3

江湖纪实:对于手机损坏,主要是两种,摔和进水,维修的大部分方法还是换件,啥坏换啥,iphone6,20块一个料版(可以拆换元件的废板),对应位置换就好了。

今天就半天的课,讲了万用表的基本用法,并且利用细铜丝榜上绣花针针头并焊接到表笔前部,最后用热缩管包装。这样改装万用表后,可以使得表笔尖部更细,可以更精准的对主板上的位置进行测量。

比较有意思的是维修行业会利用万用表的二极管挡位对正常的一个电路版标记特征值,行业里称之为“打阻值”。一般是红表笔接在电路板上的地位(比如金属屏蔽罩),然后黑表笔去各个位置测量,如果该点位工作电压是负压则调换表笔。当遇到一个坏板子时,同样用二极管挡对其进行测试,如果这个特征值与正常板子的特征值相差过大,则可以大致确定故障位置。老师说这种技法最早是台湾传过来的,而且好多维修的方法都源自于台湾。

image

我用电阻档测试电路板上的阻值总是显示断路,后来才知道,要播到20兆欧姆的档位才能测出来,原来这种电路里的电阻这么大。

DAY 4

江湖纪实:只要手机屏幕足够大,存储足够大,1000块的手机能买到3000,很多人在干这个,赚到的钱足以让店面几个月一换,继续坑人。

上午讲了电路图的基本标识,电路里主要有两种线:供电,信号。在维修行业中主要测量电路中的电压,而不关注电流。

供电:VCC/VDD/PP,PP为正电压,PP为负电压

  • PP_XXX
  • PP_VCC_MAIN

供电线标注举例:

  • PP1V8_SDRAM: 1.8v内存供电电路
  • VBUCK5_1V8: 1.8V大电流第五路
  • VOUT5_1V8: 1.8V小电流第五路

信号线,一般安卓线路图中名字采取如下格式标注,标注名称中不说明方向,线路图中会单独采取图标表明数据传输方向(是单向还是双向)

  • 位置_作用
  • 位置_总线_作用
  • 总线_位置_作用

安卓信号线标注举例:

  • CAM0_I2C_SDA0: 相机连到I2C总线的双向数据线
  • CAM0_RST_N: 相机复位信号(负极??我猜的,最后一位应该是一个附加标注)

信号线,苹果线路图中,标注名称会说明数据传输方向

  • src_to_dst_bus_use(单向)
  • a_bi_b_bus_use(双向)

苹果信号线标注举例:

  • BT_TO_AP_UART1_CTS_L: 蓝牙到应用处理器的通过第一组通用串行异步总线的清除发送信号,L为低电平有效
  • AP_TO_BT_UART1_RXD: 应用处理器到蓝牙的的通过第一组通用串行异步总线的数据接收信号

下午讲了拆芯片与焊接小芯片,步骤如下:

  • 镊子和热风枪配合把芯片翘下来,采用直通风枪,温度开到最高,二挡风
  • 低温锡中和焊板,吸锡带清理焊板,讲究手法,焊油不能少
  • 烙铁直接清理芯片上残留的锡,不必清理焊油,可以防止氧化
  • 利用中温锡和钢网给芯片摸上锡膏
  • 将热风机靠在钢网上,斜着把锡膏吹化,稍做冷却,摘下芯片
  • 将芯片放在原来的位置上,大概对齐,用热风枪继续吹,观察芯片归位即可

焊接是个讲究手法的东西,我这个手残也就看个大概,不过有如下小技巧和知识点:

  • 归根到到底就是拆装芯片的时候不要伤害到其他部件
  • 吹小芯片时,当热风枪的口径比芯片小的时候要画圈圈转够全部的芯片部分,不要吹到别的地方
  • 当热风枪口径和芯片差不多大的时候,直吹芯片就可以了,风枪口和芯片举例2-3mm即可,非常近
  • 利用低温锡中和焊板时的融化的锡球不要滚到其他地方,而热的烙铁碰到一下其他的零部件没啥大影响
  • PCB板子上的每一个焊点底座是铜镀锡,这个表面的锡不会被吸锡带吸走
  • 利用吸锡带吸完后,焊点表面的黄色物质不是漏出的铜片,而是烤糊的焊油
  • 钢网就是芯片背后那个排列的密密麻麻小球阵列的模具
  • 那个小球阵列就是Ball Grid Array,BGA
  • BGA的焊点很多是空点

DAY 5

江湖纪实:维修者在给手机处理保险电阻/电容的时候,一般会选择短接,而不会更换电阻,带来的危害就是如果再次短路则会烧了前面的线路,但是都这么干,为了快,为了钱。

上午讲电子元件,确定是否是小元件的问题采用六字方针:短路拆,断路飞。电子元件的标号格式一般为:元件代号+主板位置号,如Y2200,主板上位置号为2200的晶振

  • 晶振(Y): 手机中常见为32.768kHz,24MHz,19.2MHz三种晶振,分别用于实时时钟,CPU基准时钟,基带电源基准时钟,实物常见为金属壳,表面一般可以看到印刷的信号信息
  • 电感(L): 通过其电流不能突变,手机中常见大小两种电感,主要作用分别滤波储能和保险,小电感的外表和电阻区别不大,没有任何标记,一般通过点位图和线路图来区分
  • 电阻(R): 常见分类,保险电阻,上拉电阻,下拉电阻,一般采取01005封装,线路图中的标注会标注:标号,阻值,误差,封装等信息
  • 电容(C): 两端电压不能突变,滤波电容(稳定电压输出,一脚接地),耦合电容(串联在信号电路中,隔直流,保证交流信号告诉传输),谐振电容(接在晶振两个引脚和地之间,配合其工作),一遍外观为米黄色
  • 二极管(D): 单向导通,防静电二极管(ZD),一端接地,外观是一侧打磨光亮,一侧未打磨
  • 三极管(Q): 这里需要和MOS管进行区分,暂时不懂

关于电阻:

  • 保险电阻:一般常见于芯片供电脚,阻值一般在10欧一下,也可能为0欧,但是短路时也会发热,烧断自己保护其余电路
  • 上拉电阻:一侧接供电,一侧接信号,将信号线电位拉高,让信号远距离高速传输,虽然电阻很大,可能有几千欧,但这个跟后续电路的等效阻抗九牛一毛,所以不会降压很多
  • 下拉电阻:一侧接地,一侧信号,将信号电位拉低,设置初试低电平参数,和上拉电阻差不多,阻值也很大。

老师在讲解上拉电阻时,就一直强调两侧电压相等,但是这对于深信欧姆定律的我,无法不和他辩驳,因为:即使你不相信这个时代你还可以娶到一个纯洁无前科的漂亮老婆,也一定要相信欧姆定律(出自知乎:萝莉赛高flamingo——能不能通俗的解释一下「上拉电阻/下拉电阻」的原理)

关于上拉下拉电阻到底是啥玩意,这玩意有啥用,为啥这么设计,参考知乎这两个答案

我的理解就是首先信号线不能悬空,悬空会使得信号不确定,这也就是百度百科中对于上拉电阻的解释(上拉就是将不确定的信号通过一个电阻钳位在高电平,电阻同时起限流作用。下拉同理,也是将不确定的信号通过一个电阻钳位在低电平。)中的所谓的不确定。有人评论这句“很多这种解释让人听了一头雾水”,反正没理解之前我是看不懂这种解释的,那理解之后我还看这种解释干嘛。回到不确定,因为不确定,所以我们要让他为一个确定值,即把这根信号线接到电源或者地上,这样就是确定了对吧。但是当我们对于一个接到电源上的信号线想传递低电平的时候,不是就相当于电源和地短接了么,所以要加一个电阻,这根电阻就是所谓的上拉或者下拉电阻。

下午练习翘芯片和钢网植锡,成果如下:

image

DAY 6

江湖纪实: 我在华强北看到了老北京天桥的影子,天桥逛一逛,除了吃亏就是当。

参观华强北,遇到了卖手机窃听器的,测试真的监听了我的通话,震惊了,具体如下:

华强电子大厦楼下,会有人拿着一个特别破的牌子,就是那种医院门口有写什么住宿,抗癌神药那种,一张纸,一堆字。这个上面写着手机窃听器,我转身回来问老板,老板说只要提供手机号就能监听。然后他拿来一个三星的直板功能机,让我把要监听的目标存到这个直板机的电话簿里,我就存了我自己的。然后我用我自己的手机给我妈打了个电话,那个直板机真的就响了,来电号码为一个乱七八糟的字符(通通讯录的掩盖的障眼法)。然后我把我的手机给了老板,他用我的手机和我妈说话,我自己用这个直板机接听来电,能很清楚听到他俩说话。当时我就震惊了,一顿推诿说有事,然后抽身跟几个哥们研究了一下,认为大概率是伪基站,还打算叫小伙伴有空跟我再去一趟演个戏测测远端的设备啥的。结果回来之后再youtube上发现了这个詐騙集團可以竊聽 iPhone, Android手機 ? 深圳 華強北 「台灣人行大陸」「Men’s Game玩物誌」。原来这帮人是变魔术的,他们兜里还有一个手机,当看到你拨通电话的时候,他就用他兜里的手机给那个直板打电话,然后当你把你自己的手机给他的时候他就开启免提,然后把兜里手机贴上去,因为你在关注那个的直板手机,所以就没注意到。这…真是个好魔术…我觉得我是个傻子…

相关文章:

DAY 7

江湖纪实: 拿到了芯片型号,查找芯片用途的最快的搜索引擎是淘宝

维修人员主要看的图纸有三种:原理图,元件位置图,点位图。这三种图纸都可以在鑫制造这个软件中找到,但目前只有苹果的图纸比较全,以下分别介绍

原理图

就是电路的线路图,图纸的来路应该是原厂或者代理工厂流出,从其中可以知道芯片的功能和线路的连接,如下:

image

原理图中包含的信息较多,阅读方法稍后整理

位置图

是实物对应的元件位置号标注,也应该是从是原厂或者代理工厂流出,可以用实物对应这张图找到元件位置号,如CPU的位置号为U0201,再去上面的原理图里找这个位置号就可以了

image

点位图

这个东西是个pcb版图,由鑫制造的开发方制作,看起来就是电子的位置图,但其实现了一些很重要的功能,单击某个位置的引脚时可以引脚定义和其他与这个相连的位置,并且可以实现查找可以替换的元件,以及选中元件后自动跳转到相应的原理图的引脚为主处进行分析

image

DAY 8

江湖纪实: 维修基本方法还是通过硬件启动的时序顺序分析故障位置

将iphone开机故障的不同阶段分为如下:每种阶段下的故障确定位置不同,具体细节暂时略过

  • 不开机
  • 不显示
  • 卡logo
  • 无法通讯

下午尝试了对id板的开机,所谓id板就是苹果的锁了id的主板,开机提示解锁appleID,目前只能通过硬解id的方式(就是把cpu,硬盘,码片这堆全换了)才能正常使用。让这个主板开机并且显示只需要连接4.2v的电源线和显示屏,然后将开机信号对地短接即可。

Android简单认识

然后就去听了android的介绍,我的重点来了:

  • 安卓手机CPU天梯图这个站点可以看到android的各种CPU被哪些手机采用
  • android的主板拆开正面一般三大件:sim卡座,字库(rom),处理器。
  • 处理器一般集成了:CPU,基带,RAM,ROM
  • wifi的厂商一般是:高通,博通,联发科
  • 存储介质(字库)一般采用两种类型的芯片:eMMC、UFS
  • 高通9008刷机模式可以绕过Bootloader的锁

以上内容是不是有点迷,我们一样一样说,首先是android的主板长啥样,我们看一张小米6的主板,可见有一面真的就是三大件

image

Android启动的第一条指令

接下来是一个颠覆我认知的概念:所谓的CPU芯片,比如高通8xx,其实内部集成了CPU,BB,RAM,ROM。前几样都还好,但是为什么会有ROM,这个ROM是干啥的?说这个问题之前我们先介绍另一个概念:9008模式,重磅干货!高通9008模式与数据提取高通9008模式。可见9008模式可以在手机的存储芯片(eMMC)坏掉的时候工作,还可以通过USB将手机和电脑进行连接,并进行存储芯片数据的备份。等下等下,完成这个和计算机通讯9008模式总归是需要代码来控制CPU的吧,此时存储芯片可以不工作,那代码在哪呢?难道CPU加电后的第一行代码不是存储在eMMC中?还真不是!

image

这才恍然大悟,原来CPU加电后的第一条执行是在CPU里面的存储介质里面,称之为bootrom,真正的加载顺序如下:

CPU内部的bootrom(9008)->加载eMMC->xloader->bootloader(fastboot)->boot.img(linux kernel)

  • 9008模式的代码在CPU内部,即bootrom
  • xloader,bootloader,boot.img这些代码全部存储在eMMC里
  • fastboot运行的层面就是bootloader
  • recovery在boot.img那个层面
模式 对应的代码 位置 对应镜像
9008 bootrom CPU内 -
- xloader eMMC的xloader分区 -
fastboot bootloader eMMC的bootloader分区 u-boot.bin
linux kernel’s boot of android / recovery boot/recovery eMMC的boot/recovery分区 boot.img/recovery.img

待解决:高通有9008,苹果有DFU,其他CPU芯片厂商的呢?比如华为和联发科的呢?为什么联发科和海思麒麟没有类似高通9008的刷机模式,下周问问老师这个问题。

今日总结

因为永久性root需要修改boot分区才能绕过selinux,所以一直想搞懂android的启动顺序,以及在android机的手机里到底有几个flash芯片?或者是不是还有什么其他的存储介质?这些介质上存储是否分区?引导代码存在哪里?目前的出的结论如下:

  • 启动顺序如上文所提
  • 主要的存储芯片,无论是android还是iphone都只有一个flash存储芯片,android为eMMC或者UFS,iphone为nand
  • 除了存储芯片,CPU里还有存储介质,iphone上还有关于处理器的EEPROM,android目前还不知道,即存东西的地方有flash,CPU,EEPROM
  • eMMC是分区的,分区方法以及分区表的查看方法上文链接,不过我在我的手机中并未找到,暂时不知道为啥
  • 提出问题的时候只认为有一段引导代码(bootloader),现在清楚了至少有三段不同的引导代码,存储位置上文已经说明

DAY 9

江湖纪实: 广电要成为运营商了

最近发现的两个结论:

  • CPU加电执行的第一条指令可能是固化在CPU内部的
  • 文件系统不是存储介质的全部

首先,CPU里还能存永久性的数据,没有任何一个老师教过我这个,各个元件都是很独立的,现在才知道在真正的工程中并不是这样的。还有就是因为想不通过fastboot刷机的方式修改boot.img,获得永久性的root权限,就希望吧存储在硬件中的boot.img直接改掉,这也是我一直想研究android分区以及存储介质的一个原因,因为我在android提供给我的接口(adb shell)里,找不到这玩意啊。小时候我以为文件系统是整个存储介质的全部,实际上文件系统也是存储介质上的一部。操作系统通过进程线程管理内存和CPU,通过文件系统管理存储介质,但是现在这么复杂的系统里,这种关系并不是一一对应的,文件系统不止管理存储介质,甚至还管理了CPU与内存,比如/proc。所以如果说希望真正的去管理原生的存储介质应该是用/dev,直接去管理块设备。可见对于linux的这些底层部分,总线,外设,进程什么的我还了解的不够。

回到之前的问题,我希望找到boot.img这个东西,目前来看这个东西是在eMMC的某个分区里,那我怎么拿到呢?有以下方法

  • 硬件:翘芯片,飞线,测试点(TP,PP)
  • 软件:dev目录下对块设备直接读取

发现一篇好文:看雪2018峰会回顾_智能设备漏洞挖掘中几个突破点,总结了十种固件提取的方法。

DAY 10

江湖纪实: 检测故障基本方法就是,通过现象确定故障的范围,然后根据电路工作条件进行测试,一般是测量供电电压,和点位的对地值

焊接路由器的调试口

两个路由器中和零件终于到了,终于可以动手焊接调试口了,先介绍一下手头的东西:

image

  • 工具:烙铁,焊锡丝,镊子,小刀
  • 设备两台:华为4G路由器2(B311),华为HG533路由器
  • TTL,232,485,USB互转器:使用说明,提取码:x9ae,用于转换TTL电平到USB,对串口通讯不了解的可以阅读下面的参考
  • USB转DIP:其中DIP是一种封装标准,双列直插式封装技术,就是那种排针的样子,而不是USB长方形的那种口
  • 排针:因为在路由器上的调试口都是金属点,需要焊接上排针才能用杜邦线把信号接到转换器上
  • 杜邦线:连接两头排针的导线,买上面那个互转器赠的

参考:

焊接方法:参考以下文章,因为B311没有找到教程,手头也没有示波器和逻辑分析仪,只能对着B310猜测。我都是利用万用表的蜂鸣档,一个表笔接金属壳,因为金属壳一般接地,然后用另一个表笔把GND先测出来。

连接方法:

  • HG533的是UART,路由器的RXD接转换器的TXD,路由器的RXD接转换器的TXD,GND接GND。
  • B311的是USB,但是看起来只有3根线,D+接D+,D-接D-,GND接GND。(目前不知道对不对)

最终焊接成果:

image

HG533

先说HG533,这款快十年前的路由器上面留了两个UART口,采用了上面的分析教程的焊接方法,用小刀把金属座挖穿,然后把排针塞进去,在背面的板子上焊锡。我是先焊的2口,然后这个口好像就让我干坏了。原文没有说1口2口哪个是调试口,焊好并接好线后,我先把1口接到电脑上,打开串口调试器,软件自动识别了串口并且配置好了57600的波特率,点进去真的有字蹦出来呀,如下,好激动好开心:

image

部分信息如下:

The system is going down NOW!
Sending SIGTERM to all processes
Terminated
Done
Sending SIGKILL to all processes
Requesting system reboot
Restarting system.


U-Boot 1.1.3 (Jan  7 2013 - 13:23:16)

Board: Ralink APSoC DRAM:  64 MB
Reload Uboot WatchDog Timer.
Software System Reset Occurred
spi device id: ef 40 17 0 0 (40170000)
find flash: W25Q32BV
..RF_R17 = 0xA0
*** Warning - bad CRC, using default environment

Ralink UBoot Version: 3.5.2.0
ASIC 3352_MP (Port5<->None)
DRAM_TOTAL_WIDTH: 16 bits
TOTAL_MEMORY_SIZE: 64 MBytes
Flash component: SPI Flash
Date:Jan  7 2013  Time:13:23:16
icache: sets:256, ways:4, linesz:32 ,total:32768
dcache: sets:128, ways:4, linesz:32 ,total:16384 

Please choose operation: 
   3: Boot system code via Flash (default).
   4: Entr boot command line interface.
 0 
   
3: System Boot system code via Flash.

但是在1口我发送的数据并没有卵用,在选择的时候发送4也没有进shell,最后也并没有看到Welcome to ATP Cli也许这就是个log口,然而当我兴高采烈的换到2口,串口界面空空如也。我用电压表测了一下RXD和GND间的电压,正常的情况应该是RXD没有数据接收的时候应该是低电平的,即0.8v以下,看测试的情况貌似是让我干坏了,第二个路由器正在路上…

image

B311

再说B311,这个就更头疼了,按照帖子里短接灯那侧电路板的两个点位进模式就没成功,没有灯灭。而且插上USB到电脑上也没有任何反应,不知道为啥,很奇怪。不过这里能看到华为的路由器也有近模式这一说,而且需要驱动和工具对其进行操作,华为4G路由器balong芯片刷机等工具分享。猜测这个短接也应该是让flash存储不工作,然后进入balong芯片内部的bootrom。问了老师,华为和联发科的这种模式叫啥名,老师说没名,只有个端口。手头都是用windows虚拟机研究的,里有个问题,当检查到一个设备后,会弹出是连接到MAC还是windows,但是这个玩意是不是安装驱动后才能识别啊,我对安装驱动这种原理一点也不懂,而且其实这个线是不是这么接都还不能确定,这的老师说USB的5v线肯定得接啊,我也不知道。发现华为B310/B315等机器免拆机焊接刷机方法教程,原来华为有的路由器是可以通过POST一个xml然后开启telnet的。之后再试。

不过东方不亮西方亮:华为4G路由2-华为B311s-220_B311As-853(现存)固件汇总,这个哥们还是有点意思的。买到固件后binwalk解开

root@attacker:~# binwalk -Me MIX-B311s-220_B311As-853_8.0.1.9\(H183SP4C233\)-sec.bin 

Scan Time:     2019-07-09 05:32:50
Target File:   /root/MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin
MD5 Checksum:  e093bcd8918b8714d56e2fdcad6de0a2
Signatures:    386

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
182486        0x2C8D6         Android bootimg, kernel size: 0 bytes, kernel addr: 0x41564E49, ramdisk size: 541346124 bytes, ramdisk addr: 0x544F4F42, product name: "nel_size is too large"
186226        0x2D772         Android bootimg, kernel size: 0 bytes, kernel addr: 0x72206F6E, ramdisk size: 1987011429 bytes, ramdisk addr: 0x20797265, product name: "nel  @ %x (%d bytes)"
187026        0x2DA92         Android bootimg, kernel size: 0 bytes, kernel addr: 0x4C494146, ramdisk size: 1734438249 bytes, ramdisk addr: 0x73692065, product name: "ing '%s' (%d bytes)"
220436        0x35D14         Copyright string: "Copyright 2008-2020 HUAWEI TECHNOLOGIES CO., LTD."
235186        0x396B2         device tree image (dtb)
284338        0x456B2         device tree image (dtb)
321202        0x4E6B2         device tree image (dtb)
360114        0x57EB2         device tree image (dtb)
388786        0x5EEB2         device tree image (dtb)
437938        0x6AEB2         device tree image (dtb)
472754        0x736B2         device tree image (dtb)
509618        0x7C6B2         device tree image (dtb)
597986        0x91FE2         Android bootimg, kernel size: 5826720 bytes, kernel addr: 0x55E10000, ramdisk size: 119092 bytes, ramdisk addr: 0x57208000, product name: ""
602082        0x92FE2         Linux kernel ARM boot executable zImage (little-endian)
620318        0x9771E         gzip compressed data, maximum compression, from Unix, last modified: 1970-01-01 00:00:00 (null date)
6430690       0x621FE2        gzip compressed data, from Unix, last modified: 1970-01-01 00:00:00 (null date)
6553570       0x63FFE2        gzip compressed data, maximum compression, from Unix, last modified: 2019-04-28 12:32:14
7810876       0x772F3C        ASCII cpio archive (SVR4 with no CRC), file name: ".", file name length: "0x00000002", file size: "0x00000000"
7810988       0x772FAC        ASCII cpio archive (SVR4 with no CRC), file name: "ca_cust_nv", file name length: "0x0000000B", file size: "0x00000000"
7811112       0x773028        ASCII cpio archive (SVR4 with no CRC), file name: "ca_cust_nv/B311As-853", file name length: "0x00000016", file size: "0x00000000"
7811244       0x7730AC        ASCII cpio archive (SVR4 with no CRC), file name: "ca_cust_nv/B311As-853/common.xml", file name length: "0x00000021", file size: "0x0001276D"

看着好懵啊,为什么会有android的boot,cpio是啥,明天再说…

今日总结

为啥我把HG533的UART1接到电脑串口上就能打印log,咋这么神奇呢?其实就是这种串口就是调试人员留下的,在路由器上运行的操作系统就会把log输出到这个串口,方便测试。而且其实像短接硬盘进模式这种就是为了在硬盘不工作的时候仍能有办法操作设备。对于一个设备的开发过程,不同层次的开发人员都需要对开发工作进行调试或者测试,那么就会有不同层次的调试口或者测试口。硬件层面首先由各个点位的测试点,可以测试电压,阻值等。还有JTAG,串口等用于调试设备的接口,还有9008这种用于紧急下载的模式直接通过USB接出来。当然有些接口会在设备调试好之后,在硬件生产中直接被干掉。这些接口是测试人员的测试口或者设备的恢复接口,也是安全人员获取更多硬件信息的一个突破口。

DAY 11

好奇宝宝: 维修是需要图纸的,如果没有图纸我们能怎么办?逆向电路除了一层一层刮电路板,还有没有其他的方法了?比如,对地值的特征?

上午老师讲到iphone开机小电流的故障,这个故障的表现就是在连接上电源线后并不漏电,但是按开机键开机后,电流比正常开机电流小,而且显示屏也不工作。如何验证是那个元件出了故障,开机过程中涉及到的元件非常非常多,一个个测试么?iphone有一个取巧的办法可以大概定位问题位置,那就是DFU模式,大概思路就是短接硬盘让手机进入DFU模式,然后用itunes或爱思助手给手机刷机,因为开机失败,如果是硬件的问题,那么刷机过程中就会报错,可以通过刷机过程中的报错信息大概确定故障范围。步骤如下:

  • 主板尾插座连接尾插,尾插上有手机上的USB连接口
  • 短接硬盘的3v滤波电容或者强制DFU测试点到地
  • 然后连到电脑的USB上,会自动开机
  • 软件刷机看报错信息

没买尾插,这个实验现在做不了,下周弄,但这里可以介绍一下爱思助手。因为很久没用过苹果手机,不知道咋强制重启被嘲笑了。想起上一个苹果手机是4s,2014年寿终正寝于305教学楼,那个时候还是什么同步推,PP助手,威锋网。之后用的就是清一色Android了,中兴,魅族,一加,ZUK,小米,华为。现在用的爱思助手很强大,windows/mac上都有,官网在这,在刷机那列表里每个固件都有几个属性,看到了有一条叫可否刷机,很多固件这个标记是灰色的。原来ios和android还不一样,ios固件刷入之后不是直接就能用的,是需要联网检查的,如果固件太老了就直接不让你用了,那爱思助手还留着这些不能刷机的刷机包在这放着干嘛呢?很奇怪。对于ios越狱和ios的app逆向也没研究过,不过昨儿正好有人问我,找了点资料如下:

回到昨天的binwalk结果,有几个问题需要讨论:

  • 这个固件是通过编程器直接从flash芯片里读出的来的么?
  • 为什么会有android的boot,难道这是个android的系统么?
  • 这个android的boot为什么没有被binwalk提取出文件?
  • cpio是啥?文件系统么?
  • 这个bin到底是什么结构?或者说这个bin是怎么烧到存储介质里的?分成几个部分?

当然这些问题我还没有完全搞懂,我们一个个说,首先来看一下通过编程器读取芯片的情况,因为我手头目前也没有编程器,只能转述朋友的观点,以下通过RT809编程器是读取一个型号为W29N01HV,容量是128M的NANDflash时的截图,芯片手册

image

从编程器的log信息,可见存储是按页存的,每个page的大小是2112字节(2048字节的数据+64字节的校验),总共0x10000个页,即65536个页,所以读出来的固件总大小为65536*2112B = 138412032B = 132MB

image

而我手里的固件:

root@attacker:~/B311# ls -l
total 63096
-rw-r--r-- 1 root root 64609564 Jul 11 07:59 'MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin'
root@attacker:~/B311# ls -hl
total 62M
-rw-r--r-- 1 root root 62M Jul 11 07:59 'MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin'
  • 朋友告诉我这种校验位是NAND芯片的硬件特性,我手里的bin,大小既不是2112的整数倍,当然如果分页和校验位数不同就不能以2112为证明。
  • 再有,62M,这个大小附近的存储介质一般是64M,假设就是64M的存储,那么读出来的bin应该大于64M。
  • 还有,以华为目前的手法来说,这些固件必须是加密的,即用binwalk对从编程器读出来的bin分析,绝不可能分析出昨天这么多东西来。
  • 最后,因为直接拆掉了这个路由器,也找了网友的拆解免布线畅享自由:华为4G路由2 全4G无线路由 拆解测评,发现了存储芯片的型号和手册:NM1482KSLAXCL-3B,看参数没看明白,即有2G又4G的,我还以为是功放,看这个芯片属类别:MCP,这才查到,MCP是一种封装技术,MCP,eMMC,eMCP区别和联系,也就是说这个把RAM和ROM装一起了。也就是说这个芯片是4G的ROM加2G的RAM,而我们的固件才62M。

所以综上,这个固件并非是从flash芯片中获得,那…大家自行琢磨这玩意是哪来的了。刷这种固件的方法是用balong自己的工具,那么到底这个bin的东西怎么放到flash里的呢,可以去逆向那个工具看看了。

然后是Android的bootimg,如果这个系统是个完整的android,那么应该会有一些android自己的工具,比如am(activity manager),pm(package manager), 如下:

sagit:/ $ which am                                                           
/system/bin/am
sagit:/ $ which pm
/system/bin/pm

但是我在binwalk解压出来的目录中并没找到这俩东西:

root@attacker:~/_MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin.extracted# find ./ -name am
root@attacker:~/_MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin.extracted# find ./ -name pm
root@attacker:~/_MIX-B311s-220_B311As-853_8.0.1.9(H183SP4C233)-sec.bin.extracted# find ./ -name ls
./cpio-root-0/bin/ls
./_63FFE2.extracted/cpio-root/bin/ls

目前想到了两种解释:

  1. 这不是Android系统,只是用了Android的启动
  2. 这真的是个Android系统,bin包不完整

我觉得第一种的可能比较大,而且华为的路由器的操作系统有自己的名字:EMUI Router,那这个玩意是个啥呢?我手里这个我还没看,明天看。

然后是cpio,不知道理解为一种归档文件还是文件系统,或者这二者本身就有点关系?暂时不知道。不过在查cpio的时候发现以下文章:

发现大家都有个思路,用qemu执行路由器上的mip或者arm的elf文件,这里用到了qemu的user-mode。我只知道qemu是个模拟器,不知道还有user和system模式之分。在qemu官网可以看到:

image

在一个x86的linux上运行了一个arm的elf的ls,可是我咋就没在我电脑上找到qemu-arm这种用户模式命令呢?

➜  ~ qemu-
qemu-edid                 qemu-system-microblaze    qemu-system-riscv64     
qemu-img                  qemu-system-microblazeel  qemu-system-s390x       
qemu-io                   qemu-system-mips          qemu-system-sh4         
qemu-nbd                  qemu-system-mips64        qemu-system-sh4eb       
qemu-system-aarch64       qemu-system-mips64el      qemu-system-sparc       
qemu-system-alpha         qemu-system-mipsel        qemu-system-sparc64     
qemu-system-arm           qemu-system-moxie         qemu-system-tricore     
qemu-system-cris          qemu-system-nios2         qemu-system-unicore32   
qemu-system-hppa          qemu-system-or1k          qemu-system-x86_64      
qemu-system-i386          qemu-system-ppc           qemu-system-xtensa      
qemu-system-lm32          qemu-system-ppc64         qemu-system-xtensaeb    
qemu-system-m68k          qemu-system-riscv32  

想想我电脑是mac,要是能直接执行elf的才出鬼了呢,应该是目前还不支持吧。

DAY 12

好奇宝宝: 如何方便大量的捕获电路上通讯的信号?

想起了2019强网杯的智能门锁那题,觉得可以去看看那题到底是啥了

先看看这个固件是个啥:

➜  Desktop file v2
v2: Zip archive data, at least v2.0 to extract
➜  Desktop unzip v2
Archive:  v2
  inflating: firmware.hex            
➜  Desktop file firmware.hex 
firmware.hex: ASCII text, with CRLF line terminators
➜  Desktop head firmware.hex 
:1000000045C0000061C000005FC000005DC000008E
:100010005BC0000059C0000057C0000055C0000080
:1000200053C0000051C000004FC000004DC0000090
:100030004BC0000049C0000047C0000045C00000A0
:1000400043C0000041C000003FC000003DC00000B0
:100050003BC0000039C0000037C0000035C00000C0
:1000600033C0000031C000002FC000002DC00000D0
:100070002BC0000029C0000027C0000025C00000E0
:1000800023C0000021C000001FC0000011241FBEBB
:10009000CFEFD0E1DEBFCDBF13E0A0E0B1E0E8E0FC

之前在比赛的时候看到这个东西我认为怎么也得转成二进制的数据(bin)才能丢到IDA里进行分析,所以就分析了一下这玩意的结构,猜冒号后面八位是地址然后最后两位是校验,然后就一顿手改。后来发现我真是笨死了。IDA是直接可以识别这个hex的,这玩意是啥呢?hex文件和bin文件区别,原来这个东西是烧写固件到单片机时,所用的不同格式的固件。直接用IDA32打开这hex文件,可以发现:

image

原来IDA是直接可以识别intel_HEX的,不过没有找到介绍这个文件格式历史故事的文章。根据上面的WP,以及最近在看IDA Pro权威指南,才知道还要选择处理器类型,然而当我点击这个processor type的下拉菜单的时候我惊呆了:

image

原来有这么多的处理器,有这么多的指令集,我以为天下三种指令集呢: x86 arm mips,看完一圈这列表我终于突然想明白单片机和树莓派的区别了,原来单片机是有自己的指令集的,比如51单片机的8051,单片机上面不需要运行操作系统,只需要运行这个微控制器对应的机器码,然后控制硬件端口或者管脚就好了。所以在keil上写的c代码最终会被编译成对应单片机上处理器芯片所对应的机器码,然后烧到板子里。而树莓派的处理器是ARM指令集,上面能直接跑操作系统。树莓派与单片机,虽然都是绿莹莹的板子,但是二者在层次,用途上均不同。那PLC又是啥呢?一会再说。这道题开局提示了Atmega128芯片,突然想到了这个不就是Arduino的处理器的类型么。用IDA选择处理器类型为Atmel AVR后会选择具体的处理器型号,然后我又打开Arduino IDE的选择处理器的那个列表对比了一下,发现真的是一个东西:

image

image

经过了一系列的分析和设置最终把这个hex用IDA打开后如下图:

image

这是我第一次用IDA解析出了ELF,PE,dalvik字节码文件之外的东西,结果首先是可以看到,IDA的确将hex这种十六进制的文本文件解析成了二进制数据。其实也可以用hex2bin的类似工具先将hex转换为bin然后再用IDA解析,用IDA直接解析就省事了,不过这个结果是分为ROM区和RAM区的,没太懂这些固件的性质,先放着吧。IDA对AVR的汇编也不能用F5,我可以暂时休息了。

那就继续研究PLC,FPGA,单片机,Arduino,树莓派,手机,路由器,这些东西异同吧!当然可能有人认为这都是风马牛不相及的东西,但是我并分不清,我只知道如果把包装壳拆了,这些玩意都是绿莹莹的。

之前看了许多文章还是被绕的云里雾里的,搞不懂他们到底都是什么玩意,反正肯定都是计算机,然后能执行指令就对了。那么如果从处理器的种类来进行区分有大概如下结果:

  • 智能手机:arm,x86
  • 路由器:arm,mips
  • 单片机:各种微处理器,比如intel 8051
  • 树莓派:由注册于英国的慈善组织“Raspberry Pi 基金会”开发的,是一个东西,不是一类东西,arm处理器
  • Arduino:是西班牙籍晶片工程师设计的开源工程,单片机的一种,Atmel
  • PLC:未知

FPGA我不懂,但我猜这个东西不能和以上同日而语,然后verilog又是啥?想有空研究下Google CTF那个flashrom:

未整理:

  • 补焊盘
  • 北斗GPS芯片的区别
  • eeprom,nand,emmc,ufs的读取
  • 三星解锁,修改一个字节
  • bootloader与加密狗
  • JTAG
  • 总线
  • 芯片,小元件,电路,PCB

锁与解锁:

  • bl锁
  • id锁
  • 网络锁
  • 屏幕锁,保数据解锁