• 标 题:某国产Office for Linux的破解(简单,菜鸟水平) (4千字)
  • 作 者:Phidel
  • 时 间:2003-07-12 12:14:39
  • 链 接:http://bbs.pediy.com

如今Linux的易用性已经越来越强,软件也越来越丰富,其中的Open Office(Star Office的开源项目)就是一个很好用的办公套件,超强的功能,对MS文档的高度兼容性,基本解决了Linux下办公软件的缺口。但由于是鬼佬的东西,中文支持总是差点。(其实Open Office的中文支持并不差,只是配置问题,对我等菜鸟而言,有点无从下手。)也就是这个原因,让国内的XX公司看到了商机,把Open Office的源码拿来,改进改进中文支持,再换个包装,OK,398大洋。要源码?门都没有。也许大家已经知道了这个东东具体是什么玩意儿,呵呵。其主页提供90天试用版本下载,试用期限内无任何限制,但过期之后就无法启动了,可以通过修改系统时间继续使用,但总是不爽,还是破解了罢。其实我并不使用这个东东,只是觉得它的价格黑点,再说,学过点皮毛的破解总是有点手痒,呵呵。废话少说,转入正文。

安装,将时间往后调一年,运行程序,提示“用户您好,本软件试用期已到......”,在其安装目录中的所有文件中搜索该字符串,发现位于soffice.bin文件,确定目标。提取该文件到Windows分区,重启进入Windows,用IDA反汇编之。由于找不到相应版本的String Reference插件,用UE搜索该字符串,确定其物理偏移地址为0x318A0,转换为虚拟地址为0x80798A0,搜索“80798A0”,看何处对它进行了引用,很快发现目标。

.text:0805DFEB                 push    ebx
.text:0805DFEC                 push    esi
.text:0805DFED                 call    ___mi__FRC4DateT0       获取已使用天数的函数
.text:0805DFF2                 mov     ebxeax
.text:0805DFF4                 add     esp, 20h
.text:0805DFF7                 cmp     ebx, 59h                是否超过90天
.text:0805DFFA                 jbe     loc_805E0C5             没超过跳转,否则NAG+QUIT
.text:0805E000                 add     esp, 0FFFFFFF4h
.text:0805E003                 lea     ebx, [ebp+var_C]
.text:0805E006                 push    ebx
.text:0805E007                 call    ___6String
.text:0805E00C 
.text:0805E00C loc_805E00C:                             DATA XREF: .gcc_except_table:08085370o
.text:0805E00C                 add     esp, 0FFFFFFF8h
.text:0805E00F                 push    offset unk_80798A0      这就是过期信息字符串
.text:0805E014                 lea     eax, [ebp+var_10]
.text:0805E017                 push    eax
.text:0805E018                 mov     ediebx
.text:0805E01A                 call    ___10ByteStringPCc      估计是弹出消息框的函数

在0805DFFA处执行跳转,看到

.text:0805E0C5                 lea     eax, [ebx-51h]          使用天数减去0x51
.text:0805E0C8                 lea     ecx, [ebp+var_2AC]
.text:0805E0CE                 mov     [ebp+var_2F0], ecx
.text:0805E0D4                 lea     edx, [ebp+var_2A8]
.text:0805E0DA                 mov     [ebp+var_2F4], edx
.text:0805E0E0                 lea     edi, [ebp+var_2A4]
.text:0805E0E6                 cmp     eax, 8                  将减运算结果于8比较
.text:0805E0E9                 ja      loc_805E259             小于则表示即将过期,NAG,但不QUIT
.text:0805E0EF                 add     esp, 0FFFFFFF4h
.text:0805E0F2                 push    ecx
.text:0805E0F3                 call    ___6String
.text:0805E0F8 
.text:0805E0F8 loc_805E0F8:                             DATA XREF: .gcc_except_table:080853C4o
.text:0805E0F8                 add     esp, 0FFFFFFF8h
.text:0805E0FB                 push    offset unk_8079980      提示即将过期的信息字符串
.text:0805E100                 mov     ecx, [ebp+var_2F4]
.text:0805E106                 push    ecx
.text:0805E107                 call    ___10ByteStringPCc

发现其比较依据均来源于0805DFED处函数调用的返回值,并转移到EBX寄存器中。我们只要让修改EBX的赋值就可以了,最简单的办法就是将0805DFF2处mov ebx,eax修改为xor ebx,ebx,让程序认为我们总是只使用一天,免去了修改诸多跳转的麻烦,也不容易落入可能存在的跳转暗桩(该程序保护如此之弱,应该没有暗桩,只是猜测,呵呵)。记下0805DFF2的物理偏移,为0x15FF2,用UE修改89 C3为33 DB,也可在Linux下用KHexEdit等工具修改,保存。重新进入Linux系统,用修改后的文件覆盖原文件。运行程序,不再提示过期,OK,收工。

对了,为了不需每次都进行覆盖工作,可以修改其安装包以一劳永逸。查看setup.ins文件发现soffice.bin文件位于压缩包f_0270中,该文件没有扩展名,但KDE直接认出这是zip包,Linux就是强,呵呵。解开,发现只有soffice.bin一个文件,用zip命令将修改后的文件打包到f_0270,会自动加上.zip扩展名,重命名,覆盖原文件,OK,以后你每次安装的就是正式版了,呵呵。

第一次破解Linux软件,也是第一次写这么长的破解文件,如有不对请大家指正,菜鸟虚心学习。