【免费下载链接】OmniDrive项目地址https://gitcode.com/gh_mirrors/omn/OmniDrive点击查看免费下载OmniDrive 是一款针对 MediaTek MT1959 光驱芯片的固件修改modding项目让 Hitachi-LG 系光驱LG BU40N、ASUS BW-16D1HT能够读取各类专有游戏光盘。它最硬核的部分是逆向破解了 MT1959 固件的AES-CMAC 完整性签名验证通过重算被修改区域的 CMAC 摘要让芯片心甘情愿地烧录修改后的固件。本文带你完整看懂这套安全机制及其绕过手法。一、先搞懂背景光驱固件为什么防修改普通光驱固件里藏着大量厂商私有逻辑原厂用它来限制读取行为——这正是 OmniDrive 要打通的对象自定义READ DISC RAW命令、Raw 扇区读取、Xbox/Wii 等专有光盘支持见 README.md 的功能表。而 MT1959 芯片为防止用户烧录非法固件在启动阶段会执行一套安全流程安全机制作用AES-CMAC 完整性校验固件按区段计算 CMAC 摘要启动时比对不符则拒绝防降级保护Downgrade Protection阻止从新版固件回刷旧版防止绕过已修复的锁命令表锁定厂商自定义指令无法被普通用户扩展想修改固件就必须先让完整性校验通过。OmniDrive 的思路不是粗暴禁用校验而是直接给新固件重签一份合法签名。二、逆向成果MT1959 的 AES-CMAC 签名是怎么算的整个逆向过程的核心成果浓缩在 scripts/update_cmac.py 这个脚本里。1. 签名表的位置与结构固件文件偏移0x10400处有一张签名表共 16 条记录每条 28 字节结构为enabled, start, end, original_cmacMT1959_CMAC_KEY bytes.fromhex(BD209408E35E526A36235234434FE8AB) cmac_range_fmt 3L16s即一个 16 字节的AES-CMAC 密钥update_cmac.py#L7 每个区段的起止偏移 预存的 CMAC 摘要。2. 两个反直觉的细节逆向时最费功夫的是两处字节序处理见 update_cmac.py#L15-L31参与计算的固件数据会先按 16 字节块整体逆序再送入 CMAC计算出的摘要也要逆序后写回签名表。for i in range(0, len(cmac_range), 16): cmac_block cmac_range[i:i16] cmac_range[i:i16] cmac_block[::-1] # 16字节块内逆序 cmac CMAC.new(MT1959_CMAC_KEY, cmac_range, ciphermodAES)3. 绕过手法重算 写回补丁打完之后脚本遍历签名表对每个启用的区段重新计算 CMAC写回原位置update_cmac.py#L34-L45。芯片启动时比对的摘要与固件内容完全一致完整性校验自然通过——这就是绕过的本质不是欺骗校验而是让校验对象重新获得合法签名。三、第二道锁防降级保护是怎么被绕开的绕过签名只是第一步MT1959 还有防降级机制阻止刷入低版本固件。asm/main.asm 中可以看到对应的补丁手法main.asm#L39-L43在0x105C8处写入一段 magic 值用于从更高版本固件降级时放行在0x1EC056处将标志置为0xDEDowngrade Enable。两处小补丁就解开了第二道锁。四、动手实践构建你的 OmniDrive 修改固件依赖清单CMake、ninja、arm-none-eabi-gcc 工具链、armips 汇编器、Python 3 pycryptodome。工具链配置见 arm-toolchain.cmake。git clone https://gitcode.com/gh_mirrors/omn/OmniDrive cd OmniDrive将原版固件HL-DT-ST_BD-RE_BU40N_1.00.bin与ASUS_BW-16D1HT_3.02.bin校验值见 README.md放入firmware/目录新建build目录执行cmake -G Ninja ..执行ninja产物输出到patched_firmware/文件夹。构建流程在 CMakeLists.txt#L20-L27 中定义得很清晰先用 armips 打补丁再自动调用update_cmac.py重算签名两步缺一不可。补丁本身由汇编脚本完成各机型地址表分别位于 asm/HL-DT-ST_BD-RE_BU40N_1.00.asm 与 asm/ASUS_BW-16D1HT_3.02.asm通用补丁逻辑集中在 asm/main.asm在固件空闲空间挂接自定义命令表注册READ DISC RAW0xC0指令main.asm#L5-L15将设备 Inquiry 标识改写为OmniDrive方便识别是否刷写成功多处函数 Hook如ChangeDiscRWModeHook控制解扰开关由 src/main.c 中的 C 代码实现编译后以静态库注入固件空闲区。烧录推荐sdftoolMakeMKV 自带BU40N 固件适用于 slim 系列BW-16D1HT 固件适用于桌面系列。五、写在最后从 OmniDrive 学到的安全课启示说明签名验证≠不可破解密钥若存于芯片固件本身逆向后即可合法重签完整性校验要配合安全启动只验签不防重签保护强度有限防降级需要原子化版本号与签名分离时单点打补丁即可绕过OmniDrive 用不到千行代码完成了从逆向签名算法、到绕过防降级、再到注入自定义 SCSI 指令的完整固件修改闭环是研究嵌入式安全机制的一个优秀样本。⚠️ 提示刷写固件可能导致设备变砖请确认设备型号与固件匹配后再操作并自行承担风险。赞分享【免费下载链接】OmniDrive项目地址https://gitcode.com/gh_mirrors/omn/OmniDrive点击查看免费下载相关推荐SecureUxTheme 深度技术揭秘内存中 UxTheme 签名验证绕过机制SecureUxTheme 深度技术揭秘内存中 UxTheme 签名验证绕过机制 想要为Windows系统自由更换个性化主题吗SecureUxTheme 是桌面应用HoundElixir浏览器自动化与集成测试的终极解决方案HoundElixir浏览器自动化与集成测试的终极解决方案 Hound是一款专为Elixir开发者打造的浏览器自动化与集成测试库它提供了简洁而强大的API探秘TDL安全绕过Windows x64驱动签名验证的利器探秘TDL安全绕过Windows x64驱动签名验证的利器 1、项目介绍 TDLTurla Driver Loader是一个专为x64架构的Windows网络安全应用安全驱动开发系统编程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考