吐槽几句

做技术的有无私造福人类的,也有耍流氓坑人的。说的不是DiyBox,而是“信利”。信利就是一家犯贱、祸害大学生、助纣为虐的流氓公司,其所谓的“防私接”技术让电信和移动牢牢的垄断着学校的宽带资源,还让学生花费了大量的冤枉钱。

当然,有狗熊的时代就会有英雄的存在。有miao1007 开源的Openwrt pppd plugin和 sunflyer 的simple netkeeper ,以及stawidy的抓号脚本 等等其他各路英雄的无私贡献。
而我就是一个乘着英雄带来的东风丰衣足食的小白,身边很多朋友和同学苦于信利的流氓行为而选择了购买那些溢价比OV手机还要高的“校园路由器”,这其中 DiyBox就是一家。我最看不惯的是有技术的人无私的开源、没点能力的人借着流氓的犯贱和小白的懵懂去攫取暴利。17年的五月开始,我们学校的移动宽带进行了升级,老版本的pppd 插件直接不能用了,这让很多同学的路由器成为了废品。而我在帮别人升级时,发现了 DiyBox的存在。


我修改的DiyBox固件是老版本的固件,看文件的日期还是15年11月的。界面是漂亮的Material主题,添加了“校园网认证”(jiaju)入口。总体给我的感觉是这个固件做的很不错:“校园网认证”将“时间”和“拨号”两界面合二为一,使用方便; 还添加了“硬件+授权码”的激活方式,很适合商用; 剔除“dropbear”和“telnetd”,有效防止了用户的乱操作。不足是使用了breeed,如果有自己的bootloader相必会更难破解。


解包与打包

初拿到这款路由器(DiyBox)我是很无奈的,虽然可以使用Breed直接刷机,可是这样子感觉浪费了DiyBox的一些“好设计”。我采取的方式是使用breed获取到整个路由器的编程器固件后,再使用 dd 将编程器固件的各分区分开,使用对应的工具解包获取原文件来研究和修改。

  1. 获取编程器固件
  2. 使用binwalk 获取固件的分区格式和偏移量 ,命令大致如下所示,
    binwalk full.bin
    看懂binwalk 的输出很有用,binwalk的输出每一行的前两列分别是十进制和十六进制的“偏移量”,LZMA compressed data 一般是内核,Squashfs filesystem 是rootfs,该分区只读JFFS2 filesystem 是保留路由器的用户配置的分区,清空该分区即意味着“恢复出厂设置”……(还有一些别的,我也不好举例了)
  3. 使用dd将各部分分开
    dd if=full.bin of=xx.bin bs=1 skip=xxx count=xxx
    #if是原固件,of是输出文件,bs是单位长度,skip是偏移量,count是分区大小

    1. 使用 unsquashfs 解包rootfs
      unsquashfs rootfs.bin
    2. 到目录 squashfs-root 下查看与分析固件

当然,使用 binwalk -e 能直接解包固件,使用 firmware-mod-kit(传闻中的fmk) 也可以直接解包,当然后者集成了大量的自动化工具,很是方便。
另注: fmk在解包固件时建议使用 dd 将编程器固件分解成 “sysgraude 包” ,即只保留内核和rootfs的包,尤其是报 Unsupported file system 'jffs2'! Quitting... 错误时。

打包过程是上述的逆向:
1. 使用 mksquashfs 打包rootfs
mksquashfs squashfs-root rootfs.squashfs -comp xz #squashfs-root指定目录,rootfs.squashfs指定输出文件,-comp xz 说明压缩方式为 xz ,视binwalk的输出而定。
2. 使用 lzma 压缩内核
lzma -k ./head #内核部分一般不解压,lzma压缩时目录名视情况而定
3. 使用 cat 拼接各部分
cat head.lzma rootfs.squashfs > sysgradue.bin

小注: 使用fmk解压后在 image_parts 目录下的header.img即是原固件的内核,rootfs.img既为原固件中的rootfs,可以直接使用。


以上是解包和打包固件的步骤,下面是改造DiyBox。

修改DiyBox的认证

DiyBox在“未授权”情况下弹出的“认证页面”不是标准的openwrt认证页而是“DiyBox授权页”。但是它们的框架是一致的,所以定位到luci框架的认证页面模板: /usr/lib/lua/luci/view/sysauth.htm ,打开这个文件可以找到以下代码:

local uid_key = tonumber(uci:get("jiajuset", "zgwl", "uidkey"))………………<% if uid_key == 0 then %><form method="post" name="cert" onsubmit="writecode()""><div class="cbi-map"><h2 name="content"><%:Authorization Required%></h2><div class="cbi-map-descr"><p class="error"><%:路由器的授权信息无效或需要升级,请输入新的授权信息。%></p>
………………

打开 /etc/config/jiajuset 可以看到 zgwl 接口下的 uidkey 的值(因为此时是解包的rootfs,所以这个值是全新刷机后的“缺省值”) 是‘0’。所以可以断定,当这个uidkey是 0 时便视为“设备未授权”,直接将 sysauth.htm 中的 uid_key == 0 改为 uid_key == 100,解决。

DiyBox的授权认证过程

  从入口开始分析,在访问路由器的web页面时,首先加载 sysauth.htm 中的lua代码,获取“uid”和“jiajuset.zgwl.uidkey”的值。其中 uid 的获取是通过以下代码:
local uid = luci.sys.exec("echo `dmesg | grep 'flash id' | awk -F 'flash id: ' '{print $2}'`")
  在输入了“授权信息”、按下提交按钮后,表单提交到 sysauth.htm ,它会获取输入的“授权信息”并将配置“jiajuset.zgwl.luidcode”设置为输入的“授权信息”,之后调用JS函数 writecode() , 此函数会打开固件中 /www/cgi-bin/uuid 文件,这个文件是一个shell脚本。
  打开uuid脚本,可以看到此脚本除了向浏览器发送一堆的交互信息外,会调用到 /usr/share/uuid/uuidcheck 文件,并将 /usr/share/uuid/下的1 2 3 着三个文件作为参数传给 uuidcheck 这个程序。最后调用 uuidcheck 检查授权结果。
  可见这个uuidcheck是一个校验的关键,以后找个时间再反编译以下它研究研究吧。


另外,这个固件的“系统日志”功能有所修改,还没研究透,待补充。
  

记一次修改DiyBox的经历(openwrt固件解包与打包)相关推荐

  1. CentOS7安装光盘修改过程中initrd.img的解包及打包排雷

    碰到一个需求需要修改centos7的安装光盘,在安装时增加一个指令的支持(ks的per段中需要划raid) 这种修改肯定是改initrd.img了.直接挂载光盘找到initrd.img,看文件类型. ...

  2. 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )

    文章目录 一.APK 解析工具 二.解包 -> 分析 -> 重打包 -> 签名 流程 一.APK 解析工具 使用 [Android 逆向]使用 Python 编写 APK 批处理分析 ...

  3. 记一次微信小程序源码反解包

    1 安装Nodejs 一 下载安装包:https://nodejs.org/en/download/ 安装完成后在安装目录下新建两个文件夹: node-cache node-global (这是用来放 ...

  4. 如何查看apk安装包源代码??Android反编译apk,解包,打包,签名一体化实测 ,修改图片音频软件名称版本号等入门

    首先下载反编译工具包 下载地址 链接:  https://zly520.lanzoui.com/ibtuxhf7rab 一.反编译工具介绍 首先 如果你想改动图片音频之类的,见末尾! 1.apktoo ...

  5. 【221214已更新】S905L(P211)盒子读取OpenWRT固件以及写入emmc教程

    2022.12.14更新: 1.升级至78+o: 2.采用flippy编译的固件(更稳定): 这一版本写入emmc的方法较以前不同,请参阅 78+o写入教程.txt 请在这里下载(download)最 ...

  6. APK文件的解包打包和修改

    相信每位玩机的人对APK文件都不陌生.你可能每天都与APK文件打交道,无论是安装和卸载有用的应用工具.插件.好玩的游戏等等...你可曾知道这些每天都伴随着你的APK文件是什么吗?怎样对它们作些修改呢? ...

  7. [ROM制作教程] 【自制ROM工具大集合】各种修改制作ROM工具软件详解以及运用全集合

    工具整理打包,放出来方便大家学习使用,使用方法有什么不清楚的回帖问,具体教程请百度一下,这里一下也说不清楚. 1.SIN2IMG  用于固件ftf中system.sin的解包 下载地址: 使用方法:将 ...

  8. linux ext4 img解包打包教程,安卓解包、修改、打包system.img/system.img.ext4教程

    自从得知ROM助手可以解包IMG的文件后,再也不用安装LINUX系统来解包和打包system.img文件,这对于新手  机友朋友无疑是一个劲爆的消息,很多朋友都对安装和操作LINUX系统的繁琐望而却步 ...

  9. APK应用程序的解包、修改、编辑、打包及应用(三)

    第一部分:apk应用介绍,解包和打包,常用软件 http://blog.csdn.net/kuangren_01/article/details/9318977 第二部分:三星闭源系统apk文件的处理 ...

最新文章

  1. COSO企业风险管理框架2017版发布!看看有哪些变化?
  2. NLP:以周杰伦的《Mojito》歌词为例字符串切分之清除一段由列表组成的字符串文本中的所有杂乱符号
  3. 计算机丢失quartz.dll什么意思,win7系统中出现缺少quartz.dll文件的修复方法
  4. 5种IO模式形象的比喻
  5. php项目部署lnmp,如何在lnmp环境里,部署多个php项目?
  6. html 用svg缩放拉伸,html – 拉伸SVG以适应其父级的100%高度和宽度
  7. c语言 函数指针开销,函数指针是否使程序变慢?
  8. 互联网晚报 | 8月30日 星期一 | 微信公众号新增“我的商店”功能;vivo明年上半年推出平板;商汤科技在港递交IPO招股书...
  9. 疯狂.NET 通用权限设计 C\S后台管理,B\S前台调用源码样例程序源码下载之 --- 操作权限...
  10. Selenium RC for Java 环境配置
  11. 类/对象/构造函数/析构函数
  12. 红色学校网站模板_学校网站源码_适用高中,中学,小学学校网站建设
  13. 数据分析 --- 如何处理脏数据
  14. 3西格玛计算公式_六西格玛相关参数及计算公式
  15. iPhone信号太差?学会这三招,信号差也能瞬间满格!
  16. Python 樱花树
  17. 【JDBC】JPA和JDBC的区别
  18. NAT穿越(NAT-T)原理
  19. 什么是HTAP 阿里云上实现
  20. 如何在桌面或者开始菜单中创建快捷方式

热门文章

  1. Code Project精彩系列
  2. lg g5 android,【LGG5SE评测】Android中的SE 模块化LG G5 SE评测(全文)_LG G5 SE_手机评测-中关村在线...
  3. . net core在图片上写字
  4. chrome与chromedriver版本对应关系以及官方下载页面
  5. 【征集】面试第四问,你对出差的看法 总结
  6. 2-Druid 系统框架
  7. stc单片机如何用C程序将IO口设为强推挽输出
  8. 为知笔记Markdown笔记里的插入代码怎么实现/为知笔记怎怎么插入代码段
  9. C++ snippets
  10. linux sqlplus 查询数据,Linux安装sqlplus及shell查询数据库