看过几篇教程之后我已经知道怎么备份固件了。但是现在有一个问题,我的本意是把K2P原机带的固件备份出来,用教程上的方法进行开启telnet、备份固件等操作是否会改变固件呢?下面我们来验证这个问题。
OpenWrt的文件系统
K2P使用的是OpenWrt系统,我们先来看一下K2P的Flash Layout(图片来自恩山)
图片上的 firmware 就是我要的固件,它分成 Kernel 和 rootfs 两部分。其中 rootfs 使用SquashFS和JFFS2实现了一个可读写的文件系统,但实际上SquashFS是只读的压缩包,所有的文件修改都是记录在JFFS2,也就是rootfs_data上的。
感兴趣的话可以看看:
https://wiki.openwrt.org/doc/techref/filesystems
https://blog.csdn.net/lee244868149/article/details/57076615
路由器重置的原理
我们知道所有的文件修改都是记录在 rootfs_data 上的,系统重置实际上就是将这部分数据抹掉,我们来验证一下。
我之前下了一个网友备份的固件,地址。
打开 "/usr/lib/lua/luci/controller/admin/backuprestore.lua" 文件,查看第136~141行。
elseif reset_avail and luci.http.formvalue("reset") then
luci.template.render("backuprestore", {
reset_process =
})
fork_exec("sleep 3; killall dropbear lighttpd miniupnpd; sleep 3; mtd -r erase rootfs_data")
else
mtd -r erase rootfs_data 这一句就是抹掉 rootfs_data 的数据。
通过配置文件开启telnet的原理
我们来看一下恢复配置文件是怎么实现的。
还是 "/usr/lib/lua/luci/controller/admin/backuprestore.lua" 这个文件,查看第81~136行。
elseif luci.http.formvalue("restore") then
local fs = require("luci.fs")
luci.http.formvalue("filename")
--校验配置文件
luci.util.exec("encryconfig decrypt /tmp/backupFile_encode /tmp/backupFile")
nixio.fs.unlink("/tmp/backupFile_encode")
local fd = io.open("/tmp/backupFile", r)
local restore_error_message
if fd ~= nil then
local line = fd:read()
fd:close()
if line ~= nil then
if not checkfwversion() then
nixio.fs.unlink("/tmp/backupFile")
restore_error_fwversion = {"restore_error"}
luci.template.render("backuprestore", {
restore_error_fwversion = restore_error_fwversion
})
else
luci.util.exec("sed 1,10d /tmp/backupFile >/tmp/restore_rm_header")
luci.util.exec("tar -xzC/ -f /tmp/restore_rm_header")
nixio.fs.unlink("/tmp/restore_rm_header")
local cur_lan_mac = luci.util.exec("uci get network.lan.macaddr")
local cur_wan_mac = luci.util.exec("uci get network.wan.macaddr")
local flash_lan_mac = luci.util.exec("eth_mac r lan")
local flash_wan_mac = luci.util.exec("eth_mac r wan")
if cur_lan_mac ~= flash_lan_mac then
luci.util.exec("uci set network.lan.macaddr=%s" % flash_lan_mac)
end
if cur_wan_mac ~= flash_wan_mac then
luci.util.exec("uci set network.wan.macaddr=%s" % flash_wan_mac)
end
luci.util.exec("uci commit")
local upload = luci.http.formvalue("restore")
if upload and #upload > then
luci.template.render("backuprestore", {
restore_avail =
})
fork_exec("sleep 3; reboot")
end
end
else
restore_error_message = {"restore_error"}
nixio.fs.unlink("/tmp/backupFile")
luci.template.render("backuprestore", {
restore_error_message = restore_error_message
})
end
else
nixio.fs.unlink("/tmp/backupFile")
restore_error_message = {"restore_error"}
luci.template.render("backuprestore", {
restore_error_message = restore_error_message
})
end
elseif reset_avail and luci.http.formvalue("reset") then
第101行,tar -xzC/ -f /tmp/restore_rm_header,这条命令把配置文件解压缩到根目录下覆盖现在用的文件。
利用这个特性我们可以向系统写入我们想要的数据,比如自启动脚本。
/etc/rc.local
在 "/etc/rc.local" 脚本中加入命令开启telnet服务是一个不错的选择。
修改后的文件如下:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing. case `cat /proc/cpuinfo | grep MT76` in
**)
CONFIG_RALINK_MT7621=y
;;
**)
CONFIG_ARCH_MT7623=y
;;
esac
if [ "$CONFIG_RALINK_MT7621" = "y" ]; then
echo > /proc/sys/vm/min_free_kbytes
#echo > /proc/sys/vm/overcommit_memory
#echo > /proc/sys/vm/overcommit_ratio
fi
block mount # add nat rule manually smp.sh wifi
hwnat-enable.sh
brctl addif br-lan ra0
brctl addif br-lan rax0
/usr/sbin/telnetd -l /bin/login.sh
exit
第25行 /usr/sbin/telnetd -l /bin/login.sh 就是开启服务的命令。注意,在这个命令中要写完整路径名。
打包配置文件
生成配置文件的代码在 "/sbin/sysupgrade" 脚本里,第131~174行。
do_save_conffiles() {
local conf_tar="${1:-$CONF_TAR}" if [ -z "$CONF_BACKUP" ]; then
platform_config_prepare
fi [ -z "$(rootfs_type)" ] && {
echo "Cannot save config while running from ramdisk."
ask_bool "Abort" && exit
return
}
run_hooks "$CONFFILES" $sysupgrade_init_conffiles
ask_bool "Edit config file list" && vi "$CONFFILES" # v "Saving config files..."
[ "$VERBOSE" -gt ] && TAR_V="v" || TAR_V=""
tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" if [ -n "$CONF_BACKUP" ]; then
#fix project name must be first line
#phic_fac -g product > /tmp/backup_add_header
#fix project hardware info must be second line
#phic_fac -g hw_ver >> /tmp/backup_add_header
#fix project software version must be third line
#phic_fac -g fw_ver >> /tmp/backup_add_header
#we leave here blank lines,so we have total lines include above lines at the top of /tmp/backup_2
echo "product=`uci get system.system.hostname`" >> /tmp/backupFile
echo "hw_ver=`uci get system.system.hw_ver`" >> /tmp/backupFile
echo "fw_ver=`uci get system.system.fw_ver`" >> /tmp/backupFile
for i in
do
echo "" >> /tmp/backupFile
done
cat $conf_tar >> /tmp/backupFile
encryconfig encrypt /tmp/backupFile /tmp/backupFile_encode
#cat /tmp/backup_add_header_encry >/dev/null #rm -f "/tmp/backup_add_header"
#rm -f "/tmp/backup_add_header_encry"
rm -f "$conf_tar"
fi
rm -f "$CONFFILES"
}
配置文件由文件头和一个tar包组成。文件头是10行文本,这个可以在备份出的文件中截取。在tar包里放我们想写入的文件,与文件头合并成在一起。最后用openssl加密就可以了。
斐讯K2P通过配置文件开启telnet的原理分析的更多相关文章
-
斐讯K2P配置文件破解笔记
手上有一个斐讯K2P路由器,刷机前我想把原机带的固件备份出来.搜到恩山A大开启telnet.固件备份的教程,里面提到了配置文件破解的方法,心血来潮试了一下,发现算出的密码不能解密,一直报"b ...
-
斐讯k2p 月光银 硬件版本A2-软件版本22.7.8.5 刷官改系统
Mark https://huabuyu.net/斐讯k2p%20月光银%20硬件版本A2-软件版本22.7.8.5%20刷官改系统.html 详细资源推荐:恩山论坛 https://www.righ ...
-
斐讯K2 V22.X.X.X 新版固件 刷机教程 (开telnet,安装SSH,adbyby,刷breed,华硕Padavan)
源:http://www.right.com.cn/forum/thread-191833-1-1.html 属于我的上一个帖子的升级版,基本属于无脑操作,点击恢复就可以自动刷好breed,浏览上传新 ...
-
[无线路由] “免费”斐讯K2路由器刷OpenWRT(实战MWAN多宽带网速叠加)
(阿财首发于什么值得买)斐讯K2可以算是一个非常另类的跨界数码产品,其产品完全的醉翁之意不在酒.最多值99元的 MT7260硬件架构和用料,售价399元,金额激活K码后自动转入合作理财P2P平台,等待 ...
-
斐讯K2刷不死breed与第三方固件教程
本文主要就是简单的斐讯 K2 刷机教程,方便大家了解一下 K2 怎样刷固件.斐讯 K2 是一款 1200M AC 双频无线路由器,支持 5G 和 2.4G WiFi 信号,虽然缺少 USB 且只有百兆 ...
-
斐讯 FIR151M 频繁掉线(OpenWRT解决方案)
0. 现象与前言 在使用斐讯 FIR151M 路由器连接网络时,传输数据时频繁掉线. 官方固件刷了两个版本,问题未解决. 建议高级用户看本教程,要做好不能使用 Web 管理界面的心理准备. 1. 准备 ...
-
斐讯N1折腾记
斐讯N1折腾记:运行 Linux 及优化 2018-06-23 37条评论 4,445次阅读 11人点赞 最后更新时间:2019年03月10日 咳咳咳,上篇教程教大家给斐讯 N1 降级并且刷了 ...
-
斐讯自动下单抢购V1.3.4【自动验证码识别】
20180530 更新 V1.3.41.增加有货下单:替代定时下单 20180519 更新 V1.3.31.增加订单满减优惠:支付宝每单立减5元2.修改商城域名及下单速度 功能介绍1.斐讯商城抢购专用 ...
-
给斐讯K1刷机并拨号e信(湖北地区测试无问题)
◆购买斐讯k1路由器 路由器在天猫京东斐讯旗舰店都有售卖,我买的价格是159,不过有一张铃铛卡,一个月之后返还160元,相当于0元购 ◆路由器刷不死Breed 1.路由与电脑有线连接好,输入192.1 ...
随机推荐
-
浅析 C++里面的宏
说到宏,恐怕大家都能说出点东西来:一种预处理,没有分号(真的吗?).然后呢?嗯.......茫然中......好吧,我们就从这开始说起.最常见的宏恐怕是#include 了,其次就是#define 还 ...
-
关于JQuery中的ajax请求或者post请求的回调方法中的操作执行或者变量修改没反映的问题
前段时间做一个项目,而项目中所有的请求都要用jquery 中的ajax请求或者post请求,但是开始处理一些简单操作还好,但是自己写了一些验证就出现问题了,比如表单提交的时候,要验证帐号的唯一性,所以 ...
-
mysql 服务器负载过高的解决分析之路
最近我们有台 mysql 服务器一直报负载过高,不停的收到阿里云的报警短信,让我很抓狂,登陆上服务器,看下一下,慢查询日志 发现有60多万的慢查询日志,一看这个就知道是搜索带来的,一直想把搜索的服务给 ...
-
性能测试中的最佳用户数、最大用户数、TPS、响应时间、吞吐量和吞吞吐率
一:最佳用户数.最大用户数 转:http://www.cnblogs.com/jackei/archive/2006/11/20/565527.html 二: 事务.TPS 1:事务:就是用户某一步 ...
-
_ZNote_Qt_Tips_添加动态链接库
之前添加都是 手写添加,今天陈老师提示可以在 .pro 文件内空白处,右键弹出添加
-
Ubuntu 16 修改时区!
网上大部分解决办法是命令tzselect,然后选择亚洲-->中国->上海,但很遗憾,一点效果没有:后找到解决办法,运行命令dpkg-reconfigure tzdata,选择Asia--& ...
-
匹配<;a href=";url";>;content<;/a>;
grep -Po '<a href="(.*.rmvb")>(.*)</a>' te.txt | sed -n 's/<a href=\(.*\)&g ...
-
Windows 7 64bit上安装Oracle Database 12c [INS-30131] 错误的解决方法
Windows 7 64bit上安装Oracle Database 12c,出现以下错误: 解决方法: 第一步:控制面板>所有控制面板项>管理工具>服务>SERVER 启动 ...
-
redis集群的远程管理与监控
一.redis集群的重要性 目前大部分的互联网平台,都会用到Redis内存数据库,以提高响应速度,提升用户使用体验. 为了实现Redis的高可用,通常都会布署Redis集群,使用Redis-Senti ...
-
openstack组件服务的入口寻找方法
在centos7系统上,安装openstack服务以后,可以通过以下命令,查找到该系统上,已经安装的openstack服务 [root@xzto01n010027244133 ~]# systemct ...