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