|
本帖最后由 bihaiorg 于 2021-4-8 06:49 编辑
! L; k2 ?- |# K. i9 M9 N9 z7 O# l" L+ g9 D* ~) g
eudic 文件格式浅析9 F" ~/ D, H! c
: t% y4 ]% O1 h; ^ u* [; D
4月8日进度:7 i, a4 l$ N6 P2 b6 J9 p9 q/ L
- Debugging...
- 已解密大部分《有道》只读不写、《欧路》词库,读写未加密词库。其余已支持《星际词霸stardict》、《灵格斯词霸》、《goldendict》等大多数词库格式。
- 突发奇想,既然兼容了大部分词典,是不是应该考虑写一个新词典工具呢?恐怕要做自由软件,收费困难,动力不足。6 z- e/ X. ^' e
( ^6 @7 Z6 ~! ~% L# `: n" O9 E
* @, A/ r* E7 I0 |, g5 N1 e: r
& ^7 _5 l0 U1 n% S
$ L* d5 b: L/ m+ Z( e4月5日进度:( r: x7 V$ l5 @! J- X- S' o: O
感谢各位大佬支持鼓励!
" `+ X) w- d, K) q- Z+ D" \( \Debugging...8 @( m2 c2 s3 ^
EUDIC全系列解码测试,包括AES192加密等。
, n: \. J; a% q! J8 E有道全系列解码测试,包括YDD、DAT、YDIC、JSON等。) E& c0 ^! Y# W9 O
海笛词库解码测试,包括DGZ、ADGZ等。
" M( T( R$ O8 ]) M% Q其他的,还有必要解吗?大部分都是开源了。' T9 p: ~" \7 W3 W+ R$ i4 o2 e
个人觉得不应该发布这种转换工具,看他们用户协议写着“不能反编译、反向工程,不得制作类似软件”什么的,不过俺一不是他们用户,二不是靠反编译、反向工程,纯粹靠猜,至于是不是制作类似软件什么的,管的着吗?
% b1 v3 c: {* m3 T1 y$ a" n* g还是有点怕法务部。
7 M! C! {- ]* b9 G$ v4 f很迷茫。。。
, M$ a% u. g0 E+ X, E4 z5 M各位大佬有转换需求,可以私信发给我,有空必回复。% n! k7 B" f& T$ G
& u1 D- ^2 B- H% x, z6 |( a/ z. c
* o+ S0 _4 h8 {& |
1 |9 i; x5 Z" S3 v9 J" p6 d/ \) X% G3月26日进展:
5 W. E/ \# }) l. f! v4 sDebugging...
3 H! _4 D" {% i6 {% l. ~( T5 E顺便解析了《有道词典》安卓版的词库(桌面版格式不同)
$ \! X" I% I2 DA�{"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"}]}* C% n5 _1 i- I
/ C, t3 I. `$ B4 ^ a# D$ m4 W* C1 ?5 H- S& W
3月24日进展:3 m* D k) q) B; e1 h
完成各种EUDIC版本格式解析,包括dic文件夹下的主词库combined.bin、phrase.bin,支持解密,支持解析附加资源文件。* r3 b F0 n% C, w
+ N# q! d: p+ K+ C8 y/ m' C
, G' ]5 ?9 [& e1 F# k' u6 O- K
1 T, c2 \4 g3 v+ [1 o* c/ v$ o, i
3月23日进展:) M+ K. J. J% @- N2 ?( C
完成eudic解密及词典目录列表,vb6写个演示版 $ j# G; x- N, p: n2 U
1 M8 J$ U' H7 ~0 o2 T) T; ]' C- D q5 u
$ I3 O9 a- X' n
" V2 c% N% q% z& |
3月初1 Y. r' n6 ^; _% k- z6 t3 v
txt转EUDIC有专门的工具,反向的好像没找到,只好自己研究一下:
0 d1 U" s/ d7 X- private bool ReadDBHeader(GClass103 dbHeader, BinaryReader eudicReader) S/ T4 I. d. j- p, W0 }
- {0 x, \$ ]/ F6 R. r# o5 g+ s5 v
- MemoryStream memoryStream = new MemoryStream();
& O4 |, n8 G" ~# V0 ~7 z* D0 [ - //BinaryReader BinaryReader = new BinaryReader(memoryStream);
- Y# M' p2 f. Q/ t - % p) n+ T8 ~2 X' V
- eudicReader.BaseStream.Seek(0L, SeekOrigin.Begin);
, o# E1 x8 b' u+ N/ V/ | - Byte bFoo = 0;# z; {6 ?" e0 w1 a9 Y; `
- bFoo = eudicReader.ReadByte();//86
% L7 O6 ^' [/ i/ R- O4 n! l! J8 d - bFoo = eudicReader.ReadByte();//17
, ?# V. s7 a' D9 i9 J+ B* m - dbHeader.int_0 = eudicReader.ReadInt32();
4 o* C# X9 Z1 E - dbHeader.int_1 = eudicReader.ReadInt32();7 b% r8 I, o3 V
- dbHeader.genum5_0 = (GClass0.GEnum5)eudicReader.ReadInt32();
# \& S _8 B) f( A; ` - bFoo = eudicReader.ReadByte();//52
2 {5 E* |4 ^# G( P - bFoo = eudicReader.ReadByte();//124 ~" x! j* ]2 K; Q
- uint iFoo = eudicReader.ReadUInt32();//3u
) e+ O( A% u# Q9 l$ e# A. t& ~ - byte[] buffer = new byte[1018];
' Z) Z6 }) Y% i9 Z: t6 U - Random random = new Random();
. [3 X: L/ C: u8 m3 o - random.NextBytes(buffer);
, q. l- Q' \- v: Z) D1 A. o - buffer=eudicReader.ReadBytes(1018);. P N8 J7 {3 T' a. |3 [/ O
- byte[] array = { };
, H5 t' @& s: R$ c w8 n- r - int arrayLength = dbHeader.int_0;
& z+ ?! \; Y$ L - array =eudicReader.ReadBytes(arrayLength);
/ Q6 F# B4 j% ?3 p2 k7 D3 X4 d - dbHeader.int_5 = eudicReader.ReadInt32();# m8 X. ^, `, X" C" j
- int num = 0;# B' v( a) o1 S5 H
- checked
. S6 E. K; P: k3 ~4 [. C4 Q, o0 ^ - {
, P: {, U( p% \# m- L1 Z. m% x) H - int num2 = dbHeader.int_5 - 1;! ~9 k8 M8 J( X: Q! F3 o
- for (int i = num; i <= num2; i++)
! ?9 d& `$ ?& m5 k+ { - {& B$ e3 ~. Z- U* ]% e
- dbHeader.long_3[i] = eudicReader.ReadInt32();' V4 J; Q \7 A1 P/ e) V$ F6 K
- }; f: c% Q5 }+ D- O& u
- eudicReader.ReadBoolean();: I1 ?4 L6 v6 N2 ^
- dbHeader.int_1 = (int)eudicReader.BaseStream.Position;& ^. p. `* M8 B6 d g! v% G$ q
- //bool result = false;1 x/ M8 Z1 A( N8 b. U9 `
- //return result;
, _( J1 V* i) [" X' w - }* u; }3 ~8 X' r3 x* r3 Y o
- return true;$ Y* Y( i9 Z2 A2 {- p
- }
复制代码
. u" r+ |- k f+ @$ [2 c2 Q2 z( q看来挺复杂,其实也没啥。
$ }3 p y/ t7 J9 i5 z' T估计过几天放一个转换工具,不知道是不是侵犯版权? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?免费注册
x
评分
-
9
查看全部评分
-
|