Don't Panic 3.2的破解過程(俺是新手) (3千字)

看雪資料發表於2001-05-15

在這裡,俺看了、學了很多的東東,很是精彩,很是值得學習,但是,更主要是一種精神,這才是讓我最值得學習的.
這是俺第一次寫破解過程,會有很多不對的地方,請各位多多鼓勵,多提建議!!!多謝.

軟體名稱:      Don't Panic 
軟體下載:  www.newhua.com
軟體用途:      這個東東可以讓你快速的隱藏你所開的視窗(包括工作列),並且留下你想留給外面看的內容.說簡單一點,就是以防不法活動時被擒...*_*

工具:  TRW2000 1.22 , W32dasm ,FileInfo v2.43
日期:  2000.5.14
作者:  Fengy

過程:

1)  使用 FileInfo v2.43 檢測主程式“dp.exe”,沒有殼的,好,否則,俺就不會了:)

2)  用W32dasm反編譯dp.exe,結果如下:

:00410FE0 A5                      movsd
:00410FE1 8BCA                    mov ecx, edx
:00410FE3 83E103                  and ecx, 00000003
:00410FE6 F3                      repz
:00410FE7 A4                      movsb
:00410FE8 E8F3FEFFFF              call 00410EE0
:00410FED 8BF0                    mov esi, eax
:00410FEF 56                      push esi              << ---- esi中為隨便輸入的註冊碼
:00410FF0 E8DBFDFFFF              call 00410DD0        << ---- 註冊碼驗證子程式,追入
:00410FF5 83C408                  add esp, 00000008
:00410FF8 85C0                    test eax, eax
:00410FFA 7558                    jne 00411054            << ---- 這裡就是分界點了
:00410FFC 6A10                    push 00000010

* Possible StringData Ref from Data Obj ->"Don't Panic!"
                                  |
:00410FFE 6874064200              push 00420674  <<----這裡就是輸入錯誤regcode時的提示資訊.

* Possible StringData Ref from Data Obj ->"The registration number you have "
                                        ->"entered is not valid.  Please "
                                        ->"enter a valid registration number."
                                  |
:00411003 6810224200              push 00422210
:00411008 53                      push ebx


*********************************************************
* Referenced by a CALL at Addresses:
|:00404989  , :0040BD16  , :0040BD85  , :0040CD02  , :00410FF0 
|
:00410DD0 8B442404                mov eax, dword ptr [esp+04]
:00410DD4 68D135E2E1              push E1E235D1    <<----
:00410DD9 681953C633              push 33C65319    <<----這兩個就是驗證註冊碼正確與否的引數了
:00410DDE 50                      push eax
:00410DDF E8DCFFFFFF              call 00410DC0    <<----繼續進入
:00410DE4 33D2                    xor edx, edx
:00410DE6 B9BB0B0000              mov ecx, 00000BBB 
:00410DEB F7F1                    div ecx
:00410DED 83C40C                  add esp, 0000000C
:00410DF0 8BC2                    mov eax, edx      <<----餘數 或者 說是模操作的結果
:00410DF2 F7D8                    neg eax          <<----只有eax = 0時,cf = 0
:00410DF4 1BC0                    sbb eax, eax     
:00410DF6 40                      inc eax
:00410DF7 C3                      ret



* Referenced by a CALL at Address:
|:00410DDF 
|
:00410DC0 8B442404                mov eax, dword ptr [esp+04]  <<----很是眼熟吧,就是你隨便輸入的註冊碼
:00410DC4 8B4C240C                mov ecx, dword ptr [esp+0C]  <<---- 0xE1E235D1
:00410DC8 33C1                    xor eax, ecx
:00410DCA 0FAF442408              imul eax, dword ptr [esp+08] <<-----0x33C65319
:00410DCF C3                      ret


註冊碼驗證的過程很簡單:

    (XXX xor 0xE1E235D1)*0x33C65319%0x00000BBB == 0 就可以了
                      ^^^^^^^^^^^^ (2) 
    如:xxx = 0xE1E233D8
          = 3789698008
    
3)幾點說明
    (1)在分界點直接修改jne 00411054 --->je 00411054 時,可以看到對登錄檔的操作...,註冊成功,但是,下次,還提示要求註冊,可能還可以透過修改登錄檔來實現註冊,我沒試過,誰有興趣可以試試.
   
    (2)註冊驗證中,*0x33C65319的結果的低位部分儲存在eax中,是用eax來與0x0BBB取模的.
   
    (3)算XXX的過程,我沒有研究明白,好像不能逆運算得到(請指教),因為用的是低位結果.所以,我是用C寫了個程式窮舉得到的結果.
   
    -------Fengy-------

相關文章