|
本帖最后由 bihaiorg 于 2021-4-8 06:49 编辑
% ]2 e2 x/ a' u$ p
, s2 ~, K* m& qeudic 文件格式浅析
; I+ t" O- d3 K; L$ d* Q9 W
% A4 Q6 p( ~" d% v" j& [4月8日进度:! S+ Y% S8 e4 h
- Debugging...
- 已解密大部分《有道》只读不写、《欧路》词库,读写未加密词库。其余已支持《星际词霸stardict》、《灵格斯词霸》、《goldendict》等大多数词库格式。
- 突发奇想,既然兼容了大部分词典,是不是应该考虑写一个新词典工具呢?恐怕要做自由软件,收费困难,动力不足。+ B$ n# J7 B. s8 u# u% I8 v
* i) e# Y% e$ ~7 M8 P
- Z8 a) K1 ?3 H6 L/ L: r; e2 E
+ W- }0 g9 D$ \8 Q+ X1 u( w; I" w+ E* d$ u! x7 L9 A
4月5日进度:1 d9 ~8 [" ]$ i" z. N# w$ {" _
感谢各位大佬支持鼓励!
$ s. V4 O1 N% a3 \4 h& P' f |( xDebugging...
( U+ L0 t6 P' K& c. V7 t# sEUDIC全系列解码测试,包括AES192加密等。
* o8 A. m8 ~& k$ }. x有道全系列解码测试,包括YDD、DAT、YDIC、JSON等。
; d* t: v' }+ n3 {7 i! [; f! ~海笛词库解码测试,包括DGZ、ADGZ等。
6 b5 y" k) u3 r% D其他的,还有必要解吗?大部分都是开源了。
% Y9 y7 L' D0 x' t个人觉得不应该发布这种转换工具,看他们用户协议写着“不能反编译、反向工程,不得制作类似软件”什么的,不过俺一不是他们用户,二不是靠反编译、反向工程,纯粹靠猜,至于是不是制作类似软件什么的,管的着吗?) }3 d1 z: v3 v; @- d8 w% V# K
还是有点怕法务部。
! y, e9 j0 n3 L7 a很迷茫。。。
* v* Q* e g* R* y; E1 x6 b8 h各位大佬有转换需求,可以私信发给我,有空必回复。/ }( z( M4 w' u
/ K: s( \7 {! t# O
* w- s) S! w3 L& H9 }6 G
, O* X& p; W& K \6 r3月26日进展:
& y" S e: U. b6 G8 aDebugging...4 V1 G+ ]1 C/ S+ H2 V5 B' F
顺便解析了《有道词典》安卓版的词库(桌面版格式不同)+ q4 M, M8 f$ ^- j8 |" e) O
A�{"wordList":[{"h-g":{"p":[{"p":"pron"}],"i-g":{"i":{"audio":"http://ydschool-online.nos.netease.com/oxford_Advance_video_US__/_e/_em/_em_1_gb_1.mp3","content":"əm"},"y":{"audio":"http://ydschool-online.nos.netease.com/oxford_Advance_video_US__/_e/_em/_em_1_us_1.mp3"}},"r":[{"r":" <i>informal</i> "}],"h":"'em","x":[{"xr1":[{"xt":"eq","value":[{"xh":"them","xt":"eq"}]}]},{"chn":{"content":"别让他们跑掉。"},"content":"Don't let 'em get away."}]},"Name":"'em"}]}
, G1 Y8 _( m4 K: K& W
+ _3 c+ Z8 `. E7 X/ A/ b2 q
+ H" ^7 i6 R( @% J# w3月24日进展:( _* |. R8 u8 ~1 d3 ~5 j+ u+ O
完成各种EUDIC版本格式解析,包括dic文件夹下的主词库combined.bin、phrase.bin,支持解密,支持解析附加资源文件。
* F: e% g% @2 V2 }. B; t8 a- `, L
7 r- n, M* N) Z. T, h" I, y' c1 ^# T+ F+ u: y
' r6 N, F) m- U$ c
3月23日进展: O8 _ j, l% n$ V2 e, k
完成eudic解密及词典目录列表,vb6写个演示版
5 t9 l+ n9 k/ r: @& j: E
! c P9 v+ b! k$ z; v
+ E- R, `& x% y
* \% T0 p, r. x( C9 n. d
( P; B) l( ]) b `' |7 Z1 t. B& [3月初
2 o! n X' ?- C r0 i! N* W- H) v1 etxt转EUDIC有专门的工具,反向的好像没找到,只好自己研究一下:
: R. r" J. C" R1 b* B) W2 O% u/ t4 A- private bool ReadDBHeader(GClass103 dbHeader, BinaryReader eudicReader)7 B- E: `4 o/ ?2 r4 d5 R a. m
- {+ o; e5 K7 A4 Y" Q- e# l( U
- MemoryStream memoryStream = new MemoryStream(); c0 {, }$ R3 x3 ^
- //BinaryReader BinaryReader = new BinaryReader(memoryStream);
; W& r& e$ }8 a/ A/ g - & O' A: A2 v5 G r2 w
- eudicReader.BaseStream.Seek(0L, SeekOrigin.Begin);
) o5 y9 B, W7 Q7 ^1 }% P$ B - Byte bFoo = 0;
4 z- _: W8 P4 G; S$ ] - bFoo = eudicReader.ReadByte();//86, H: V7 H+ h4 S U4 y1 j! _/ D
- bFoo = eudicReader.ReadByte();//17
+ I* Z5 g8 m, f5 O. H- ^ - dbHeader.int_0 = eudicReader.ReadInt32();, E5 `+ A: l/ C8 O+ m7 l0 D5 o% ~$ w
- dbHeader.int_1 = eudicReader.ReadInt32();
/ R8 Y5 g# Y7 T/ b* S - dbHeader.genum5_0 = (GClass0.GEnum5)eudicReader.ReadInt32();6 j3 D" M1 D# u& [2 }$ {. I' R
- bFoo = eudicReader.ReadByte();//52
; r( p- q4 L( y - bFoo = eudicReader.ReadByte();//12
; V# o8 B: u& N* i4 ~& y( A - uint iFoo = eudicReader.ReadUInt32();//3u
3 y h% {/ T" V/ s- h: n! p - byte[] buffer = new byte[1018];+ @8 Z1 y: C5 e1 u
- Random random = new Random();
2 ?% A1 x1 |) p$ r! ?! ~/ V* ^ - random.NextBytes(buffer);
, s' W1 A' @ ? - buffer=eudicReader.ReadBytes(1018);
: [7 V: L$ ~: _4 ^+ a' ~ D0 | - byte[] array = { };
. V* n0 i+ N* V& p8 c& n' J - int arrayLength = dbHeader.int_0;
* w4 i+ x# Z. T9 v5 S2 } - array =eudicReader.ReadBytes(arrayLength);- e5 G9 b) A+ x, Y) }6 k7 r% }
- dbHeader.int_5 = eudicReader.ReadInt32(); q2 ^' P& T+ Q
- int num = 0;/ f6 O7 B7 y; ^' ?1 s
- checked9 j1 T* B$ G8 W& I" r. o! U0 j
- {
6 ~. h6 ~, s; o1 c; ?1 Y- ~- X6 S - int num2 = dbHeader.int_5 - 1;, ]' _+ t" v# a% g. H
- for (int i = num; i <= num2; i++)3 |- G0 @% y0 h+ L4 g7 _
- {8 D/ ^1 r: S& f: m9 `8 Z. o
- dbHeader.long_3[i] = eudicReader.ReadInt32();
$ ~" Y1 o/ u: m3 I$ x - }7 s( z) y) v* M, M
- eudicReader.ReadBoolean();* b7 J) w! `7 ~ L) J( T
- dbHeader.int_1 = (int)eudicReader.BaseStream.Position;+ P) I7 Z5 T# h8 G6 U0 s& P
- //bool result = false;/ M0 N6 e/ t( B$ S4 W" N, E) _! Q
- //return result;
9 S, o: Y2 w6 q - }' \) S! C& B5 W$ l1 M
- return true;+ H @( r# t6 v# \) J% W* U' G
- }
复制代码
; K& S. b/ ^- H( C5 n& Z看来挺复杂,其实也没啥。
, I3 _% Q6 B0 X# K$ H$ \, P估计过几天放一个转换工具,不知道是不是侵犯版权? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
9
查看全部评分
-
|