Codejie's C++ Space

Using C++

LAC : The secret of ld2


    这几个晚上(周末除外)都在分解Lingoes-Extractor作者的另外一个工程的代码, 同样是用于分析LD2文件的,但仅仅一个java文件就搞定了,对于我这样的JAVA初学者来说真是'太好了'...
    
    从第一次找到Extractor的代码起,我就一直很怀疑这位作者要不跟Lingoes有点关系,要不就是一位真正的破解大师...因为Extractor太完美了...代码不多,却非常清晰地标记并分解出了LD2的各个段的数据,以及数据间的关系...我的怀疑来自其对ld2文件格式的认识,每一段,每一个字节的意义都非常地准确地标示出来,更神奇的是那些'无从追踪'的魔数, 例如, 单词索引间隔固定为10, 14字节的索引数据块,等等...这些都是怎么推到出来的啊...

    我对自己的怀疑更偏向于后者,因为通过查看作者的其他代码,其除了分解了ld2文件外,还包括其他多个词典的数据文件...(感到震惊的同学们,自己去围观吧...另,多说一句,googlecode.com是个好地方...)

    我并不关心怀疑本身的答案, 因为我已经非常开心 --Extractor终让我有机会窥视到Lingoes的ld2文件的秘密...

    贴段代码, 以'奖励'自己多夜的敲敲打打...(是我写的Java代码,表认真啊...)

    private static void getData(final int index) throws IOException {

        RandomAccessFile file = new RandomAccessFile("output.data", "r");
        final ByteBuffer buf = ByteBuffer.allocate((int) file.getChannel().size());
        file.getChannel().read(buf);
        buf.order(ByteOrder.LITTLE_ENDIAN);
        int offset = 29;
        final int idx[] = new int[6];//        
        getIndex(buf, offset * 10, idx);

        if(idx[5] != idx[1]) {
            Output("self xml = " + getXml(buf, idx[1], idx[5] - idx[1]));
        }
        if(idx[3] == 0) {
            Output("word = " + getWord(buf, idx[0], idx[4] - idx[0]));
        }
        else {
            int ref = idx[3];
            int offsetword = idx[0];
            final int lenword = idx[4] - idx[0];
            
            while(ref -- > 0) {
                offset = buf.getInt(lenInflatedWordsIndex + idx[0]);
                getIndex(buf, offset * 10, idx);
                Output("ref(" + offset + ") xml = " + getXml(buf, idx[1], idx[5] - idx[1]));
                offsetword += 4;
            }
            Output("word = " + getWord(buf, offsetword, lenword));
        }

        file.close();
    }


    再整理几天,要能琢磨个LAC2直接使用ld2的法子来的话,那就又可以进一大步了啊...

posted on 2012-12-03 23:14 codejie 阅读(2415) 评论(4)  编辑 收藏 引用 所属分类: 轮子精神LingosHook

评论

# re: LAC : The secret of ld2 2012-12-04 15:00 augustheart

反编译一定程度上来说主要还是体力活吧。  回复  更多评论   

# re: LAC : The secret of ld2[未登录] 2012-12-04 21:54 codejie

@augustheart
这个我同意,但首先你得会反编译...像我这样不懂的,只能一个一个字节分解Data文件了...NND,这更是体力活...  回复  更多评论   

# re: LAC : The secret of ld2[未登录] 2014-02-09 09:24 Alex

博主能不能写一个LD2查询的java库啊。这样大家就都可以用了  回复  更多评论   

# re: LAC : The secret of ld2 2014-02-09 16:39 codejie

@Alex
实在对不起啊, 现在还真没时间..如果你需要这个, 建议看看Extractor工程, 那段代码很简单的.  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜