某國產Office for Linux的破解(簡單,菜鳥水平) (4千字)

看雪資料發表於2015-11-15

標 題:某國產Office for Linux的破解(簡單,菜鳥水平) (4千字)

發信人:Phidel  [發短訊息]

時 間:2003-07-12 12:14:39

詳細資訊:


如今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軟體,也是第一次寫這麼長的破解檔案,如有不對請大家指正,菜鳥虛心學習。

相關文章