RouterOS 修补dhcpclient解决中兴 duid 6660问题
本帖最后由 Flyingcats 于 2025-1-21 21:41 编辑上一个帖子的方法存在明显缺陷,电信slaac分配的前缀是给pppoe使用的,用于子网的分配可能存在地址冲突问题
所以只能通过dhcp来获取前缀
在咸鱼上,有人发给修改版ros,但没说明方法MIKROTIK+ROS+RB750Gr3hEX路由器同款硬_闲鱼
猜测是使用了 https://github.com/elseif/MikroTikPatch 这个修改版的ROS否则npk签名过不了
所以此贴基于 MikroTikPatch@7.17 这个修改版的ros系统,官方系统没签名文件是改不了的
一,修补dhcpclient执行文件
1. 首先下载 all_packages-x86-7.17.zip文件
2. 解压出 routeros-7.17.npk 文件
3. 使用7zip可以直接打开routeros-7.17.npk,提取 \bndl\dhcp\nova\bin\dhcpclient 文件
4. 拖入 ida 32bit ,因为我使用的是x86架构的ROS所以直接默认配置打开就行
5. 使用ida的字符串搜索找到 bad server DUID 字符串位置,并跳转到调用函数位置
6. 将判断逻辑直接跳到正确的地址
注:尝试过NOP填充,但不知道为什么程序会出现问题
7.导出修补的程序
到此得到了一个忽略DUID错误的执行文件
二、封包到npk
由于可以预料到的原因MikroTikPatch并未公开私钥,所以必须自己自定义的密钥对生成新的ROS镜像(太复杂,有时间在弄)
暂时使用了另一种取巧的方案,用mount --bind 覆盖原始执行文件
1.拷贝程序源目录/system/shell cmd="cp -r /bndl/dhcp /flash/rw/disk/dhcp"2. 使用winbox64 文件管理将修补后的文件上传到 dhcp/nova/bin/dhcpclient ,需要先删除源文件否则会报错
3.修改文件权限
/system/shell cmd="chmod 755 /flash/rw/disk/dhcp/nova/bin/dhcpclient"
4.挂载用户目录到dhcp程序目录
/system/shell cmd="mount --bind /flash/rw/disk/dhcp /bndl/dhcp"
5.杀死 dhcpclient,系统会重新启动程序
/system/shell cmd="ps | grep dhcpclient| awk '{print $1}'| xargs kill"不知道咋弄成开机启动,所以每次启动都得运行最后的两条命令
三、成果
附:修改后的x86平台文件
不用这么麻烦了,mikrotik放出了7.18贝塔版本,已经添加了是否验证服务器duid的选项,把选择权交给用户
再等几个月,这个问题应该就不是问题了
weiyakeji 发表于 2025-1-21 23:25
不用这么麻烦了,mikrotik放出了7.18贝塔版本,已经添加了是否验证服务器duid的选项,把选择权交给用户
挺好,看了7.17的更新日志没看1.18beta的,白折腾了:L 马克 Flyingcats 发表于 2025-1-22 09:28
挺好,看了7.17的更新日志没看1.18beta的,白折腾了
确定是可以收到下发的前缀了,去掉验证服务器DUID即可
之前被6660搞的弃用ros,这下要改回来了
页:
[1]