GLiNET-GL-RM10-KVM使用終端改地區編碼
GLiNET-GL-RM10-KVM使用終端改地區編碼

GLiNET-GL-RM10-KVM使用終端改地區編碼

本次修改的起因很簡單,因為買到了CN版本固件的GL-RM10,在國外使用因此需要修改為國際版
中國境內購買的,中轉伺服器將會是在大陸,可能會有防火問題,會偶有無法中繼的情況發生外,內建程式也不同

⬇️打開終端機

██████╗ ██╗ ██╗ ██╗██╗ ██╗███╗ ███╗
██╔════╝ ██║ ██║ ██╔╝██║ ██║████╗ ████║
██║ ███╗██║ █████╔╝ ██║ ██║██╔████╔██║
██║ ██║██║ ██╔═██╗ ╚██╗ ██╔╝██║╚██╔╝██║
╚██████╔╝███████╗██║ ██╗ ╚████╔╝ ██║ ╚═╝ ██║
╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝

─────────────────────────────────────────────
Welcome to Glkvm
System is ready. Have a productive day!
─────────────────────────────────────────────

bash-5.2#

先嘗試一下是否為標準的MTD
輸入:cat /proc/mtd
⬇️終端機反饋
cat: /proc/mtd: No such file or directory
🤔看到不是標準的MTD而且mtd不存在。要嘗試尋找/dev裡面有沒有emmc/mcc
輸入:ls /dev
⬇️終端機反饋
autofs full hwrng media1 mmcblk0p4 ptp0 stdout tty18 tty29 tty4 tty50 tty61 v4l-subdev1 vcsu video16 video27 video38
block gpiochip0 i2c-1 media2 mmcblk0p5 pts tty tty19 tty3 tty40 tty51 tty62 v4l-subdev2 vcsu1 video17 video28 video39
bus gpiochip1 i2c-3 media3 mmcblk0p6 random tty0 tty2 tty30 tty41 tty52 tty63 v4l-subdev3 vendor_storage video18 video29 video4
char gpiochip2 i2c-5 media4 mmcblk0p7 rfkill tty1 tty20 tty31 tty42 tty53 tty7 v4l-subdev4 video-camera0 video19 video3 video5
console gpiochip3 iio:device0 mem mmcblk0p8 rga tty10 tty21 tty32 tty43 tty54 tty8 v4l-subdev5 video0 video2 video30 video6
cpu_dma_latency gpiochip4 input mmcblk0 mmcblk0p9 rk_dma_heap tty11 tty22 tty33 tty44 tty55 tty9 v4l-subdev6 video1 video20 video31 video7
crypto gpiochip5 kmpp_ioctl mmcblk0boot0 mmcblk0rpmb rknpu tty12 tty23 tty34 tty45 tty56 ttyFIQ0 v4l-subdev7 video10 video21 video32 video8
disk gpiochip6 kmpp_objs mmcblk0boot1 mpi shm tty13 tty24 tty35 tty46 tty57 ttyS2 vcodec video11 video22 video33 video9
dma_heap gpiochip7 kmsg mmcblk0p1 mpp_service snd tty14 tty25 tty36 tty47 tty58 urandom vcs video12 video23 video34 watchdog
dri hidg0 log mmcblk0p10 net ssl_touch_misc tty15 tty26 tty37 tty48 tty59 usb-ffs vcs1 video13 video24 video35 watchdog0
fb0 hidg1 lt6911c mmcblk0p2 null stderr tty16 tty27 tty38 tty49 tty6 v4l vcsa video14 video25 video36 zero
fd hidg2 media0 mmcblk0p3 ptmx stdin tty17 tty28 tty39 tty5 tty60 v4l-subdev0 vcsa1 video15 video26 video37

⚠️可以看到機器存儲介質是emmc而不是mtd
🤔這個時候就要嘗試尋找地區編碼存在的位置,那麼搜索需要圍繞/dev/mmcblk0pX和/dev/mmcblk0bootX
再次確認是否存在mmc請輸入以下內容:ls -l /dev/mmcblk0*

⬇️終端機反饋
ash-5.2# ls -l /dev/mmcblk0*
brw-rw—- 1 root disk 179, 0 Jan 1 1970 /dev/mmcblk0
brw-rw—- 1 root disk 179, 32 Jan 1 1970 /dev/mmcblk0boot0
brw-rw—- 1 root disk 179, 64 Jan 1 1970 /dev/mmcblk0boot1
brw-rw—- 1 root disk 179, 1 Jan 1 1970 /dev/mmcblk0p1
brw-rw—- 1 root disk 179, 10 Jan 1 1970 /dev/mmcblk0p10
brw-rw—- 1 root disk 179, 2 Jan 1 1970 /dev/mmcblk0p2
brw-rw—- 1 root disk 179, 3 Jan 1 1970 /dev/mmcblk0p3
brw-rw—- 1 root disk 179, 4 Jan 1 1970 /dev/mmcblk0p4
brw-rw—- 1 root disk 179, 5 Jan 1 1970 /dev/mmcblk0p5
brw-rw—- 1 root disk 179, 6 Jan 1 1970 /dev/mmcblk0p6
brw-rw—- 1 root disk 179, 7 Jan 1 1970 /dev/mmcblk0p7
brw-rw—- 1 root disk 179, 8 Jan 1 1970 /dev/mmcblk0p8
brw-rw—- 1 root disk 179, 9 Jan 1 1970 /dev/mmcblk0p9
crw——- 1 root root 243, 0 Jan 1 1970 /dev/mmcblk0rpmb

⚠️這個時候已經確認了3點:
1、主裝置mmcblk0
2、boot分區是mmcblk0boot0、mmclk0boot1
3、分區為p1到p10

嘗試一下GLiNET路由器的改地區思路:COUNTRY:CN
輸入:
hexdump -C /dev/mmcblk0p2 | grep COUNTRY
hexdump -C /dev/mmcblk0boot1 | grep COUNTRY
hexdump -C /dev/mmcblk0p1 | grep COUNTRY
⚠️發現終端機沒有輸出那麼就不能用這個思路
嘗試閱歷文件
終端機輸入:strings /dev/mmcblk0p3 | grep COUNTRY

⬇️終端機反饋:
COUNTRY_INFO
COUNTRY_CODES
COUNTRY=%c%c

⚠️這個時候看起來有實錄可以解決但是如果你繼續往下找你就會發現輸入strings /dev/mmcblk0p3 | grep -E “CN|US|EU|JP|RU|TW”
出來的全是一堆沒有用的垃圾,那說明思路又錯了
那嘗試:vendor_storage
終端機依舊沒有反饋,那放棄這個想法

那直接用最傻瓜的辦法,一個一個分區研究他是什麼用途再推斷邊啲分區最可能存放region code
那我們需要枚舉所有分區 uevent,請輸入:ls /sys/block/mmcblk0/mmcblk0p*/uevent
⚠️這裡我整理好終端機會輸出什麼東西的意思對應給你
P1 uboot
P2 misc
P3 boot
P4 recovery
P5 backup
P6 rootfs
P7 oem
P8 userdata
P9 factory
⚠️⚠️⚠️絕對不可以碰會變磚⚠️⚠️⚠️
uboot、boot、recovery、rootfs

🤔找到真正目標分區 factory
試試看P8、P9
輸入:cat /sys/block/mmcblk0/mmcblk0p8/uevent

⬇️終端機提示:
PARTNAME=userdata

那就再試試看P9吧
輸入:cat /sys/block/mmcblk0/mmcblk0p9/uevent

⬇️終端機提示:
PARTNAME=factory

👌找到分區啦那就要去找
strings /dev/mmcblk0p9 | grep -I country
⚠️發現終端機沒有輸出那麼就不能用這個思路
再試一下hexdump -C /dev/mmcblk0p9 | grep -E “CN|US|EU|JP”
嗯對了初步認為地區碼第一組存放位置offset 128
先做讀取驗證
請輸入:dd if=/dev/mmcblk0p9 bs=1 skip=128 count=16

⬇️終端機提示:
CN

代表offset128的確正確命中地區碼位置
⚠️為了安全起見先做備份:
dd if=/dev/mmcblk0p9 of=/tmp/factory_p9_backup.bin
成功備份整個factory分區
寫入US參數
請輸入:echo -n “US” | dd of=/dev/mmcblk0p9 bs=1 seek=128 conv=notrunc
此步將offset128的前兩個byte由CN改成US
然後再讀取一次看看dd if=/dev/mmcblk0p9 bs=1 skip=128 count=16

⬇️這個時候終端機提示
USCN

說明位置不是單一2-byte值,更可能一個16-byte區塊入面含有兩組國碼
🤔誤判頁碼後的修正與真正結構確認
正確查看前16行
請輸入:hexdump -C /dev/mmcblk0p9 | sed -n ‘1,16p’

⬇️終端機提示:
00000080 55 53 00 00 00 00 00 00 43 4e 00 00 00 00 00 00

總結:
offset0x80到0x8F16bytes內:
0x80~0x81=第一組國碼
0x88~0x89=第二組國碼
128 (0x80) US
136 (0x88) CN

⚠️第二次寫入,完成雙欄位同步
第二組CN位於0x88十進位=136
執行:echo -n “US” | dd of=/dev/mmcblk0p9 bs=1 seek=136 conv=notrunc
然後驗證:hexdump -C /dev/mmcblk0p9 | sed -n ‘1,10p’

⬇️終端機反饋結果為
00000080 55 53 00 00 00 00 00 00 55 53 00 00 00 00 00 00

⚠️到這個時候就已經全部修改好了
然後輸入:sync
最後輸入:reboot
重啟之後恢復出廠設置登錄雲端可以發現變為Google帳戶登錄
自此全教程結束

發佈留言