斐讯K2P通过配置文件开启telnet的原理分析
看过几篇教程之后我已经知道怎么备份固件了。但是现在有一个问题,我的本意是把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 ...
随机推荐
- 大话CNN
这几年深度学习快速发展,在图像识别.语音识别.物体识别等各种场景上取得了巨大的成功,例如AlphaGo击败世界围棋冠军,iPhone X内置了人脸识别解锁功能等等,很多AI产品在世界上引起了很大的轰动 ...
- 66. Plus One 数组加1
[抄题]: Given a non-negative integer represented as a non-empty array of digits, plus one to the integ ...
- tomcat安装后,双击start.bat闪退的问题
1.jdk环境变量没有配 解决方案:我的电脑-属性-高级-环境变量,新增下面三个环境变量: ①JAVA_HOME=C:\Program Files\Java\jdk1.7.0_09(就是你jdk安装的 ...
- tomcat启动报错:java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException:
tomcat日志: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start com ...
- git post-receive 待验证的代码
使用 git post-receive 钩子部署服务端代码 本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: ...
- 更改oracle数据库字符集
A.oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符集 NLS_LAN ...
- .NET基础 (02).NET运行机制
.NET运行机制1 .NET程序被编译成什么形式的代码2 JIT是如何工作的3 简述程序集的加载机制4 如何配置程序集的版本策略 1 .NET程序被编译成什么形式的代码 .NET程序在编写完成后,会经 ...
- CodeForces 519E A and B and Lecture Rooms(倍增)
A and B are preparing themselves for programming contests. The University where A and B study is a s ...
- MongoDB整理笔记のjava MongoDB分页优化
最近项目在做网站用户数据新访客统计,数据存储在MongoDB中,统计的数据其实也并不是很大,1000W上下,但是公司只配给我4G内存的电脑,让我程序跑起来气喘吁吁...很是疲惫不堪. 最常见的问题莫过 ...
- delphi添加.ocx后缀的控件
在delphi ocx控件的安装步骤:1.第一步: 使用过Activex的人都知道,Activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的Activex控件注册,但如果拿到 ...