返回列表 发布新帖
查看: 226|回复: 7

MSG1500 的爱快固件有吗???

发表于 2025-3-21 22:33:17 | 查看全部 |阅读模式

立刻注册账号,享受更清爽的界面!

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

×
MSG1500退役了  爱快固件有吗???跪求!!!
爱生活,爱奶昔~
发表于 2025-3-21 22:35:04 | 查看全部
瑞斯康达MSG1500可以刷个OpenWRT来着,爱快也只有Q80
这个是MT7621的路由器(硬件版本: X.00),和斐讯K2P采用的硬件相似。 但是多了USB2.0口,内存为256M
相似设备:
瑞斯康达MSG1500  MT7621A+MT7615D+DDR3-256M+128M-NAND-FLASH
诺基亚贝尔A-040W-Q  MT7621A+MT7615D+DDR3-256M+128M-NAND-FLASH
ikuai爱快IK-Q80   MT7621A+MT7615D+DDR3-256M+128M-NAND-FLASH
dlink-DIR853  MT7621A+MT7615D+DDR3-128M+16M-SPI-FLASH
comfast CF-WR618AC  MT7621A+MT7615D+DDR3-128M+16M-SPI-FLASH
PHICOMM 斐讯 K2P MT7621A+MT7615D+DDR3-128M+16M-SPI-FLASH



免编程器刷Q80的东西,适用于瑞斯康达msg-1500 x.00和诺基亚A-040W-Q,内有刷机流程,自行参悟
爱快q80免拆.7z (40.67 MB, 下载次数: 2, 售价: 10 金币)
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-3-21 22:36:27 | 查看全部
yagamil 发表于 2025-3-21 22:35
瑞斯康达MSG1500可以刷个OpenWRT来着
这个是MT7621的路由器(硬件版本: X.00),和斐讯K2P采用的硬件相似。  ...

没爱快好使~~
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2025-3-21 22:36:33 | 查看全部
看了下mt7621应该是可以的,找下极路由4的breed-mt7621-hiwifi-hc5962.bin的breed
由于此breed的reset按键为#18,
而#18在msg1500路由器中对应WPS键。因此进入breed需要按WPS。
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2025-3-21 22:51:10 | 查看全部


瑞斯康达MSG1500,诺基亚贝尔A-040W-Q同一方案。用爱快Q80的固件就行,流控双wan等一样可用
正面 MT7621  ,DDR3/256M,MT7615DN无线,背面128M闪存。如果你要刷得换8脚闪存的spi,不换没什么可玩空间,只能刷openwrt的华硕85p
可参考 https://www.right.com.cn/forum/thread-6421156-1-1.html

爱快M50_Q80的3.7.5固件,刷完直接企业版
链接:https://pan.baidu.com/s/1AFzuzSV-9-FzR5olYTZzvQ?pwd=6666
提取码:6666
论坛下载: ikaui_M50_Q80.zip (41.25 MB, 下载次数: 0, 售价: 10 金币)
爱生活,爱奶昔~
回复 支持 反对

使用道具 举报

发表于 2025-3-21 22:55:56 | 查看全部
固件
全网找了一遍,通过对比后只发现两个不一样的
https://wwri.lanzouo.com/iO2LF0ltvemd密码:91bf
Q80.7z (43.25 MB, 下载次数: 0)
转换
编程器备份出来的132M固件转换为128M的可以刷入固件
安装 python2.7
文件地址:https://github.com/Hitsxx/NandTool/blob/master/Nand-dump-tool.py
#!/usr/bin/env python2
# -*- coding: utf-8 -*-

#############################################################################
##                                                                         ##
## This file is proposed as is                                             ##
##                                                                         ##
##  Author: Jean-Michel Picod                                              ##
##                                                                         ##
## This program is distributed under GPLv3 licence                         ##
##                                                                         ##
#############################################################################

import sys
import os
import argparse


class NandId(object):
    ## Lookup tables are taken from SpritesMods' work: http://spritesmods.com/?art=ftdinand
    ## and B. Kerler's improvements: https://github.com/bkerler/NANDReader_FTDI
    _manuf = {
        0x01: "AMD / Spansion",
        0x04: "Fujitsu",
        0x07: "Renesas",
        0x20: "ST Micro / Numonyx",
        0x2c: "Micron",
        0x45: "Sandisk",
        0x89: "Intel",
        0x8f: "National Semiconductors",
        0x92: "EON",
        0x98: "Toshiba",
        0xad: "Hynix",
        0xc2: "Macronix",
        0xd3: "Samsung",
        0xdc: "Samsung",
        0xec: "Samsung",
    }

    _devid = {
        0x6e: "NAND 1MiB 5V 8-bit",
        0x64: "NAND 2MiB 5V 8-bit",
        0x6b: "NAND 4MiB 5V 8-bit",
        0xe8: "NAND 1MiB 3,3V 8-bit",
        0xec: "NAND 1MiB 3,3V 8-bit",
        0xea: "NAND 2MiB 3,3V 8-bit",
        0xd5: "NAND 4MiB 3,3V 8-bit",
        0xe3: "NAND 4MiB 3,3V 8-bit",
        0xe5: "NAND 4MiB 3,3V 8-bit",
        0xd6: "NAND 8MiB 3,3V 8-bit",
        0x39: "NAND 8MiB 1,8V 8-bit",
        0xe6: "NAND 8MiB 3,3V 8-bit",
        0x33: "NAND 16MiB 1,8V 8-bit",
        0x73: "NAND 16MiB 3,3V 8-bit",
        0x35: "NAND 32MiB 1,8V 8-bit",
        0x75: "NAND 32MiB 3,3V 8-bit",
        0x36: "NAND 64MiB 1,8V 8-bit",
        0x76: "NAND 64MiB 3,3V 8-bit",
        0x78: "NAND 128MiB 1,8V 8-bit",
        0x39: "NAND 128MiB 1,8V 8-bit",
        0x79: "NAND 128MiB 3,3V 8-bit",
        0x71: "NAND 256MiB 3,3V 8-bit",
        0xa2: "NAND 64MiB 1,8V 8-bit",
        0xa0: "NAND 64MiB 1,8V 8-bit",
        0xf2: "NAND 64MiB 3,3V 8-bit",
        0xd0: "NAND 64MiB 3,3V 8-bit",
        0xf0: "NAND 64MiB 3,3V 8-bit",
        0xa1: "NAND 128MiB 1,8V 8-bit",
        0xf1: "NAND 128MiB 3,3V 8-bit",
        0xd1: "NAND 128MiB 3,3V 8-bit",
        0xaa: "NAND 256MiB 1,8V 8-bit",
        0xda: "NAND 256MiB 3,3V 8-bit",
        0xac: "NAND 512MiB 1,8V 8-bit",
        0xdc: "NAND 512MiB 3,3V 8-bit",
        0x10: "NAND 512MiB 3,3V 8-bit",
        0xa3: "NAND 1GiB 1,8V 8-bit",
        0xd3: "NAND 1GiB 3,3V 8-bit",
        0xa5: "NAND 2GiB 1,8V 8-bit",
        0xd5: "NAND 2GiB 3,3V 8-bit",
        0xa7: "NAND 4GiB 1,8V 8-bit",
        0xd7: "NAND 4GiB 3,3V 8-bit",
        0xae: "NAND 8GiB 1,8V 8-bit",
        0xde: "NAND 8GiB 3,3V 8-bit",
        0x1a: "NAND 16GiB 1,8V 8-bit",
        0x3a: "NAND 16GiB 3,3V 8-bit",
        0x1c: "NAND 32GiB 1,8V 8-bit",
        0x3c: "NAND 32GiB 3,3V 8-bit",
        0x1e: "NAND 64GiB 1,8V 8-bit",
        0x3e: "NAND 64GiB 3,3V 8-bit",
    }

    _serial_access_time = {
        0: 50e-9,
        1: 30e-9,
        2: 25e-9,
        3: None,
    }

    def __init__(self, idcode):
        if isinstance(idcode, str) or isinstance(idcode, unicode):
            idcode = int(idcode, 16)
        self.idcode = idcode
        self.manufId = 0xff & (idcode >> 24)
        self.deviceId = 0xff & (idcode >> 16)
        third = 0xff & (idcode >> 8)
        self.die = 2 ** (third & 0x3)
        self.cell = 2 ** (1 + ((third >> 2) & 0x3))
        self.prog_pages = 2 ** ((third >> 4) & 0x3)
        self.interleave = bool((third >> 6) & 1)
        self.write_cache = bool((third >> 7) & 1)
        fourth = 0xff & idcode
        self.page_size = 2 ** (10 + (fourth & 0x3))
        self.spare_size = 2 ** (fourth & 0x4)
        self._sat = ((fourth >> 6)  & 2) + ((fourth >> 3) & 1)
        self.block_size = 2 ** (16 + ((fourth >> 4) & 3))
        self.organization = 2 ** (4 + (1 & (fourth >> 6)))

    @property
    def manufStr(self):
        return self._manuf[self.manufId] if self.manufId in self._manuf else "Unknown (%02x)" % self.manufId

    @property
    def serial_access_time(self):
        return ("%d ns" % (1e9 * self._serial_access_time[self._sat])) or "Reserved"

    @property
    def oob_size(self):
        return self.spare_size * self.page_size / 512

    @property
    def deviceStr(self):
        return self._devid[self.deviceId] if self.deviceId in self._devid else "Unknown (0x%02x)" % self.deviceId

    def __repr__(self):
        rv = []
        rv.append("ID code                          : %08x" % self.idcode)
        rv.append("Manufacturer                     : %s" % self.manufStr)
        rv.append("Device                           : %s" % self.deviceStr)
        rv.append("Die/Package                      : %d" % self.die)
        rv.append("Cell type                        : %d Level Cell" % self.cell)
        rv.append("Simultaneously programmed paged  : %d" % self.prog_pages)
        rv.append("Interleave between multiple chips: %s" % self.interleave)
        rv.append("Write cache                      : %s" % self.write_cache)
        rv.append("Page size                        : %d bytes (%d K)" % (self.page_size, self.page_size / 1024))
        rv.append("Spare area size                  : %d bytes / 512 byte" % self.spare_size)
        rv.append("Block size                       : %d bytes (%d K)" % (self.block_size, self.block_size / 1024))
        rv.append("Organization                     : X%d" % self.organization)
        rv.append("Serial access time               : %s" % self.serial_access_time)
        rv.append("OOB size                         : %d bytes" % self.oob_size)
        return os.linesep.join(rv)


def prettify(val):
    _suffix = [ 'B', 'KB', 'MB', 'GB', 'TB' ]
    suffix = 0
    small = val
    while small > 1024:
        small /= 1024.0
        suffix += 1
    return (val, round(small, 2), _suffix[suffix])

if __name__ == '__main__':
    parser = argparse.ArgumentParser(sys.argv[0])
    parser.add_argument("-i", "--input", metavar="FILE", type=argparse.FileType('rb'), required=True, dest="finput")
    parser.add_argument("-o", "--output", metavar="FILE", type=argparse.FileType('wb'), required=True, dest="foutput")
    parser.add_argument("-I", "--idcode", metavar="ID", default=None, dest="idcode", type=NandId)
    parser.add_argument("--page-size", type=int, default=None, dest="page")
    parser.add_argument("--oob-size", metavar="SIZE", type=int, default=None, dest="oob")
    parser.add_argument("--save-oob", metavar="FILE", type=argparse.FileType('wb'), default=None, dest="oobfile")
    parser.add_argument("--layout", default="adjacent", choices=["adjacent", "separate", "guess"], dest="layout")

    args = parser.parse_args(sys.argv[1:])
    if args.idcode is not None and (args.page is not None or args.oob is not None):
        print >> sys.stderr, "[!] You cannot specify an idcode and page/oob size at the same time"
        sys.exit(1)

    if args.idcode is None and (args.page is None or args.oob is None):
        print >> sys.stderr, "[!] You must specify either idcode or both page and oob sizes"
        sys.exit(2)

    if args.idcode is not None:
        print ""
        print "
  • Using given ID code"         print repr(args.idcode)         args.page = args.idcode.page_size         args.oob = args.idcode.oob_size     else:         print "
  • Using given parameters: page of %d bytes separated by %d bytes OOB data" % (args.page, args.oob)     if args.layout == "guess":         print ""         print "
  • Guessing NAND layout using hamming distance..."         hamming_adj = hamming_sep = 0         oob_data_adj = []         oob_data_sep = []         oob_adj_size = args.oob / (args.page / 512)         while True:             data = args.finput.read(args.page + args.oob)             if data == "":                 args.finput.seek(0)                 break             if data == "\xff" * (args.page + args.oob):                 continue             oob_data_sep.append(data[args.page:])             tmp = ""             for i in range(0, args.page, 512):                 tmp += data[i * (512 + oob_adj_size):(i * (512 + oob_adj_size)) + oob_adj_size]             oob_data_adj.append(tmp)         for i in range(len(oob_data_adj) - 1):             hamming_adj += sum([(ord(a) ^ ord(b)) != 0 for a,b in zip(oob_data_adj[i], oob_data_adj[i + 1])])             hamming_sep += sum([(ord(a) ^ ord(b)) != 0 for a,b in zip(oob_data_sep[i], oob_data_sep[i + 1])])         del oob_data_adj         del oob_data_sep         args.layout = "adjacent" if hamming_sep > hamming_adj else "separate"         print "
  • Guessed layout is: %s" % args.layout     cnt = { 'data': 0, 'oob': 0, 'empty': 0, 'total': 0 }     oob_step = args.oob * 512 / args.page     print ""     print "
  • Start dumping..."     while True:         data = ""         oob = ""         if args.layout == "separate":             data = args.finput.read(args.page)             oob = args.finput.read(args.oob)         elif args.layout == "adjacent":             for i in range(0, args.page, 512):                 data += args.finput.read(512)                 oob += args.finput.read(oob_step)         cnt['data'] += len(data)         cnt['oob'] += len(oob)         args.foutput.write(data)         if args.oobfile is not None:             args.oobfile.write(oob)         if oob == "":             break         cnt['total'] += 1         if data == "\xff" * len(data):             cnt['empty'] += 1     args.finput.close()     args.foutput.close()     if args.oobfile is not None:         args.oobfile.close()     print "
  • Finished"     print "\tTotal: %d bytes (%.02f %s)" % prettify(cnt['data'] + cnt['oob'])     print "\tData : %d bytes (%.02f %s)" % prettify(cnt['data'])     print "\tOOB  : %d bytes (%.02f %s)" % prettify(cnt['oob'])     percent = 100.0 * float(cnt['empty'])/float(cnt['total'])     print "\tClear: %0.2f%% of the flash is empty (%d pages out of %d)" % (percent, cnt['empty'], cnt['total'])     sys.exit(0) # vim:ts=4:expandtab:sw=4
  • 使用【Q80.bin 为需要抓换的132M固件,main-dump.bin 为输出的128M固件】
    Nand-dump-tool.py -i Q80.bin --layout=guess -I eff10095 -o main-dump.bin

    修改
    所有的修改都要在128M固件里修改
    mac修改(应该存在3个MAC地址?lan/wan、5G、2.4G?通过软件可以搜索到4到5个)
    无线的mac是60004开始,往后数6位(改了无线mac 开机后id会自动生成?)
    lan wan口的mac在60028开始,往后数6位【前三位不要改动?代表爱快MAC段,比如说:https://mac.bmcx.com/08:9B:4B:11:22:33__mac/
    60429开始往后6位,不知道是什么:参照:https://www.right.com.cn/forum/f ... 48&pid=16781479
    ID修改(最关键的部分不知道怎么实现)
    id位置:60408-60417
    16进制编辑把60040到600F8整个替换成原厂eep内容(待确认如何操作)
    可参考论坛的爱快gwid和mac修改方法:https://forum.naixi.net/thread-2492-1-1.html

    刷机
    先备份原来的编程器固件(如果有拆机救砖的条件)
    刷机在breed界面进行,路由器进入breed后,使用telnet连接到breed
    下载固件(自己搭建http服务器)
    wget http://192.168.1.2:8080/main-dump.bin
    擦除,刷写固件(0x7f80000 是固件大小,不要改动!)
    flash erase 0x0 0x7f80000
    ​
    flash write 0x0 0x80000000 0x7f80000 (第二个0x80000000)具体看上传的显示)
    上传的显示
    breed> wget http://192.168.1.2:8080/main-dump.bin
    Connecting to 192.168.1.2:8080... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 134217728/0x8000000 (128MB) [application/octet-stream]
    Saving to address 0x80001000
    ​
    [========================================================================] 100%
    ​
    Transmission completed in 27.3s.
    Saving to address 0x80001000

    这里的地址就应该是 0x80001000
    msg1500应该是用
    flash write 0x0 0x80001000 0x7f80000

    TTL
    TFTP信息 客户端10.10.10.123 服务端10.10.10.3 文件名ikuaifirmware
    ttl启动按8中断(8选项不显示 但是实际生效)
    原厂uboot加密,应该无法通过TTL从新刷入breed。可以先刷breed再操作
    爱生活,爱奶昔~
    回复 支持 反对

    使用道具 举报

    发表于 2025-3-21 22:57:53 | 查看全部
    heardic 发表于 2025-3-21 22:55
    固件
    全网找了一遍,通过对比后只发现两个不一样的
    https://wwri.lanzouo.com/iO2LF0ltvemd密码:91bf

    改了个SPI闪存的爱快固件,可以改MAC和ID
    由于不会焊接无法使用nand编程器,nand闪存的爱快固件没法测试了
    刷 k2p breed后 可以刷爱快m50编程器固件,可以试试看
    爱生活,爱奶昔~
    回复 支持 反对

    使用道具 举报

    发表于 2025-3-21 23:00:54 | 查看全部
    yagamil 发表于 2025-3-21 22:35
    瑞斯康达MSG1500可以刷个OpenWRT来着,爱快也只有Q80
    这个是MT7621的路由器(硬件版本: X.00),和斐讯K2P采 ...

    试了下K2PA1可以用,配置是32+512
    切记ikuai是32m,k2p 16m不能刷
    爱生活,爱奶昔~
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    • 关注公众号
    • 添加微信客服
    © 2025 Naixi Networks 沪ICP备13020230号-1|沪公网安备 31010702007642号
    关灯 在本版发帖
    扫一扫添加微信客服
    返回顶部
    快速回复 返回顶部 返回列表