找回密码
 注册

QQ登录

只需一步,快速开始

查看: 40074|回复: 53

【教程】华为光猫备份分区固件(busybox dd命令)

[复制链接]
发表于 2018-9-21 16:53:54 | 显示全部楼层 |阅读模式
本帖最后由 anysoft 于 2018-10-3 13:39 编辑 1 j' M- \" L+ f
" l; C0 d8 ]" C0 e
               在我上一篇帖子中提过,光猫其实和路由器一样。底包都是改版的openwrt,然后固件打包解包过程加了华为自己的结构和加密处理而已。光猫加入了驱动和对应程序。所以完全可以把光猫当做路由来玩,特别是当前的光猫配置越来越好,还能挂载USB。/ o1 p, F9 V2 o. X& G
9 v( Q" y6 t8 d5 L: r: m
8 F- J: L) h9 l5 W
            今天正题是如何备份光猫固件。华为光猫的刷机固件有自己独特的结构,常规的解包方式无用,看雪bxc大神分析了固件格式并开发了hwfw_gui。这个工具可以拆分华为固件,编辑内部文件。rootfs导出后是uimg文件 squashfs。
% n. @5 x( M3 q6 a* c" `0 j
: q7 b: Q5 Z6 i! m& S: p% b

3 p2 ?( x# R: u* A4 t. Z           废话不多说直接上备份命令(路由器固件备份命令):
& A2 n% a( s" {: X5 z$ E1、先获取、补全shell进入
4 Z0 S4 [# W2 a$ V
  x/ ?* j% p! l% _, O 本文不就演示如何获取shell了,自行研究(获取shell都不会那么后边也没有看下去的必要)
7 a7 R1 e8 i, N  b; O/ F; y; I! ~/ |# p8 @4 p
  进入shell之后用户还不是root,可以用whoami命令查看当前用户,此时再执行su,密码:admin就变成root了。
% Y0 @( B( |. I8 F2、cat /proc/mtd 查看本机mtd信息# m9 |5 k4 h# j; R$ p
7 S5 v" w8 x! l  W0 D

4 f9 M- _. ]  S" s; Q& J

所有的mtd设备和别名都一目了然


: f: H  g* Q3 f. i2 G  |


3 s- O+ S6 R1 Y3、df查看挂载点信息
' ~. H) Q7 i) y
9 Z; l: X, v( }
- F( F9 v6 z* N" o. {* \8 @; N
1 X* Z0 D! F) K: c; _     此处要注意,很多人备份或者上传文件都用/tmp文件夹,这里tmp文件夹只有10MB无法存放大文件,所以不要备份到tmp,看哪个文件夹可用空间大就备份到哪里。我是用的/dev/shm文件夹,足够的空间。" F& P' G, A0 `) G; Q
& z4 l( i0 F- s6 M6 E
4、备份每个dev" J" y  _$ i1 i" C& d
busybox dd if=/dev/mtd12 of=/dev/shm/rootfsA.bin
9 _! d0 T9 u: R
4 y+ Z' G0 N  k  E/ r& c
: X. d' c1 S4 {

这里各个分区备份出来后可以用hwfw_gui替换内部文件,或者直接通过还原命令在其他设备刷入。

2 v! r0 m7 j+ c* V* v: W! ]

0 G# m* G/ L0 i9 r8 f6 h4 }. {" N  ^) g, S8 D, H! d4 ~9 H
6 |( A9 Y* w% k) ^+ h2 h
5、tftp导出备份文件到电脑+ {: H; g2 t/ n. Q
tftp -p -l rootfsA.bin  -r rootfsA.bin 192.168.1.2, q- m: y& [5 C* d' T0 c$ Z3 Q
: V$ {$ f! s- B9 ^1 k& ~2 L

# W3 x6 w! K0 [. O40MB文件,(bin固件直接导出rootfs.img是38.1MB,40MB是后边有FF的空数据), G% o" E' f( ?: B# R; w
* @& T) z) O  i4 ?
6、从备份还原
& C0 ~4 V( O2 D" q" Jdd if=ubootA.bin of=/dev/mtdblock3: g' \7 N( D; r' r5 c( B
或者
- m6 Y* K* D% |5 Pmtd -r write /dev/shm/rootfsA.bin rootfsA
1 `* A; e: ~2 y3 M7 \1 R& C

9 h( j1 Q' M" z) v6 q5 G4 b; g* |# Y6 _; ^

0 y, c6 F; p# G: F9 X2 N
1 B4 b6 O" z. a9 d  ~

' i7 C/ I) }$ v' @3 C! w/ v0 N% z" L) N0 S

* ~. \) ]5 z1 p2 {; _ultraedit查看如下:; u; y) ]' `3 {% o! k

! n( W" B) S$ Y9 O  ]2 T- @9 e) e; `. k9 _
hwfw_gui导出的rootfs.img
, [2 z- I2 [  \# V4 `+ K2 K* J; H9 P& }8 a1 H+ }
备份的rootfs
  g, l, s4 W8 M2 h, P/ ]' ^5 b4 E. }2 O

. I( ~, ]9 y& y/ d% U/ K. E" \* C+ E/ R: I  L4 s$ d) b2 E( y6 F
最后说一下,备份时候一定要确认你选的目录有足够的空间,备份完毕后可以df查看目录使用率是否达到100%,如果达到表示固件基本上没有备份完全。没备份完全的不要刷,刷了就会变砖。5 w* ?+ T6 A! H
, g/ a$ z- |4 L

# o) M/ a- b' d5 k& }7 I" R/ c7 X(PS一句 如果你备份的bin文件16进制末尾不是FFFFFF那么你基本备份失败,因为mtd一般都会比img固件大,所以不会完全写满mtd设备,这样备份出来的bin末尾必定是FF空段)
9 \2 z3 o* a) f$ {
% [! C; @+ ?) b. H7 l+ V

# u# Y' a( J* l. {2 ~/ A
" ], P! L. x, v( x9 G- G3 R2 j  O6 j

4 q- ~% h& h* _) K. f! B8 A参考来源:( b  M2 Y4 ^# O, A9 _
https://blog.csdn.net/chang198932/article/details/36435209
* x# Z# U$ U3 N- W$ |https://blog.csdn.net/kepa520/article/details/511954397 K" A9 V. @7 a  i3 |2 H& e  u" W
http://man.linuxde.net/tftp
& e* f2 z. [- {0 A1 z+ e! x2 B$ F) n; O
2 s8 b+ z' p" g' M! p, N
最最最后希望猫友可以帮忙备份一下 HS8145V的R018所有固件。拜谢!' ~# C6 F- N: }& Y
& P& X6 K; t" D; y
可以参考这个帖子回复$ e% i) S$ w$ G3 t

& D6 {" C# m4 j
https://www.chinadsl.net/forum.php?mod=viewthread&tid=158559&highlight=%B1%B8%B7%DD3 L0 U, o+ C5 _  C! j$ f

+ u8 s! X% B; {9 Q9 {1 i
8 ?) D7 o/ M1 x8 b
# O, Q& h4 y1 e' S% {# Z% @3 \
- T6 M$ D1 A0 @) k0 \. G

4 K) I4 h9 \0 U' x
" {' w8 q. C1 r% ^7 y

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2018-9-28 19:02:32 | 显示全部楼层
本帖最后由 942250037 于 2018-9-28 19:04 编辑
1 D( Y- X: K# c1 @2 s% }2 ?  k9 T
3 v: f3 P" m" }, N+ _7 e! p9 J你还原分区命令都搞错了  以下恢复命令经过测试有效正确命令, g- M8 T. O; X* L+ x# w$ e
busybox dd if=/dev/mtd11 of=/dev/mtdblock12    从11分区还原12
( _& [; W  w4 \# l4 |% \busybox dd if=/dev/mtd9 of=/dev/mtdblock10     从9分区还原10
' U8 \3 K7 S& M" Abusybox dd if=/dev/mtd3 of=/dev/mtdblock4      从3分区还原4- H) S& N% [( k
cd /dev/shm 进入目录  tftp -g -r rootfsA.bin 192.168.1.2  上传$ [$ D, C/ W0 d. a$ s  l
+ I/ m* H* g  ~# K  p8 S8 Z) I
busybox dd if=/dev/shm/rootfsA.bin of=/dev/mtdblock12 还原12  
9 @6 X$ c& m8 Z  a3 u+ F5 Pbusybox dd if=/dev/shm/kernelA.bin of=/dev/mtdblock10  还原10 9 u, T' B8 P2 t
busybox dd if=/dev/shm/ubootA.bin of=/dev/mtdblock4     还原4
! G! d% f& m3 ]
发表于 2018-9-23 18:36:13 | 显示全部楼层
备份末端FF删不掉

点评

删掉有什么用?为什么要删?  详情 回复 发表于 2018-10-7 10:23
发表于 2018-9-21 18:26:47 | 显示全部楼层
你QQ号多少,我上次备份了的  V$ B. D3 n$ ~/ I4 t) G5 p
发表于 2018-9-21 20:40:23 | 显示全部楼层
感谢分享
/ }+ V- m% [# B: k0 W* r- v5 v3 \可是我导出来的R017无法用hwfw_gui打开,是什么回事呢?

点评

备份出来的是hwfw_gui内部的rootfs,而不是刷机包bin。 无法直接备份出原始的刷机包的。要自己再用hwfw_gui拼凑。 大哥比方,华为固件是windows的ISO安装镜像,我们备份的就像ghost备份。只能从备份还原方法刷其他  详情 回复 发表于 2018-9-21 21:12
 楼主| 发表于 2018-9-21 21:12:26 | 显示全部楼层
naim1 发表于 2018-9-21 20:40  k7 e* E9 f2 ?6 `/ V! v9 S
感谢分享$ D" s7 E+ n- B) C2 x+ z$ R  \$ {
可是我导出来的R017无法用hwfw_gui打开,是什么回事呢?

4 f- |! k/ m$ U0 w6 y& @备份出来的是hwfw_gui内部的rootfs,而不是刷机包bin。  K9 K& Y! Z! R: O
无法直接备份出原始的刷机包的。要自己再用hwfw_gui拼凑。
3 s, [6 F! N# j) D( K* n/ g+ O大哥比方,华为固件是windows的ISO安装镜像,我们备份的就像ghost备份。只能从备份还原方法刷其他机器备份的部分,而不能直接使能工具刷。
发表于 2018-9-21 21:39:36 | 显示全部楼层
华为的固件提取制作都比较简单,想要一些简单的功能也可以通过写个.SH 来解决。那位大神能搞定中兴烽火的固件编辑就好了
发表于 2018-9-21 21:46:58 | 显示全部楼层
本帖最后由 yecunbo 于 2018-9-21 21:48 编辑
& D+ ]. D) d' }8 q6 A. q
* z/ _' ?5 e' r7 J! M: ]* ]经过尝试可以备份但是无法恢复进去,我有R18版本的8145v可以备份给你,加W X: yezi860061交流学习!
发表于 2018-9-22 12:24:32 | 显示全部楼层
谢谢分享,学习了
 楼主| 发表于 2018-9-23 23:00:47 | 显示全部楼层
942250037 发表于 2018-9-23 18:36
+ _3 S( {6 |4 u$ V5 G备份末端FF删不掉

6 u; b( Q1 @, d% u' O用16进制编辑器可以删除的 不是直接delete键和backspace  通过右击编辑删除" o% f+ h; [, p. ]  p/ m
用winhex或者 ultraeditor 软件使用教程可以问度娘
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|宽带技术网 |网站地图

粤公网安备 44152102000001号

GMT+8, 2024-5-2 14:46 , Processed in 0.027177 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表