恩山无线论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10435|回复: 15

360安全路由固件加密算法研究

[复制链接]
发表于 2014-8-29 17:13 | 显示全部楼层 |阅读模式
本文只是一篇研究贴子。没什么可下载的。。。

360路由在网页上能刷的固件都是加密的,到目前为止,只有一个人发了个加密后的openwrt固件 https://www.right.com.cn/forum/thread-147329-1-1.html

那么,我们能不能自己做兼容官方加密的op固件呢?

要知道这个问题的答案,就需要跟踪360整个刷机过程。

废话不多说,开始研究,首先,找到360固件的一个解密版 http://pan.baidu.com/s/1i3kkEbz , 然后,把hsqs开头的文件部分分离出来,用unsquashfs解密,得到整个文件系统。
可以到看有个www目录是360的网页设置服务目录。通过"立即升级"字样前的js-upgrade-do依次找升级流程,找到upgrade_do什么的,
  1. <span class="btn" style="display:none"><a href="javascript:void(0);" class="js-upgrade-do">立即升级</a></span>
复制代码
  1.      <div class="text">
  2.                                                     <table><tbody><tr><td>
  3.                                                         <p>升级路由器需要3分钟,期间所有连接的设备将会断开WiFi,是否继续?</p>
  4.                                                     </td></tr></tbody></table>
  5.                                                 </div>
  6.                                                 <div class="ctrl">
  7.                                                     <label class="btn"><button class="upgrade-confirm">继续</button></label>
复制代码

  1.         upgrade_ecfm_do.click(function() {
  2.             upgrade_ecfm_panel.hide();
  3.             upgrade_start();
  4.         });
复制代码

  1.     function upgrade_do() {
  2.         ajax({
  3.             data: {
  4.                 'cmd': 'upgrade_do',
  5.                 'uri': upgrade_uri,
  6.                 'md5': upgrade_md5
  7.             },
复制代码
  1.     private function upgrade_do($params) {
  2.         return $this->req_monitord ( 'updaterom', Array (
  3.                 'uri' => $uri,
  4.                 'md5' => $md5
  5.         ) );
复制代码

可以看到是调用了monitord里的服务,找到 /sbin/monitord  ,反汇编研究发现里面调用了很多.sh文件,升级调用的是/bin/shell/router_upgrade.sh
打开这个文件发现:
  1. /sbin/rom_decrypt "/var/$filename" "/var/$savefile" >/dev/null 2>&1
复制代码
这就是解密rom的关键部分。

反汇编 rom_decrypt,发现一些情况:
  1. .text:0041853C                 la      $v0, aLbhyswdj31ngnu  # "lbhySwdj31NGnuebNn9FmQ=="
  2. ...
  3. .text:00418554                 jalr    $t9 ; base64_decode
  4. ...
  5. .text:00418580                 jalr    $t9 ; aes_set_key
复制代码
ROM主体部分用的是aes算法,每0x1000字节为一个段落,里面有控制信息和解密后的原始信息。
ROM前面的0x80字节是一个rsa加密的部分
  1. .text:00418634                 addiu   $v0, $fp, 0x3700+var_1698
  2. .text:00418638                 move    $a0, $v0         # ptr
  3. .text:0041863C                 li      $a1, 0x80        # size
  4. .text:00418640                 li      $a2, 1           # n
  5. .text:00418644                 lw      $a3, 0x3700+stream($fp)  # stream
  6. .text:00418648                 la      $t9, fread
  7. .text:0041864C                 nop
  8. .text:00418650                 jalr    $t9 ; fread
复制代码
  1. .text:00418B3C                 addiu   $v1, $fp, 0x3700+var_1108
  2. .text:00418B40                 addiu   $v0, $fp, 0x3700+var_1014
  3. .text:00418B44                 sw      $v0, 0x3700+var_36F0($sp)
  4. .text:00418B48                 addiu   $v0, $fp, 0x3700+var_1698
  5. .text:00418B4C                 sw      $v0, 0x3700+var_36EC($sp)
  6. .text:00418B50                 addiu   $v0, $fp, 0x3700+var_1038
  7. .text:00418B54                 sw      $v0, 0x3700+var_36E8($sp)
  8. .text:00418B58                 li      $v0, 0x400
  9. .text:00418B5C                 sw      $v0, 0x3700+var_36E4($sp)
  10. .text:00418B60                 move    $a0, $v1
  11. .text:00418B64                 move    $a1, $zero
  12. .text:00418B68                 move    $a2, $zero
  13. .text:00418B6C                 move    $a3, $zero
  14. .text:00418B70                 la      $t9, rsa_pkcs1_decrypt
  15. .text:00418B74                 nop
  16. .text:00418B78                 jalr    $t9 ; rsa_pkcs1_decrypt
复制代码
rsa公钥
e=010001
n=997FC1DDC52D41FE381EC3CEE1957587F6D216B1EA14941807D1A1E35B8683693C7928B9887642A8C2F0D2B142069F67778D728AED51DCD9CA1EB22BC58A35DA290C42D84F86FACB117C114F7B453B0C82FFF4B1677B345F8AA9CC78BACBD310DF97BE28A6B83D4CA72147F8C10424AAE3587A47B3FAA79DDC2862576225EE1F
这个n是两个大质数的乘积。

结论:
360ROM采用aes加密,rsa-1024签名校验md5的方式。如果需要对官方ROM解密,现在已经可以轻而易举实现。最简单的方式是直接用rom_decrypt运行一下就行了。如果要自己写代码实现也不难。
但是如果需要加密出一个兼容官方的rom格式,必须把n分解质因素。

目前对rsa-1024的分解是非常困难的。

所以暂时做不出兼容官方的ROM格式。但是可以解密官方的格式。

另一个结论是,官方兼容版OP的贴子 https://www.right.com.cn/forum/thread-147329-1-1.html 作者确实是360官方人员。


评分

参与人数 3恩山币 +7 收起 理由
hackpascal + 5 我点赞发自真心
hikey + 1 一看就是觉得高端、大气、上档次!
shellcode + 1 赞一个,你是我的呕像!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 18:46 | 显示全部楼层
想请教下非X86平台的二进制可执行文件用什么反汇编呢?

点评

IDA (Interactive Disassembler) 基本上所有类型的CPU的二进制文件都可以反汇编  发表于 2014-8-29 21:02
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 19:36 | 显示全部楼层
好厉害,看不懂
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 20:32 | 显示全部楼层
支持!我成功分解过rsa512,四核至强连续跑了近半年,
rsa1024估计要超级服务器才能分解了。
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 20:58 | 显示全部楼层
貌似天河2号像公众开放了,不知可以用不
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 20:59 | 显示全部楼层
他们的加密方法太大意了,一点都不安全
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-29 21:03 | 显示全部楼层
干掉uboot,刷成双系统!flash就拿来备份太浪费了!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 00:07 | 显示全部楼层
看了半天,就楼上的一整句话能看懂。支持楼主的穷究,继续深入!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 00:43 来自手机 | 显示全部楼层
高手,学习一下
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 06:38 | 显示全部楼层
为什么不能直接上编程器 把uboot 区段给替换掉么?
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 08:03 | 显示全部楼层
高手,膜拜一下。            
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 10:48 | 显示全部楼层
楼主实力派,加油继续
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-8-30 22:11 来自手机 | 显示全部楼层
感谢楼主分享经验!还能不能讲讲反汇编,真心谢谢!
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-12-16 09:25 | 显示全部楼层
厉害。顶起
我的恩山、我的无线 The best wifi forum is right here.
发表于 2014-12-16 10:01 | 显示全部楼层
不明觉厉,顶楼主的钻研精神
我的恩山、我的无线 The best wifi forum is right here.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )|网站地图

GMT+8, 2020-10-22 02:40

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表