找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 4569|回复: 28

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

[复制链接]
本帖最后由 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,发现了神奇的现象:

发现这两个固件的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

即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了

但是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高低电位的变化。

本帖子中包含更多资源

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

×

评分

参与人数 2恩山币 +3 收起 理由
ph*** + 1 风清云淡、飘逸悠然……极爽!
SkyT*** + 2 今天天气不错,适合泡妞。

查看全部评分

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

本帖子中包含更多资源

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

×
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

大佬牛逼 学习了!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

谢谢分享,感谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
抖个机灵
何不改c代码?

本帖子中包含更多资源

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

×

点评

breed不开源没法改c代码,你这个是反编译出的伪代码吧?不能直接用。  详情 回复 发表于 2021-10-16 19:43
伪代码不能直接改吧?还是要改汇编代码?这个怎么解包出应用程序?  详情 回复 发表于 2021-10-16 19:28
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 fjh1997 于 2021-10-16 19:32 编辑
糜恒博 发表于 2021-10-16 13:54
抖个机灵
何不改c代码?

这个breed不开源,这应该是伪代码,不能直接改吧?还是要改汇编代码?这个怎么解包出应用程序?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
糜恒博 发表于 2021-10-16 13:54
抖个机灵
何不改c代码?

breed不开源没法改c代码,你这个是反编译出的伪代码吧?不能直接用。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

不错。动手能力很强。
这个方法我也研究过。得益于MIPS指令编码中是从bit 0开始嵌入立即数,你才能直观看到变化的数字。

点评

啊啊啊啊啊啊,是H大,居然看到了我的帖子,好激动!!!!!!!!  详情 回复 发表于 2021-10-18 19:25
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
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.
回复

使用道具 举报

fjh1997 发表于 2021-10-18 19:25
啊啊啊啊啊啊,是H大,居然看到了我的帖子,好激动!!!!!!!!

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

点评

能用,新帖子还在审核中,方法都一样的。  详情 回复 发表于 2021-10-18 21:14
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 来自手机 | 显示全部楼层
zjh1990 发表于 2021-10-18 20:41
楼主这方法能否适用于mt7621的呢?还有7620的breed呢?

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

点评

谢谢。但是帖子教程不够详细,有些看不懂。。  详情 回复 发表于 2021-10-18 21:26
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

fjh1997 发表于 2021-10-18 21:14
能用,新帖子还在审核中,方法都一样的。

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

点评

不懂的你可以直接问,然后写一个更加详细的教程出来。  详情 回复 发表于 2021-10-18 21:33
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 来自手机 | 显示全部楼层
zjh1990 发表于 2021-10-18 21:26
谢谢。但是帖子教程不够详细,有些看不懂。。

不懂的你可以直接问,然后写一个更加详细的教程出来。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

谢谢分享,感谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

经过测试实验失败,lzma文件经过重新压缩后变大,我用的是breed-qca953x.bin,位置29A8,刷回后breed无法启动

点评

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-27 09:18

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

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