檔案閱讀器readbook v1.41 c (9千字)

看雪資料發表於2001-03-11

檔案閱讀器readbook v1.41 crack by happyhackwang
軟體名稱:檔案閱讀器readbook v1.41
軟體功能:語音閱讀文字
註冊方式:name+serial
作者:餘民
作者主頁:http://ReadBook.126.com
作者郵箱:ReadBook@126.COM
破解者:happyhackwang
郵箱:happyhackwang@263.net
OICQ:4696993(不線上^^)
註冊方式:Patch(誰想寫序號產生器,自己寫吧!演算法見後)
工具:softice,w32dasm,my head,ultraedit(to write this article)
特別感謝:w32dasm作者,以及patch它的各位

反彙編以後,看到了註冊失敗的資訊提示的字串,向上看:
:0040A10F 3975FC                  cmp dword ptr [ebp-04], esi    ;這是關鍵
:0040A112 741D                    je 0040A131
......
:0040A12C 3975FC                  cmp dword ptr [ebp-04], esi    ;關鍵的比較
:0040A12F 7547                    jne 0040A178    ;相等則註冊,不等則失敗

[ebp-4]裡的數是怎麼來的?
:0040A09E C745F412320000          mov [ebp-0C], 00003212    ;預定義的
:0040A0A5 C745E434120000          mov [ebp-1C], 00001234    ;
:0040A0AC C745E888880000          mov [ebp-18], 00008888    ;
:0040A0B3 C745F023230000          mov [ebp-10], 00002323    ;
:0040A0BA E878D20000              call 00417337
:0040A0BF 83C410                  add esp, 00000010
:0040A0C2 85C0                    test eax, eax
:0040A0C4 7524                    jne 0040A0EA
:0040A0C6 8D45F0                  lea eax, dword ptr [ebp-10]    ;2323
:0040A0C9 50                      push eax
:0040A0CA 8D45E8                  lea eax, dword ptr [ebp-18]    ;8888
:0040A0CD 50                      push eax
:0040A0CE 8D45E4                  lea eax, dword ptr [ebp-1C]    ;1234
:0040A0D1 50                      push eax
:0040A0D2 8D45F4                  lea eax, dword ptr [ebp-0C]    ;3212
:0040A0D5 50                      push eax
* Possible StringData Ref from Data Obj ->"C:\"
:0040A0D6 6860374600              push 00463760

* Reference To: KERNEL32.GetDiskFreeSpaceA, Ord:0100h
                                  |
:0040A0DB FF15F8114500            Call dword ptr [004511F8]
:0040A0E1 8B45F0                  mov eax, dword ptr [ebp-10]    ;總簇數
:0040A0E4 0FAF45F4                imul eax, dword ptr [ebp-0C]    ;與每簇的扇區數乘
:0040A0E8 EB19                    jmp 0040A103
......
:0040A103 F7D0                    not eax
:0040A105 3145FC                  xor dword ptr [ebp-04], eax    ;這裡

看看GetDiskFreeSpace API的入口引數
?lpRootPathName                00463760
(根目錄)

?lpSectorsPerCluster            ebp-0C
(每簇的扇區數目的指標)

?lpBytesPerSector            ebp-1C
(每個扇區位元組數的指標)

?lpNumberOfFreeClusters            ebp-18
(空閒的簇數的指標)

?lpTotalNumberOfClusters        ebp-10
(總簇數的指標)




esi的數是怎麼來的?
:0040A03F E8829B0200              call 00433BC6
:0040A044 8B8548FFFFFF            mov eax, dword ptr [ebp+FFFFFF48]    ;[72F8E8]@1
:0040A04A 8B8D4CFFFFFF            mov ecx, dword ptr [ebp+FFFFFF4C]    ;[72F8EC]@2
:0040A050 8BB544FFFFFF            mov esi, dword ptr [ebp+FFFFFF44]    ;[72F8E4]@3
:0040A056 03C1                    add eax, ecx        ;
:0040A058 038550FFFFFF            add eax, dword ptr [ebp+FFFFFF50]    ;[72F8F0]@4
:0040A05E 69F631750000            imul esi, 00007531    ;
:0040A064 69C031750000            imul eax, 00007531    ;

* Possible StringData Ref from Data Obj ->"BIN_OR_TEXT"
                                  |
:0040A06A C704240C334600          mov dword ptr [esp], 0046330C
:0040A071 68B5000000              push 000000B5
:0040A076 53                      push ebx
:0040A077 2BF0                    sub esi, eax    ;這裡

[72F8E4]是存放名字字串的地方
所以@1是偏移地址的第四個位元組開始的4個位元組
@2              八          4
@3              零          4
@4              十二        4

例如:名字輸入 crack readbook
@1就是k re
@2就是adbo
@3就是crac
@4就是ok 
名字字元不夠長的補以空格(ASCII 20)



自我病毒監測功能的實現:開啟RBBackup.DAT                                  |
:00417F6A FF1564124500            Call dword ptr [00451264]    ;FindCloseChangeNotification()
:00417F70 395DD4                  cmp dword ptr [ebp-2C], ebx    ;API函式
:00417F73 742D                    je 00417FA2
:00417F75 6A14                    push 00000014

* Possible StringData Ref from Data Obj ->"這裡是ReadBOOK的自我修復功能"
                                  |
:00417F77 68B0594600              push 004659B0

* Possible StringData Ref from Data Obj ->"    ReadBook察覺到自身有改變,如果不是檔案損壞"
                                        ->"的就是讓病毒感染了!
    一般說來,硬碟很少損*"
                                        ->"擔綣ReadBook是安裝在硬碟上的,那麼
極大"
                                        ->"的可能是您的計算機中存在病毒。
"
                                        ->"  解決辦法是使用防毒軟體對計算機進行檢查。但*"
                                        ->"捎詡撲慊《久刻於*
有新的種類出現,請您一定要"
                                        ->"注意您的防毒軟體的版本(出版時間),確定
您使*"
                                        ->"玫氖親鈽擄奼鏡模ㄉ倍救砑陌奼靖輪芷諞話閌羌"
                                        ->"甘歟*
    ReadBOOK具有自我修復功*"
                                  |
:00417F7C 6894574600              push 00465794
:00417F81 53                      push ebx

* Reference To: USER32.MessageBoxA, Ord:01BEh
                                  |
:00417F82 FF1530164500            Call dword ptr [00451630]
:00417F88 83F806                  cmp eax, 00000006
:00417F8B 0F850D010000            jne 0041809E
:00417F91 E81AEFFFFF              call 00416EB0
:00417F96 53                      push ebx

* Reference To: USER32.PostQuitMessage, Ord:01E0h
                                  |
:00417F97 FF15F0144500            Call dword ptr [004514F0]
:00417F9D E9FC000000              jmp 0041809E

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00417EC6(C), :00417F73(C)
|
:00417FA2 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"這裡是ReadBOOK的病毒監測功能"
                                  |
:00417FA4 6874574600              push 00465774

* Possible StringData Ref from Data Obj ->"    ReadBook察覺到自身有改變,如果不是檔案損壞"
                                        ->"的就是讓病毒感染了!
    一般說來,硬碟很少損*"
                                        ->"擔綣ReadBook是安裝在硬碟上的,那麼
極大"
                                        ->"的可能是您的計算機中存在病毒。
"
                                        ->"  解決辦法是使用防毒軟體對計算機進行檢查。但*"
                                        ->"捎詡撲慊《久刻於*
有新的種類出現,請您一定要"
                                        ->"注意您的防毒軟體的版本(出版時間),確定
您使*"
                                        ->"玫氖親鈽擄奼鏡模ㄉ倍救砑陌奼靖輪芷諞話閌羌"
                                        ->"甘歟*
    由於ReadBOOK的損壞嚴重*"
                                  |
:00417FA9 6888554600              push 00465588
:00417FAE 53                      push ebx

* Reference To: USER32.MessageBoxA, Ord:01BEh
                                  |
:00417FAF FF1530164500            Call dword ptr [00451630]
:00417FB5 E9E4000000              jmp 0041809E


如何繞過去呢?
向上看到,在這裡設斷點
:00417D96 E87AF5FFFF              call 00417315    ;API GetPrivateProfileStringA
......
:00417DA7 E8E45A0100              call 0042D890
:00417DAC 83C418                  add esp, 00000018
:00417DAF 85C0                    test eax, eax
:00417DB1 0F84F9020000            je 004180B0

追進00417D96
:00417315 FF3580754B00            push dword ptr [004B7580]    ;readbook.ini
:0041731B FF742414                push [esp+14]            ;10
:0041731F FF742414                push [esp+14]            ;03
:00417323 6850844600              push 00468450            ;
:00417328 FF742418                push [esp+18]            ;verify
:0041732C FF742418                push [esp+18]            ;file

* Reference To: KERNEL32.GetPrivateProfileStringA, Ord:013Ah
                                  |
:00417330 FF1568134500            Call dword ptr [00451368]

GetPrivateProfileStringA的入口引數:
?lpAppName                esp+18        
初始化檔案中section字串
?lpKeyName                esp+18        
要得到的key的字串
?lpDefault                00468450    
預設字串
?lpReturnedString            esp+14        
接收緩衝區
?nSize                    esp+14        
長度
?lpFileName                004B7580    
初始化檔名

追進00417DA7
:0042D8B0 8A06                    mov al, byte ptr [esi]    ;預定義的字串"No"
:0042D8B2 46                      inc esi
:0042D8B3 8A27                    mov ah, byte ptr [edi]    ;ini中得到的字串
:0042D8B5 47                      inc edi
:0042D8B6 38C4                    cmp ah, al
:0042D8B8 74F2                    je 0042D8AC

在readbook.ini中新增
[File]
Verify=No
就可以繞過檢驗程式是否更改,當然也可以Patch
這在程式中 檢視->配置->控制->防病毒校驗 可以設定

總結:
Patch
00417DB1 0F84F9020000            je 004180B0        ;patch病毒自檢
        E9FA02000090         jmp 4180B0

0040A112 741D                    je 0040A131        ;patch註冊失敗
        EB1D             jmp 40A131

另外,readbook v1.42與1.41大同小異,不另行說明,Patch如下:
:0040A160 3975F8                  cmp dword ptr [ebp-08], esi
:0040A163 741D                    je 0040A182(A163)
          EB1DS

:00417E53 E818620100              call 0042E070
:00417E58 83C418                  add esp, 00000018
:00417E5B 85C0                    test eax, eax
:00417E5D 0F84F9020000            je 0041815C(17E5D)
          E9FA02000090


*********************************世間本無事,庸人自擾耳************************************

相關文章