標 題:某國產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 ebx, eax
.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 edi, ebx
.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軟體,也是第一次寫這麼長的破解檔案,如有不對請大家指正,菜鳥虛心學習。