逆向研究QCA9563固件,查看和修改GPIO定义

自己刷了个qca9563用作ap玩,奈何GPIO定义不清楚,wan口灯什么的都不知道引脚定义。

某快的GPIO定义网上只有寥寥言语,在某鱼商家眼里,这些都是能卖钱的机密信息。

于是想既然有固件了,我为何不从固件里面寻找信息呢?

开始百度搜索了相关内容,找到两篇有帮助的:

手工使用二进制工具修改H大的breed的gpio复位键的心得-续-逆向恢复符号表

一次嵌入式固件逆向实践

于是按照流程开始研究,首先是在KALI里面用binwalk解包固件得到名为60040的内核

开始导入IDA PRO里面进行逆向,确实一个函数都没有。

然后用rbasefind爆破基地址,16线程跑了一个晚上,然后告诉我基地址是0x80060000?

我早该想到的。一半路由器内核加载地址都是这个。 (这里有个坑,rbasefind默认为小端,这里要加 “-b”) 

修改基地址后,按c试下,大部分函数都能出来了,但是字符串什么的都还是不显示,上面文章说ghirda能够识别更多的函数和字符串,于是换用ghirda,感觉确实分析功能更强大。

找了找和led有关的字符串和函数,发现了几个疑似的,但是并不像原文章那样清晰明了,直接函数里面把参数和代入的变量都显示出来,毕竟固件不一样嘛。

然后想办法按照文章所述恢复符号表,研究了半天发现固件不一样,符号表细节处也不一样,

在fjh1997所用的固件中,符号表定义如下:

 但是在爱快的固件里面,有三千多个函数名称,但是都是对应的连续的80开头的,并没有偏移量,这可怎么对应?

事情陷入了僵局,纠结了两三天,各种写脚本测试,仍是无功而返,我相信是有办法对应函数名称的,但是不得其法。

无意中翻看,发现有一部分地址不是连续的,后面跟的有数据,但是和原文中的数据不一样,也是没有偏移地址。但是好在里面有数据了,开始考虑这个地址后面的数据是什么意思。

前面0x802f91dc搜了下,是个字符串alfa:red:led_5,或许是变量,那后面的0xc和0x80是什么意思,也是偏移么?事实证明是我想多了,测试了一大圈,最后发现0xc直接就是变量赋值,结果明明就在眼前啊!!!

于是找了几个眼熟的引脚名称,拿去和老版的openwrt源代码里面的引脚定义对比下,完美契合!

虽然没有找到恢复函数名称的方法,但是能找到变量定义,尤其是引脚定义也是可以啊!!!

于是按照思路写了IDA脚本,是python2脚本,没有int.from_bytes()函数,不够优雅。

tag_start=0x80383fd8
tag_end=0x80387150

def get_str(addr, l):
    temp = ''
    for i in range(0, l):
        temp = temp + ''.join('%02x' % ord(c) for c in get_bytes(addr+i,1))
    return temp

while True:
    if get_str(tag_start, 1) == '80':
        var_addr = int(get_str(tag_start, 4),16)
        var_name = get_strlit_contents(var_addr)
        if var_name != None:
            var_val = get_str(tag_start+11, 1)
            tag_start = tag_start + 0x10
            print var_name + '    ' + str(int(var_val,16))
        else:
            tag_start = find_binary(tag_start+1,SEARCH_DOWN, '80')
    elif get_str(tag_start, 1) == '00':
        var_addr = int(get_str(tag_start+12, 4),16)
        var_name = get_strlit_contents(var_addr)
        if var_name != None:
            var_val = get_str(tag_start+7, 1)
            tag_start = tag_start + 0x24
            print var_name + '    ' + str(int(var_val,16))
        else:
            tag_start = find_binary(tag_start+1,SEARCH_DOWN, '80')
    else:
        tag_start = find_binary(tag_start,SEARCH_DOWN, '80')
        print tag_start     
    if tag_start >= tag_end:
        break

写的不是很完美,因为start到end地址里面类似结构体的变量和数据组长度不一致,有些意义未明,排除了一些干扰,只找 led 和 button 的数据结构。因为这两种长度信息比较固定和统一。

led_gpio

80 2F A7 68 00 00 00 00 00 00 00 02 80 00 00 00 
80 2F A7 80 00 00 00 00 00 00 00 01 80 00 00 00 
80 2F A7 98 00 00 00 00 00 00 00 04 80 00 00 00 
80 2F A7 AC 00 00 00 00 00 00 00 00 80 00 00 00 
80 2F A7 C0 00 00 00 00 00 00 00 06 80 00 00 00 

button_gpio
00 00 01 98 00 00 00 08 00 00 00 01 80 2F 92 74 00 00 00 01 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 00 
00 00 02 11 00 00 00 03 00 00 00 01 80 2F A7 BC 00 00 00 01 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 00 
00 00 01 02 00 00 00 0B 00 00 00 01 80 2F 9E 40 00 00 00 01 00 00 00 00 00 00 00 3C 00 00 00 00 00 00 00 00 

运行,bingo,拿到的结果找几个熟知的型号路由器源代码引脚定义 对比下,完全一致,目的达到了。

我相信里面可以挖掘的东西还有很多,函数名称怎么对应,后续有带研究。希望研究有结果的可以告知。

后续修改我没有测试,按理说修改GPIO对应值之后,将内核重新打包,应该是可以达到目的的。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
QCA8337N是一个高度集成的七端口千兆位以太网交换机,具有非阻塞交换机结构,一个具有2048个MAC地址的高性能查找单元,以及四个流量等级的QualityofS。服务(QoS)引擎QCA8337N交换机具有支持各种网络应用程序的灵活性。QCA8337N是为高端网关和xpon中的成本敏感的交换机应用而设计的。 QCA8337N集成了高速交换系统的所有功能,包括数据包缓冲区、PHY收发器、媒体访问控制器、地址管理和非阻塞交换结构。一个55 nm的CMOS器件。它符合10 BASE-Te和1000 BASE-T规范,包括mac控制、暂停帧和自动协商子部分,提供了与所有行业标准以太网、快速et兼容的功能。 QCA8337N器件包含5个全双工10BASE-Te/100BASE-Tx/1000BASE-T收发信机,10BASE-Te/100BASE-Tx可以在半双工运行,每一个都执行所有物理层Interfa。它们在第5类无屏蔽双绞线(UTP)电缆上执行10BASE-Te以太网的所有物理层接口功能,在第5类UTP电缆上执行快速/千兆以太网的所有物理层接口功能。 其余两个端口具有标准的GMII/RGMII/MII/SerDes接口,允许在PON/xDSL/电缆/Wi-Fi/光纤路由器中连接到主机CPU。在QCA8337N上的媒体访问控制器也是。upport巨帧,通常用于与服务器的高性能连接,因为它们为更高的效率提供了较小的链路开销百分比。 spi或EEProm接口提供片内802.1pQoS和/或DiffServ/TOS的轻松编程。这允许将交换机流量指定为不同级别的优先级或服务-例如,语音IP电话应用程序的通信量,多媒体应用程序的视频通信量,或电子邮件应用程序的数据流量。 可以通过SPI端口设置多达4K的虚拟局域网(VLAN),以分离网络上的不同用户或组。ACL特性可以减少基于第一层到第四层信息的VLAN/QoS/DSCP/正向映射和重映射的CPU工作量。PPPoE头加/移除可以提高视频质量和卸载CPU负载。绿色节电技术可以提高无链路或空闲状态下的能效 Qualcomm XSPantM QCA9563是一个高度集成和功能丰富的IEEE 802.11n 3x3 2.4 GHz系统芯片(SoC),适用于先进的WLAN平台。 它包括一个MIPS 74Kc处理器,一个SGMII接口和一个外部存储器接口,用于串行Flash,DDR 1或DDR 2,UART,PCIe,两个USB 2.0主机控制器,内置的MAC/PHY和GPO可用于LED控件或其他通用接口配置。 QCA9563支持高达216 Mbps的20 MHz和450 Mbps的40 MHz的802.11n操作和802.11b/g的数据速率。其他特性包括最大似然(ML)译码、低密度奇偶。 QCA9563支持从NOR闪存启动 Qualcomm Atheros QCA9882 是一种用于5GHz 802.11ac或2.4/5 GHz 802.11n WLAN应用的高度集成的无线局域网(WLAN)片上系统(SoC)。QCA9882集成了板载CPU,用于WLAN物理层(PHY)和RF的低级设置,以便将主机处理器卸载到其他任务。支持两种空间的高性能2x2MIMO无线应用的流要求最高的健壮链路质量和最大的吞吐量和范围。QCA9882集成了多协议mac、phy、模拟数字/数字模拟转换器(ADC/DAC)、2x2mimo无线电收发器和pci Express接口,用于低功耗的cmos器件。 QCA9882实现了半双工OFDM、CCK和DSSS PHY,支持802.11ac 80MHz信道操作的867Mbps.它支持20MHz的802.11n和40MHz的300Mbps的802.11n,以及IEEE 802.11a/b/g数据速率。其他特性包括最大似然(ML)译码、低密度奇偶校验(Ldpc)、最大比合并(Mrc)、空时分组码(Stbc)。),以及片上一次可编程(OTP)存储器,以消除外部闪存的需要,并进一步降低外部组件计数和BOM成本。QCA 9882支持802.11无线MA。C协议、802.11i安全、Rx/TX过滤、错误恢复和802.11e服务质量(QoS) QCA 9882支持多达两个同时的业务流,将两个TX和两个Rx链集成在一起,以实现高吞吐量和扩展覆盖。Tx链结合PHY同相(I)和正交(Q)sigNAL,将它们转换到所需的频率,并将RF信号驱动到多个天线。RX链使用集成的体系结构。该频率合成器支持1MHz步骤,以匹配IEEE 802.11a/b/g/n规范定义的频率。QCA9882支持使用PCIe接口与主机之间的帧数据传输。提供中断生成和报告、电源保存和状态报告。其他外部接口包括EEPROM和GPIO

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值