恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
当贝投影
查看: 1075|回复: 24

手工使用二进制工具修改H大的breed的gpio复位键的心得

[复制链接]
发表于 2021-10-15 14:54 | 显示全部楼层 |阅读模式
本帖最后由 fjh1997 于 2021-10-15 18:35 编辑

致敬下H大的breed帖子:https://www.right.com.cn/forum/thread-161906-1-1.html
H大的这个breed很好用,但是可能是因为NDA的关系,不开源就有点可惜。最近遇到一个TL-WAR308路由器,但是去了H大的仓库看了下http://breed.hackpascal.net/,发现只有breed-qca953x-letv-lba-047-ch.bin这个breed能用,但是这个breed的reset键设置的是gpio17,而我的路由器复位键是gpio 14。去帖子上看了下说明,发现只有结尾是blank的breed才能通过环境变量设置gpio,我这个没带blank就不行。
那该怎么办呢?就硬怼。首先使用binwalk来分析breed固件的结构:
  1. binwalk breed-qca953x-letv-lba-047-ch.bin

  2. DECIMAL       HEXADECIMAL     DESCRIPTION
  3. --------------------------------------------------------------------------------
  4. 10228         0x27F4          Copyright string: "Copyright (C) 2020 HackPascal <hackpascal@gmail.com>"
  5. 10648         0x2998          LZMA compressed data, properties: 0x6D, dictionary size: 33554432 bytes, uncompressed size: 289721 bytes
复制代码
发现breed固件又两部分组成,一部分是前面部分的raw数据,另一部分是通过LZMA压缩过的数据。
使用命令
  1. binwalk -e breed-qca953x-letv-lba-047-ch.bin  
复制代码


解压出一个名为2998的文件以及一个名为2998.7z的文件,这个应该就是LZMA解压出来的数据以及LZMA压缩数据。
使用010editor在这里面看了看,好像没有明细看到定义gpio的地方,于是就想到做对比。
使用相同方法分别解压h大的固件breed-qca956x-uart_rx18_tx20-reset1.bin和breed-qca956x-uart_rx18_tx20-reset2.bin,发现了神奇的现象:
截屏2021-10-15 下午3.07.54.png
发现这两个固件的lzma解压出来的部分只有一处不同,而且恰好对应reset1 和reset2
即24 04 00 01 24 05 00 01与24 04 00 02 24 05 00 01
再次比对了下breed-mt7620-reset11.bin和breed-mt7620-reset12.bin发现也是只有一位不同,也恰好对应的是0xB和0xC也就是reset11和reset12
截屏2021-10-15 下午3.13.25.png
即0B 00 04 24 01 00 05 24和0C 00 04 24 01 00 05 24
发现和前面那对固件差不多,那应该是大小端不同的原因导致不同。
由于我要刷的路由器固件是qca9533的所以更应该参考qca956x即前面这对固件的信息。
那么接下来的问题就是对lzma解压出来的数据进行修改然后重新打包回lzma。
使用binwalk解压breed-qca953x-letv-lba-047-ch.bin果然发现了24 04 00 11 24 05 00 01,0x11是17,那么改成0xe就可以改成14了
截屏2021-10-15 下午3.22.15.png
但是lzma算法有很多种参数形式,到底哪种合适呢?
于是我使用7z看了一下发现算法是 LZMA:25:lc1:lp2
也就是数据字典大小是25的LZMA算法。
正好,我看了下openwrt的工具链里面提供这个工具
https://downloads.openwrt.org/re ... Linux-x86_64.tar.xz

解压工具链使用工具链里面的lzma工具可以看到一些选项:
  1. ubuntu@ubuntu:~/lede-sdk-17.01.0-ar71xx-generic_gcc-5.4.0_musl-1.1.16.Linux-x86_64/staging_dir/host/bin$ ./lzma -h

  2. LZMA 4.65 : Igor Pavlov : Public domain : 2009-02-03

  3. Usage:  LZMA <e|d> inputFile outputFile [<switches>...]
  4.   e: encode file
  5.   d: decode file
  6.   b: Benchmark
  7. <Switches>
  8.   -a{N}:  set compression mode - [0, 1], default: 1 (max)
  9.   -d{N}:  set dictionary size - [12, 30], default: 23 (8MB)
  10.   -fb{N}: set number of fast bytes - [5, 273], default: 128
  11.   -mc{N}: set number of cycles for match finder
  12.   -lc{N}: set number of literal context bits - [0, 8], default: 3
  13.   -lp{N}: set number of literal pos bits - [0, 4], default: 0
  14.   -pb{N}: set number of pos bits - [0, 4], default: 2
  15.   -mf{MF_ID}: set Match Finder: [bt2, bt3, bt4, hc4], default: bt4
  16.   -mt{N}: set number of CPU threads
  17.   -eos:   write End Of Stream marker
  18.   -si:    read data from stdin
  19.   -so:    write data to stdout
复制代码

那么,我们使用dictionary size为25,number of literal context bits为1,number of literal pos bits为2的LZMA算法就行了。
  1. ./lzma e -d25  -lc1 -lp2 2998 2998.lzma
复制代码

把压缩好的数据2998.lzma替换到breed里面相同偏移的位置就可以了。因为这种lzma算法压缩出来的数据开头是6D 00 00 00对应前面的2998.7z
之后插电开机发现果然修改成功了。
至于怎么检测复位键属于哪个GPIO使用breed里面的内置命令btntst就可以了(详见H大原帖五楼),通过ttl连上breed之后,开启了btntest之后会显示类似下面这种信息,序号对应的就是breed。
  1. GPIO#14  (<gpio0,14>) changed to 0
  2. GPIO#14  (<gpio0,14>) changed to 1
复制代码

如果是led的可以用gpio get set命令来测,可以看到lo和hi高低电位的变化。

我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-15 15:36 | 显示全部楼层
分享下我刚刚修改后的tl-war308的breed。

breed-qca953x-tl-war308.bin.zip

85.25 KB, 下载次数: 9

我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-15 15:41 | 显示全部楼层
大佬牛逼 学习了!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-15 16:27 | 显示全部楼层
谢谢分享,感谢
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-16 13:54 来自手机 | 显示全部楼层
抖个机灵
何不改c代码?
breed2.PNG

点评

breed不开源没法改c代码,你这个是反编译出的伪代码吧?不能直接用。  详情 回复 发表于 2021-10-16 19:43
伪代码不能直接改吧?还是要改汇编代码?这个怎么解包出应用程序?  详情 回复 发表于 2021-10-16 19:28
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-16 19:28 | 显示全部楼层
本帖最后由 fjh1997 于 2021-10-16 19:32 编辑
糜恒博 发表于 2021-10-16 13:54
抖个机灵
何不改c代码?

这个breed不开源,这应该是伪代码,不能直接改吧?还是要改汇编代码?这个怎么解包出应用程序?
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-16 19:43 | 显示全部楼层
糜恒博 发表于 2021-10-16 13:54
抖个机灵
何不改c代码?

breed不开源没法改c代码,你这个是反编译出的伪代码吧?不能直接用。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-17 21:41 | 显示全部楼层
不错。动手能力很强。
这个方法我也研究过。得益于MIPS指令编码中是从bit 0开始嵌入立即数,你才能直观看到变化的数字。

点评

啊啊啊啊啊啊,是H大,居然看到了我的帖子,好激动!!!!!!!!  详情 回复 发表于 2021-10-18 19:25
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-18 19:25 | 显示全部楼层
hackpascal 发表于 2021-10-17 21:41
不错。动手能力很强。
这个方法我也研究过。得益于MIPS指令编码中是从bit 0开始嵌入立即数,你才能直观看 ...

啊啊啊啊啊啊,是H大,居然看到了我的帖子,好激动!!!!!!!!

点评

楼主这方法能否适用于mt7621的呢?还有7620的breed呢?  详情 回复 发表于 2021-10-18 20:41
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-18 20:41 | 显示全部楼层
fjh1997 发表于 2021-10-18 19:25
啊啊啊啊啊啊,是H大,居然看到了我的帖子,好激动!!!!!!!!

楼主这方法能否适用于mt7621的呢?还有7620的breed呢?

点评

能用,新帖子还在审核中,方法都一样的。  详情 回复 发表于 2021-10-18 21:14
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-18 21:14 来自手机 | 显示全部楼层
zjh1990 发表于 2021-10-18 20:41
楼主这方法能否适用于mt7621的呢?还有7620的breed呢?

能用,新帖子还在审核中,方法都一样的。

点评

谢谢。但是帖子教程不够详细,有些看不懂。。  详情 回复 发表于 2021-10-18 21:26
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-18 21:26 | 显示全部楼层
fjh1997 发表于 2021-10-18 21:14
能用,新帖子还在审核中,方法都一样的。

谢谢。但是帖子教程不够详细,有些看不懂。。

点评

不懂的你可以直接问,然后写一个更加详细的教程出来。  详情 回复 发表于 2021-10-18 21:33
我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2021-10-18 21:33 来自手机 | 显示全部楼层
zjh1990 发表于 2021-10-18 21:26
谢谢。但是帖子教程不够详细,有些看不懂。。

不懂的你可以直接问,然后写一个更加详细的教程出来。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-18 21:34 | 显示全部楼层
谢谢分享,感谢
我的恩山、我的无线 The best wifi forum is right here.
发表于 2021-10-19 00:17 | 显示全部楼层
经过测试实验失败,lzma文件经过重新压缩后变大,我用的是breed-qca953x.bin,位置29A8,刷回后breed无法启动

点评

lzma变大或者完全不一样很正常,但需要注意的是压缩算法要一样。然后gpio也很容易改错。最好ttl连上看一下。编程器要有,sop8台座最好也焊上,常备救砖。  详情 回复 发表于 2021-10-19 07:14
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2022-1-17 06:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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