逆向安农大云盘软件

由于使用云盘时服务异常,博主对该云端服务的前端与后端进行了研究,找出了问题所在。

import Warning from ”../../../components/mdx/Warning.astro”;

免责声明

本文仅用于个人学习、技术交流与研究记录,不代表任何学校、机构或组织的官方立场。

文中所述内容均为技术层面的探讨与分析,不构成任何操作建议、部署方案或安全指导。

请勿将本文内容用于任何未经授权的系统、网络或数据。因不当使用本文内容所产生的一切后果,由使用者自行承担,作者不承担任何直接或间接责任。

如有侵权或不当之处,请联系作者删除。

所有的环境全部在内网基于VPN建立,所以通过外网无法访问。

本人没有过多阐述详细内容,仅记录日志。

初步分析

downloadpage

学校提供1000G的内存,不用白不用所以直接办理申请,几乎是没有门槛的。

main-frontend-page

不知道学校的前端是怎么设计的,总之什么都不会显示,可用性几乎为0,但是我们可以下载客户端,得到一个名为SugonClientSetup的压缩包,解压即可得到安装文件,这个安装文件的证书被吊销了,所以直接红色UAC警告。

uac 图源于网络,侵删。

UAC 对话框只有「否」,没有可点的「是」——根本无法提权,也就无法安装。

同目录里有作者留下的 请使用run.bat进行安装.txt,内容只有一句「请使用run.bat进行安装」,

而 run.bat 是这么干的:


@ echo off

%1 %2

ver|find "5.">nul&&goto :Admin

mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof

:Admin

set path=%~dp0

%path%\SugonClientSetup.exe

即:用 mshta 走 ShellExecute(..., "runas", ...) 触发提权后再调用安装包。

这条路同样被拦 —— 因为它只是换了种方式请求提权,拦人的是提权检查本身。


$s = Get-AuthenticodeSignature 'D:\Files\Download\SugonClientSetup\SugonClientSetup.exe'

$s.Status          # → UnknownError

$s.StatusMessage   # → 证书已被颁发者直接吊销

$s.SignerCertificate.Subject

# → CN=中科教软件信息服务(安徽)有限公司, O=..., L=合肥市, S=安徽省, C=CN

根因是证书被吊销,无伤大雅,直接无视证书安装即可。

通过该命令可以直接绕过证书。


$exe = 'D:\Files\Download\SugonClientSetup\SugonClientSetup.exe'

$p = Start-Process -FilePath $exe -WorkingDirectory (Split-Path $exe) `

                   -ArgumentList '/S' -Wait -PassThru      # /S = 静默安装

"EXITCODE=$($p.ExitCode)"

安装后得到如下内容


C:\Program Files (x86)\SugonClient\

    ImClient.exe              ← 主程序(IM + 云盘)

    ImClient.exe.config

    MobileCloud.dll           ← 云盘功能主体(要逆向的就是它)

    SugonLib.dll / SugonSkinForm.dll / SugonURLProtocol.dll

    ControlExs.dll / ObjectListView.dll

    Newtonsoft.Json.dll / ICSharpCode.SharpZipLib.dll

    10940_x86\ Face\ Registercrt.exe RestartExplore.exe clearData ...

逆向主文件

ImClient.exe 是 PE32 (x86) + CLR 头的 .NET 程序集(CLR header RVA = 0x2008)。

因为没有加壳,也没有AOT编译。

通过放入ilspycmd、dnspy,我们可以很轻松的拿到类源码。

程序集.cs 数实质重写处理
SugonSkinForm.dll242CCWin 皮肤控件框架(第三方)丢弃,换 WPF/WinUI/新 WinForms 主题
SimpleUpdater.dll176FSLib.App.SimpleUpdater(开源更新库)丢弃,换自研/Squirrel
SugonLib.dll36工具库(Ini/Cipher/SQLite DAO/NamedPipe/WinAPI)选择性重写
ControlExs.dll36自绘控件(MyButton/CustomMessageBox/ShadowForm)丢弃
MobileCloud.dll280业务核心:网盘 / 分享 / 协作 / 保密柜 / 同步 / 通知主要重写对象
ImClient.exe94主程序:登录 / XMPP IM / 聊天 / IPC / 浏览器拉起主要重写对象
office/SugonURLProtocol.dll2Office 集成协议可选

在安装目录里有个setting.ini的文件,存储了服务器信息与内容


[web]

host=pan.ahau.edu.cn

port=80

webcontext=cloudservice

[xmpp]

server=message.ahau.edu.cn

port=5222

[option]

isRemind=0

isSound=0

quitType=1

读入逻辑:ImClient/ImClient/Program.cs:88-101 → WebToolkit.BASE_URL = "http://" + host + ":" + port + "/" + webcontext;MobileCloud/MobileCloud/MobileCloudUI.cs:56-62 侧独立读同一 ini。

参数解析在 ImClient/ImClient/Program.cs:131-181:两次 UrlDecode → 去掉 sugonim:///sugonIm:// → 去掉所有 / → 按 &、= 硬切分,支持字段:


userId  sessionId  userName  password  name  sex  domain

对,他是明文存储的账号,密码,名字。。。草台班子吗?还是直接无脑套的壳子,博主感觉像是坚果云的壳子。

至于具体的鉴权与登录,这里作者不方便讲解,也不能讲解。

关于并发上传速度慢的问题

博主在尝试修复这个云盘软件时,上传一些零散的文件时,会发现速度特别慢,这让博主不解。

我传一个 12 字节的文本文件,花了 10 秒。

我传一个 1 MB 的文件,花了 10.9 秒。

差了 8 万倍的大小,时间几乎一样。这说明慢的不是带宽。


第一反应当然是”我代码写慢了”。我做了端到端加密,怀疑对象有三个:加密本身、文件哈希、机器指纹。

测下来全是 0~2 毫秒。加密不是瓶颈。

我一度认定是机器指纹(上传接口要带一个由”系统安装时间 + 磁盘序列号”拼出来的 token,而它是调 WMI 查的,WMI 出了名的慢, 冷的时候能卡好几秒)。我甚至已经写好了修复——把这个值缓存到磁盘,因为装上系统后它永远不变。

结果一测:WMI 只要 245 毫秒。所以问题不在这里。。。


我在上传路径上加了分段计时。日志出来是这样:

  MD5(65KB)        = 2 ms
  机器指纹          = 0 ms
  断点查询          = 0 ms
  POST 拿到响应头    = 4469 ms   ← 时间全在这

客户端只花了 2 毫秒,剩下的 4.4 秒全在那一个 HTTP 请求里。

最关键的细节:这一请求我传的是 65 KB 的密文。而紧接着还有一次上传,传的是623 字节的加密索引——也是 4.4 秒。

623 字节用 4.4 秒,等于每秒 140 字节。这绝不可能是网速。

接口本身是快的;那 4 秒是服务端在实打实地干活(大概是它的存储后端,或者前面那层防火墙 )。而且它花的时间跟文件多大没关系。


这个云盘没有”随机写”能力,任何修改都只能整文件重写;

结果是:每写一个文件,要向服务端发两次上传——内容一次、索引一次。

2 × 4.1 秒 = 每个文件 9 秒的固定成本,你传 12 字节还是 1 MB 都一样。

日志里两个文件的时间戳正好印证:前一个 34 秒,后一个 44 秒,正好隔 10 秒。

所以是这个服务器每次接受上传要花4秒,每次要发两次请求,不明白为啥这样做,零散文件上传会出奇的慢,但是对于整合文件上传还是挺舒服的,1000G不要白不用。

博主写了个云盘挂载到本地磁盘,相当好用,备份点文件还挺好的,缺点是必须连接校园VPN才可访问。

版权声明:本文作者为 nuym,首发于 www.nuym.cn。

遵循 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

评论