路由器刷机突破校园网限制 您所在的位置:网站首页 校园网破解版路由器突然连不上 路由器刷机突破校园网限制

路由器刷机突破校园网限制

2023-12-20 05:11| 来源: 网络整理| 查看: 265

免责声明

本教程大部分内容来自 github 上 drcom-generic 开源项目,以及网络上各大牛的帖子与文章,大牛众多且出名,就不一一感谢与强调其版权。只进行了测试与整理以及部分错误的修正针对小白更友好一点,由阅读者实操所产生的一切后果,一概不负责。仅供学习与交流,请勿用于商业用途!

在根据本教程进行实际操作时,如因您操作失误导致出现的一切意外,包括但不限于路由器变砖、故障、数据丢失等情况,概不负责;该技术仅供学习交流,请勿将此技术应用于任何商业行为,所产生的法律责任由您自行承担;部分学校明令禁止使用路由器上网。本教程仅用于交流使用,安装路由器的行为完全是您个人意志所决定的,如您已成功安装,请在 24 小时内重置路由器至原出产状态;请按照学校推荐的方式连接到互联网,如因个人问题受到相关校规追责,由您自行承担。 环境准备 python2.7(调试用到)wireshark(抓包工具)notepad++(修改代码用到)一款支持刷入第三方系统(openwrt)的路由器该路由器已联网并获得开发者(root)权限一根网线下载软件WinSCP下载软件putty,32位操作系统请下载putty32,64位系统请下载putty64 一、刷入固件

先刷入不死鸟控制台,再通过不死鸟控制台刷入固件,避免因操作失误造成路由器变砖

获取路由器root权限

以极路由1S HC5661A为例,在您购买满14天后,请先登录极路由器后台,然后依次开通、安装开发者插件

开通开发者模式:“云插件”>“路由器信息”>“高级设置”>“开通” 安装开发者插件:“云插件”>“全部插件”>“开发者模式”>”确定”

其他路由器可查看其他教程获取root权限。

刷入不死Breed 下载Breed

Breed是一个路由器的Bootloader(Bootloader 意为引导加载器,即为用于加载操作系统的程序。它是一大类此类功能程序的统称。现在的 BIOS、UEFI、GRUB、RedBoot、U-Boot、CFE等都是 Bootloader),装它的目的是为了下一步刷入固件(ROM)。以极路由1S HC5661A为例,不同型号下载不同的Breed,请务必对号入座,下载breed-mt7628-hiwifi-hc5661a.bin

上传到指定目录

使用WinSCP登入你的路由器后台,其中:

主机名:你的后台管理地址(比如192.168.1或者192.168.1.199)

账号:root

密码 :你的后台管理密码

端口:1022或者22(自行测试)

模式:SCP

img

登陆成功后进入/tmp目录,将刚才下载的breed-mt7628-hiwifi-hc5661a.bin上传到这个目录

刷入Breed

使用putty64登入你的路由器后台,主机名、账号、密码、端口均与上述相同,登入成功后键入以下命令

mtd -r write /tmp/breed-mt7628-hiwifi-hc5661a.bin u-boot

img

显示rebooting后等待路由重启完成,不死uboot就完成了刷入了。(注意,为了确定百分百刷入成功,建议此时什么都不要动,等待5分钟后再进行其他操作)

请严格按照先后顺序操作 用网线让路由器的LAN口与电脑的网口相连接;PC设置为自动获取IP(一般默认自动获取IP);路由器断电(就是拔插头);首先按住reset不放!,确保没有松开reset键后,然后,插入路由器电源;保持按住reset 3-4秒左右,路由器灯开始一闪一闪的时候,松开reset;PC网卡获取到192.168.1.x的地址 (如未获取到手工设置),一般是192.168.1.1 ;浏览器访问 192.168.1.1,接着你就会看到一个uboot控制台的界面。

为了保险起见,首先进行固件备份,以备不时之需。严重强烈建议极路由用户刷Breed后,第一次进入后台就备份一次,这样以后想要重新刷回官方系统时原有功能不会受到影响,仍然能够访问云平台。

img

现在正是开始刷入OpenWrt固件,依次点击固件更新→勾选固件→点击选择文件,选择我们刚刚下载的openwrt-18.06.2-ramips-mt76x8-hc5661a-squashfs-sysupgrade.bin,然后耐心等待固件刷入完成。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4a9SJQNp-1638352440059)(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20211201175342.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kWceV26l-1638352440060)(https://raw.githubusercontent.com/Editblog/PicGo/main/img/20211201175350.png)]

安装完成后会自动重启,这时可以不断刷新浏览器,直到管理界面显示出来,如果没有显示,建议稍后使用192.168.1.1访问管理页面。

账号:root

密码:默认为admin

image-20211201171151030

二、确定所使用客户端版本

打开学校的客户端,右上角可以看见ver5.2.0(D)

image-20211201154034227

三、网络抓包

1、 先断开网络,注销并关闭drcom客户端。

2、 打开wireshark,选中你联网用的那个连接。双击开始抓包!如图所示:

image-20211201154436371

软件会进入如下界面

image-20211201154528565

现在打开drcom客户端,拨号连接并在线保持1分钟左右,然后注销,完全关闭drcom后,选择wireshark的停止抓包

image-20211201154656045

选择File-save 选择保存路径,并重命名该文件为dr.pcapng (拓展名为.pcang)

image-20211201154747958

完成抓包

四、解析数据

1.此处提供 drcom_p_config.py 与 latest-wired.py的代码

drcom_p_config.py # -*- coding: utf-8 -*- from binascii import hexlify import re def hexed(s): ret = '' for i in s: ret += '\\x' + hex(ord(i))[2:].rjust(2, '0') return ret filename = 'dr.pcapng' f = open(filename, 'rb') text = f.read() offset = re.search('\xF0\x00\xF0\x00[\x00-\xFF]{4}[\x03\x07]\x01', text).start() + 8 #print hexlify(text[offset:offset+330]) #print hexlify(text[offset:offset+338]) # print text[offset+334:offset+338].encode('hex') if re.match('\x00\x00[\x00-\xFF]{2}', text[offset+334:offset+338]): ror_version = True else : ror_version = False # print ror_version username_len = ord(text[offset+3]) - 20 username = text[offset+20:offset+20+username_len] print 'server = \'%s\'' % '.'.join([str(ord(i)) for i in text[offset-12:offset-8]]) print 'username=\'%s\'' % username print 'password=\'\'' print 'CONTROLCHECKSTATUS = \'%s\'' % hexed(text[offset+56]) print 'ADAPTERNUM = \'%s\'' % hexed(text[offset+57]) print 'host_ip = \'%s\'' % '.'.join(map(lambda x: str(ord(x)), text[offset+81:offset+85])) print 'IPDOG = \'%s\'' % hexed(text[offset+105]) print 'host_name = \'%s\'' % 'GILIGILIEYE' print 'PRIMARY_DNS = \'%s\'' % '.'.join(map(lambda x: str(ord(x)), text[offset+142:offset+146])) print 'dhcp_server = \'%s\'' % '.'.join(map(lambda x: str(ord(x)), text[offset+146:offset+150])) print 'AUTH_VERSION = \'%s\'' % hexed(text[offset+310:offset+312]) if ror_version: print 'mac = 0x%s' % hexlify(text[offset+328:offset+334]) else: print 'mac = 0x%s' % hexlify(text[offset+320:offset+326]) print 'host_os = \'%s\'' % 'NOTE7' KEEP_ALIVE_VERSION = [i for i in re.findall('\xf0\x00\xf0\x00....\x07.\x5c\x28\x00\x0b\x01(..)', text) if i != '\x0f\x27'][0] print 'KEEP_ALIVE_VERSION = \'%s\'' % hexed(KEEP_ALIVE_VERSION) print 'ror_version = %s ' % ror_version latest-wired.py #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import struct import time import hashlib import sys import os import random import traceback # CONFIG ''' server = "192.168.100.150" username = "" password = "" host_name = "LIYUANYUAN" host_os = "8089D" host_ip = "10.30.22.17" PRIMARY_DNS = "114.114.114.114" dhcp_server = "0.0.0.0" mac = 0xb888e3051680 CONTROLCHECKSTATUS = '\x20' ADAPTERNUM = '\x01' KEEP_ALIVE_VERSION = '\xdc\x02' ''' server = '10.1.1.254' username='账号' password='密码' CONTROLCHECKSTATUS = '\x20' ADAPTERNUM = '\x07' host_ip = '172.17.19.107' IPDOG = '\x01' host_name = 'GILIGILIEYE' PRIMARY_DNS = '218.196.40.9' dhcp_server = '172.17.19.252' AUTH_VERSION = '\x27\x00' mac = 0x2cf05db2b380 host_os = 'NOTE7' KEEP_ALIVE_VERSION = '\xdc\x02' ror_version = True ''' AUTH_VERSION: unsigned char ClientVerInfoAndInternetMode; unsigned char DogVersion; ''' AUTH_VERSION = '\x0a\x00' IPDOG = '\x01' ror_version = False # CONFIG_END keep_alive1_mod = False #If you have trouble at KEEPALIVE1, turn this value to True nic_name = '' #Indicate your nic, e.g. 'eth0.2'.nic_name bind_ip = '0.0.0.0' class ChallengeException (Exception): def __init__(self): pass class LoginException (Exception): def __init__(self): pass def bind_nic(): try: import fcntl def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( s.fileno(), 0x8915, # SIOCGIFADDR struct.pack('256s', ifname[:15]) )[20:24]) return get_ip_address(nic_name) except ImportError as e: print('Indicate nic feature need to be run under Unix based system.') return '0.0.0.0' except IOError as e: print(nic_name + 'is unacceptable !') return '0.0.0.0' finally: return '0.0.0.0' if nic_name != '': bind_ip = bind_nic() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((bind_ip, 61440)) s.settimeout(3) SALT = '' IS_TEST = True # specified fields based on version CONF = "/etc/drcom.conf" UNLIMITED_RETRY = True EXCEPTION = False DEBUG = False #log saves to file LOG_PATH = '/var/log/drcom_client.log' if IS_TEST: DEBUG = True LOG_PATH = 'drcom_client.log' def log(*args, **kwargs): s = ' '.join(args) print s if DEBUG: with open(LOG_PATH,'a') as f: f.write(s + '\n') def challenge(svr,ran): while True: t = struct.pack("


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有