中兴光猫配置文件db_user_cfg.xml结构分析及解密

       中兴光猫配置文件db_user_cfg.xml保存着光猫的各项配置,包括超级帐号和密码,它一般位于光猫/userconfig/cfg目录下,前文“中兴光猫ZXHN-F650不拆机获取超级密码”,我们通过光猫文件操作的漏洞获取了配置文件,并通过RouterPassView获取了超级密码,后来就想着分析一下这个文件的结构和算法,自己来写一个解密程序。由于这个文件没有公开的文档可用,所在只能用winhex打开,边看边猜,这也是常规的解密方法,终于功夫不负有心人,经过几天的猜解,终于摸清了文件的结构,写出了解密程序,今天特来跟大家分享了下。

中兴光猫配置文件db_user_cfg.xml结构分析及解密

我们先来说文件结构。文件结构分为文件头和数据体两部分,数据体是分块保存的。结构如下图:

中兴光猫配置文件db_user_cfg.xml结构分析及解密

首先看文件头,它由60个字节组成,包含文件的大小、解压后大小、数据分块大小和数据校验值等,通过对比F650和F452两个光猫的配置文件,除校验值算法未知,这个结构基本如下:

中兴光猫配置文件db_user_cfg.xml结构分析及解密

最新更新:校验值算法已经搞清,校验值共8个字节,前四个字节是对每个zlib数据块进行crc32校验,初始为0,后一块以前一块的校验值为初始值,全部校验完成后写入校验值的前四个字节。然后对文件头前24个字节进行crc32校验,初始值为0,得出的结果保存到校验值的后4个字节。到此这个文件的结构和算法全部搞清楚了,大家可以搞个写回操作了。

中兴光猫配置文件db_user_cfg.xml结构分析及解密


需要说明的是,这个文件的数值保存都是采用 Big endian格式保存的,所以编程时要进行字节序的转换才行。我编程用的是delphi,转换字节序的函数如下:

function Swap32(const Value: LongWord): LongWord;
begin
  Result := Swap(Word(Value)) shl 16 + Swap(Word(Value shr 16));
end;

下面我们来看看最重要的数据块结构,它是有一个简单的数据头和zlib数据块组成,数据头中包含了数据解压后的大小,压缩块的大小和下个数据块的位置,所以我们只要找到第一个数据块的位置,就可以循环找到下一个,直到最后一个,根据数据块提供的信息进行解压合并就行了。数据块的结构如下:

中兴光猫配置文件db_user_cfg.xml结构分析及解密


通过图片的分析,相信大家都能写出解密程序,我先贴出我的解密算法,代码可能比较烂,但确实能用,大家不要喷便是:

function UnZipCofing(Fname: string): string;
var
  ds: TDecompressionStream;
  ms, fs, tmpfs: TMemoryStream;
  ss: TStringStream;
  bufferSize, blockSize, nextOff: LongWord;
begin
  fs := TMemoryStream.Create;
  tmpfs := TMemoryStream.Create;
  ms := TMemoryStream.Create;
  ss := TStringStream.Create('');
  if not FileExists(Fname) then
  begin
    ShowMessage('文件不存在!');
    exit;
  end;
  try
    fs.LoadFromFile(Fname);
    nextOff := 60;
    while nextOff > 0 do
    begin
      fs.Seek(nextOff, soFromBeginning);
  //读取缓冲区大小
      fs.Read(bufferSize, SizeOf(bufferSize));
      bufferSize := Swap32(bufferSize);
  //读取压缩块大小
      fs.Read(blockSize, SizeOf(blockSize));
      blockSize := Swap32(blockSize);
  //读取下一块位置
      fs.Read(nextOff, SizeOf(nextOff));
      nextOff := Swap32(nextOff);
      //复制压缩数据块到临时数据流
      tmpfs.Clear;
      tmpfs.CopyFrom(fs, blockSize);
      tmpfs.Position := 0;
      //解压数据块
      ds := TDecompressionStream.Create(tmpfs);
      ms.SetSize(bufferSize);
      ZeroMemory(ms.Memory, bufferSize);
      ms.Position := 0;
      ds.Read(ms.Memory^, bufferSize);
      //将解压后的数据流复制到字符串数据流
      ss.CopyFrom(ms, 0);
      ds.Free;
    end;{end while}
    //输出合并后的字符串流。
    Result := ss.DataString;
  finally
    //垃圾回收
    fs.Free;
    tmpfs.Free;
    ms.Free;
    ss.Free;
  end;
end;

写文不易,分析和制图都花费了不少时间,写代码更是耗时,因为毕竟不是专业程序员。所以写得不好大家不要喷,有不对之处请大家批评指正,写的程序如下,程序源码和编译后的程序及db_user_cfg.xml我会在附件中提供:
中兴光猫配置文件db_user_cfg.xml结构分析及解密

 

如有不懂得建议点击下面链接去原贴观看,工具已经打包在下载

本文转载来自吾爱破解论坛:https://www.52pojie.cn/thread-1005978-1-1.html

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

文章版权声明

 1 原创文章作者:汇维网,如若转载,请注明出处: https://www.52hwl.com/3498.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(3)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2021年4月5日 下午11:21
下一篇 2021年4月8日 下午6:23