当前位置:Linux教程 - Linux - hancom word的破解

hancom word的破解



         文杰5.0Evalution For OEM(60日)限制版破解心得

    Author:Softworm Date:Dec/08/2000

    使用Linux也有一段时间了,但一直没找到一个软件能够正确打开编辑Word97文档的.
    让我很恼火.后来发现有一个韩国的软件公司做了一个hancom word,自称能打开DOC文件.
    兴匆匆地跑到蓝点(我用的是BP1.0)网站上下了一个.结果刚一起动,就提示该软件已过了
    两个月的试用期,我按了一下ok,就直接退了出去,气死我了!把时间调回两个月前,嘿,能
    用了,能正确显示txt文件之类的简单东东,试着打开一个DOC文档,不正常了.但这是我在
    蓝点下用过的第一个能输入中文并正确显示的字处理软件.每次使用前调整一下时间可真
    不是很舒服,市面上倒是有得卖,但想想看,Linux下的东西还要这么贵(比我买的蓝点贵),
    还是国外的(想想金山, 唉......).干脆想个法子把它给破了!
    破解软件对我以前只是说说而已,哪有那么深厚的功力呢?不过以前还学过一点点汇
    编,C也用得比较熟了,加上又弄了一篇破解mtv的文章,就开始动手了.
    大学时看过一个同学用softice破解ACDsee2.3,呵呵,就是那个sender,27168,不过
    他是又重新破了一次,没用现成的.实际上原理也不复杂,就是想象一下软件的运行流程,
    再用工具跟踪验证,找到关键代码所在,再用自己的代码替换它(这是对我这个例子而言,
    不是做什么注册机).好了,闲话少说,开工吧!
    1.破解环境:蓝点Linux1.0,vim5.5,gdb4.17,objdump,KDE1.2,Konsole.
    Win98,UltraEdit8.0(没找到Linux下好用的HEX编辑器).
    2.破解步骤:
    (1) 在Linux下. 执行
    cd /usr/hwpx/shlib
    gdb hwpw //hwpw为破解对象

    (2) 估计一下,应该是程序起动后去检查了一下时间.如果是这样,那就有可能
    是一个函数做的这件事.所以先查查有没有什么可疑的函数:
    info functions

    (3) 哇!好多啊!一个个的浏览过去,发现了GetLocalTime, DestroyWindow,
    PrintMsg这三个我觉得有问题的函数.记下来,函数名前面的地址一定不要
    记错了!
    b GetLocalTime
    b DestroyWindow
    b PrintMsg
    run

    (4) 程序在一个GetLocalTime()调用处停了下来,赶紧查看一下栈:
    bt
    没看出什么名堂,那就继续:
    c
    又停在了一个DestroyWindow()调用处, 再看一下栈:
    bt
    看到了一个HncCloseLogo()调用,显然是关毕起动画面窗口的.
    看来大方向没错.还没到查时间处.那就继续:
    c
    嘿,又停在了GetLocalTime()处,看一下栈:
    bt
    看到了什么没有?CheckDueTime()啊,这个函数调用了
    SaveFTPProgessProc(),而这个Save...又调用了GetLoalTime().
    赶快查字典,看看Due是何意,懂了吧,这里应该是重大突破.暂且记下,
    继续运行:
    c
    (5) 又这般弄几下,就出现了那个讨厌的过期提示窗口.好了,没有再发现什么吧?那
    可以得出,在出现这个窗口之前就进行了时间检查.并且是在第二次停在
    GetLocalTime()函数调用处时进行的.这时的调用者是开始我们就怀疑的
    CheckDueTime()函数.那就是它了!
    (6) 先退出gdb
    quit(y)
    再进来,
    b CheckDueTime
    run
    停在了CheckDueTime()处,看看它做了些什么:
    disass
    到了这里,我看了看那些怪异的符号(久违了),有点眼花,直接返回看看先:
    q(return)
    return(y)
    c
    quit
    (7) 哈哈!进去了,没什么讨厌的时间限制了.并且可以得出,CheckDueTime函数真的
    没做什么别的事,除了比较时间.我知道,只要让CheckDueTime不做事就行了.
    那就清掉它的函数体呗.进栈出栈的代码保留就行了.当然也可以把它上层的函
    数调用它的话去掉,但我觉得不如对CheckDueTime本身动手好,这样几乎没什么
    危险.
    (8) 接下来我就简单说说如何修改可执行码.
    先得到CheckDueTime()的反汇编结果:
    objdump -d hwpw > hwpw.asm
    vim hwpw.asm
    这是一个36M的文件,等等吧.
    在vim中查找串\"81e3c0f\",这是CheckDueTime的地址,你前面就应记下的.
    找到了么?好!把这个函数的代码拷出来,这样小一点嘛,记住,从e8到76 00
    就行了.把这段代码存盘为check.asm.把hwpw和check.asm拷到Windows
    的文件系统中,重启.(注:如果你在Linux下有什么HEX编辑器,就不必这么麻
    烦了.)
    cp check.asm hwpw /mnt/d/temp
    shutdown -r now
    (9) 进了Win98,启动UEdit,调入hwpw和check.asm.在hwpw中查找check.asm中的机
    器码,查找时,你输入模式串越长越好,这样就不会弄错地方.找到了么?好!
    现在把它们全改为90(即nop),从e8到76 00.存盘,退出Win98.
    (10)回到Linux,把改过的文件mv至/usr/hwpx/shlib/,记住:先备份原来的hwpw.
    输入./hwpw,怎么样?成功了吗?如果不行,将备份恢复即可重新开始. 仔细一点
    永远没错!

    呼----,从来没写过这种文章,看了不少. 学了这么久电脑,真觉得在这个行业只
    要你肯动手,没什么搞不定的.

    声明一下,文章版权归Softworm所有.
    您如果照着文中的做出了问题请不要找我负责,我一很忙,二也不会负责.
    但我保证文中的内容完全属实, 命令请info gdb.
    还可参考水木清华的I007(阿健)的Linux下破解实战,讲得很好!
    Ok, be happy!
    有任何问题请发信至[email protected]
    转载请保留该声明,谢谢!


    All rights reserved. Copyright c 2000 Softworm.
    发布人:softworm 来自: