|
本帖最后由 bihaiorg 于 2021-4-8 06:49 编辑 5 b3 d1 {- q$ c0 u R1 ]
, p4 D* D, X5 }# ~8 `+ `( O
eudic 文件格式浅析
_2 o4 O* b6 x" X3 \. U# L7 x. p; ?+ d# q/ P r
4月8日进度:2 l# P8 O) B/ x! R
- Debugging...
- 已解密大部分《有道》只读不写、《欧路》词库,读写未加密词库。其余已支持《星际词霸stardict》、《灵格斯词霸》、《goldendict》等大多数词库格式。
- 突发奇想,既然兼容了大部分词典,是不是应该考虑写一个新词典工具呢?恐怕要做自由软件,收费困难,动力不足。
- `$ |, o; E% L3 V! ?0 i
' P; O( T; s6 ]
- d1 }; R& Z5 f5 S8 m4 {- ^! D; O; ` ; q6 r8 c- h7 o3 I- l# S
/ Z* i4 ^4 |* @4 u. o& R4月5日进度:
& Z* m2 L' T# R) B3 Y% t" k感谢各位大佬支持鼓励!0 n, ]/ I& Q0 A( j
Debugging...
7 O* {' G& e6 f+ SEUDIC全系列解码测试,包括AES192加密等。
" b0 e# X8 i; q r! }0 Y8 o有道全系列解码测试,包括YDD、DAT、YDIC、JSON等。
: n$ o' c' {( v: U' ?, E" S2 O海笛词库解码测试,包括DGZ、ADGZ等。( h: ^9 `9 q5 m& m1 |0 o
其他的,还有必要解吗?大部分都是开源了。& Q5 ]1 ?% D7 [ f" h1 n
个人觉得不应该发布这种转换工具,看他们用户协议写着“不能反编译、反向工程,不得制作类似软件”什么的,不过俺一不是他们用户,二不是靠反编译、反向工程,纯粹靠猜,至于是不是制作类似软件什么的,管的着吗?
2 K6 f( c& ^. [# a% h0 U o还是有点怕法务部。
7 N0 O4 _1 Z3 X; ?很迷茫。。。
% v4 B1 L) N: C M" y1 o/ \$ [5 }' L各位大佬有转换需求,可以私信发给我,有空必回复。
( o c# l; j; O, y: W4 X! h, o7 a0 M# Y$ L+ d" }5 ?. x
/ k9 j3 S* W: P" u7 U5 Y
" F, m: l9 J, h% R# D0 X+ z7 n; e! }1 \3月26日进展:& E0 l k8 n4 `! Y) W. H
Debugging...& Y i! i5 }: d: N2 L5 ]( R
顺便解析了《有道词典》安卓版的词库(桌面版格式不同)
$ g. W. o$ i2 w& l7 IA�{"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"}]}
0 n- i) X: B+ {. s! u; ?& \) |
( n2 S$ H8 z, w! F4 F1 Q% [* z$ d) R" j. B
3月24日进展:( X0 z& I9 g. V6 k% q
完成各种EUDIC版本格式解析,包括dic文件夹下的主词库combined.bin、phrase.bin,支持解密,支持解析附加资源文件。
' K9 t. D- P3 Y4 g' B' w$ c
$ P3 L1 j+ k9 i7 m
. N+ J% I0 C# Y' ]2 ^+ S: X( l
( G9 h3 w) v* P: R1 ^$ B5 F) {1 s, ~
- D/ d4 N0 D1 g9 m% B" i3月23日进展:
% B* n h/ ]3 d" V- f完成eudic解密及词典目录列表,vb6写个演示版 6 |( \- O4 f7 g$ _/ N) ~
/ T% N3 B5 D) J M5 Z! @
" M' {* H% ~8 P" {
% x) x+ Z; M) |- l8 Z2 `+ n. `/ M& y0 P
0 C* ]+ m% b' I$ c1 @3月初
5 d$ o# }, A* v% x; I8 d" mtxt转EUDIC有专门的工具,反向的好像没找到,只好自己研究一下:! m" K7 A; m( Z% w# v
- private bool ReadDBHeader(GClass103 dbHeader, BinaryReader eudicReader)6 u" @3 q8 j: ~' ?* U% E+ h
- { N+ y& P' x: Z5 l* S/ {' G" Z
- MemoryStream memoryStream = new MemoryStream();
# ^7 G8 Q# w6 B8 b' ^" K: A+ z - //BinaryReader BinaryReader = new BinaryReader(memoryStream);( _. @: D0 ~- s& l8 C8 f: L
- / H1 R- z2 _. E# y+ D( F+ u$ L, K
- eudicReader.BaseStream.Seek(0L, SeekOrigin.Begin); . [$ v: ^# P5 Q( k G( i
- Byte bFoo = 0;3 C5 S- T# j! y. v; v! l* A4 F
- bFoo = eudicReader.ReadByte();//863 K! h4 q+ d2 V3 y! Y8 F
- bFoo = eudicReader.ReadByte();//17% O5 z- y0 R: k" G. i4 e
- dbHeader.int_0 = eudicReader.ReadInt32();" J, ~+ K, ^' _- Y
- dbHeader.int_1 = eudicReader.ReadInt32();
/ a/ z4 q4 t: ?2 h+ t6 Y8 j3 ? - dbHeader.genum5_0 = (GClass0.GEnum5)eudicReader.ReadInt32(); S6 `3 n! {6 K- s1 W' e% Y
- bFoo = eudicReader.ReadByte();//52
; J0 O% Q) C4 r' W& r% n3 C - bFoo = eudicReader.ReadByte();//12- i* h( a: B0 v# S" B( r
- uint iFoo = eudicReader.ReadUInt32();//3u a( j* \ ~( S
- byte[] buffer = new byte[1018];
3 u! ?" I+ p! M6 i - Random random = new Random();
6 ?/ V C) i% `, M- v; t9 c - random.NextBytes(buffer);
. {/ b" {( L u6 f& R - buffer=eudicReader.ReadBytes(1018);
8 T! N3 G- ^9 _7 B& g. @, Q5 s - byte[] array = { };! u* n* x! E$ ~" E1 z$ _
- int arrayLength = dbHeader.int_0; ~. i7 V6 p9 a, {3 h8 @
- array =eudicReader.ReadBytes(arrayLength);
/ \6 w E) C& n3 y# g - dbHeader.int_5 = eudicReader.ReadInt32();
; h8 ^" F% I% }; y - int num = 0;
. Q/ H2 ?0 I, L" p - checked0 k: E1 j- c! ], O7 w# q/ G0 ^1 w
- {8 ^! k' h% l( P4 c3 I
- int num2 = dbHeader.int_5 - 1;/ P) F9 S8 _& t, ]! ?/ P9 s
- for (int i = num; i <= num2; i++)* ~9 M8 p6 X" }, O8 F
- {" y6 R( E! I3 ?+ ?( w
- dbHeader.long_3[i] = eudicReader.ReadInt32();, `# {$ A/ q/ E J, q6 t
- }
2 e+ |, h N: ~% d - eudicReader.ReadBoolean();
3 H2 n/ l9 [; u% k$ c5 R: G - dbHeader.int_1 = (int)eudicReader.BaseStream.Position;
9 G+ [4 @ D3 g% K* N( V. X! g! K' V - //bool result = false;
, }- M( u" C4 b- }: i% L \5 R - //return result;
3 {& H* @) a3 p! v k - }
4 o1 c7 N, l, @8 `4 g) b$ i - return true;
. r, W* ~; O! k% Z) n1 J* \% q - }
复制代码
7 \* t# n0 v' r9 W) k看来挺复杂,其实也没啥。# i4 J7 q) V9 _4 U
估计过几天放一个转换工具,不知道是不是侵犯版权? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
9
查看全部评分
-
|