psde_demo_mj V1.4破解+演算法分析
呵呵,看完前一篇了嗎?來,第二篇
【破解作者】 WXHing
【作者郵箱】 WXHing@163.com
【使用工具】 OllyDbg1.09
【破解平臺】 Win9x/NT/2000/XP
【軟體名稱】 psde_demo_mj V1.4
【下載地址】 中國共享軟體註冊中心
【軟體簡介】 這個是一個用來演示如何用PSDE製作視窗遊戲的軟體,起本身就是一個小遊戲,挺有意思的。
【軟體大小】 272Kb
【加殼方式】 註冊碼保護
【破解宣告】 初學破解,妄談破解,不當之處還請各位前輩指教!
--------------------------------------------------------------------------------
【破解內容】
首先用OLLYDBG裝載程式,F9執行,
輸入使用者名稱 WXHing
試練碼 987654321
然後下斷點 bp GetDlgItem,確定,攔住,按F8直到這裡
00402E76 . FFD3 call ebx ; \SendDlgItemMessageA ;eax返回使用者名稱長度
00402E78 . 8B15 7C974000 mov edx, dword ptr ds:[40977C] ;從這裡出來
00402E7E . 52 push edx ; /lParam => 12FA14
00402E7F . 6A 10 push 10 ; |wParam = 10
00402E81 . 6A 0D push 0D ; |Message = WM_GETTEXT
00402E83 . 68 E9030000 push 3E9 ; |ControlID = 3E9 (1001.)
00402E88 . 55 push ebp ; |hWnd
00402E89 . FFD3 call ebx ; \SendDlgItemMessageA
00402E8B . A1 88974000 mov eax, dword ptr ds:[409788] ;獲得使用者名稱,eax返回
00402E90 . 8038 00 cmp byte ptr ds:[eax], 0 ;使用者名稱為空則出錯
00402E93 . 0F84 38010000 je PSDE_DEM.00402FD1
00402E99 . 8B0D 7C974000 mov ecx, dword ptr ds:[40977C] ;ecx指向試練碼
00402E9F . 8039 00 cmp byte ptr ds:[ecx], 0 ;沒輸入則出錯
00402EA2 . 0F84 29010000 je PSDE_DEM.00402FD1
00402EA8 . 50 push eax ;使用者名稱入棧
00402EA9 . E8 22FEFFFF call PSDE_DEM.00402CD0 ;關鍵,跟進
00402EAE . 8B3D 7C974000 mov edi, dword ptr ds:[40977C] ;edi指向試練碼
00402EB4 . A1 88974000 mov eax, dword ptr ds:[409788] ;eax為真正的註冊碼
00402EB9 . 83C4 04 add esp, 4
00402EBC . 8BF7 mov esi, edi
00402EBE > 8A10 mov dl, byte ptr ds:[eax]
00402EC0 . 8ACA mov cl, dl
00402EC2 . 3A16 cmp dl, byte ptr ds:[esi] ;逐位比較註冊碼是否正確
00402EC4 . 75 1C jnz short PSDE_DEM.00402EE2 ;不等則出錯
00402EC6 . 84C9 test cl, cl
00402EC8 . 74 14 je short PSDE_DEM.00402EDE
00402ECA . 8A50 01 mov dl, byte ptr ds:[eax+1]
00402ECD . 8ACA mov cl, dl
00402ECF . 3A56 01 cmp dl, byte ptr ds:[esi+1]
00402ED2 . 75 0E jnz short PSDE_DEM.00402EE2 ;不等則出錯
00402ED4 . 83C0 02 add eax, 2
00402ED7 . 83C6 02 add esi, 2
00402EDA . 84C9 test cl, cl
00402EDC .^ 75 E0 jnz short PSDE_DEM.00402EBE
00402EDE > 33C0 xor eax, eax
00402EE0 . EB 05 jmp short PSDE_DEM.00402EE7
00402EE2 > 1BC0 sbb eax, eax
00402EE4 . 83D8 FF sbb eax, -1
00402EE7 > 85C0 test eax, eax
00402EE9 . 0F84 8D000000 je PSDE_DEM.00402F7C
..............
..............
進入402EA9處的call,
00402CD0 /$ 53 push ebx ;來到這裡
00402CD1 |. 56 push esi
00402CD2 |. 57 push edi
00402CD3 |. 8B7C24 10 mov edi, dword ptr ss:[esp+10] ;edi指向使用者名稱
00402CD7 |. 32DB xor bl, bl ;bl清零
00402CD9 |. 8BCF mov ecx, edi ;ecx=edi
00402CDB |. 8A07 mov al, byte ptr ds:[edi] ;al取使用者名稱字元
00402CDD |. 84C0 test al, al ;等於0嗎
00402CDF |. 74 0A je short PSDE_DEM.00402CEB ;為零則跳走
00402CE1 |> 02D8 /add bl, al ;bl=bl+al
00402CE3 |. 8A41 01 |mov al, byte ptr ds:[ecx+1] ;al指向下一字元
00402CE6 |. 41 |inc ecx ;ecx指向下一字元
00402CE7 |. 84C0 |test al, al ;取完了嗎
00402CE9 |.^ 75 F6 \jnz short PSDE_DEM.00402CE1 ;沒有則繼續
00402CEB |> A1 78974000 mov eax, dword ptr ds:[409778]
00402CF0 |. 33F6 xor esi, esi
00402CF2 |. A3 84974000 mov dword ptr ds:[409784], eax
00402CF7 |. A1 74974000 mov eax, dword ptr ds:[409774]
00402CFC |. 85C0 test eax, eax
00402CFE |. 7E 2D jle short PSDE_DEM.00402D2D
00402D00 |> 8A0C3E /mov cl, byte ptr ds:[esi+edi] ;取使用者名稱字元
00402D03 |. 32CB |xor cl, bl ;cl與bl異或,存入cl,bl為使用者名稱字元16進位制和低位元組
00402D05 |. 51 |push ecx ;ecx入棧
00402D06 |. E8 95FFFFFF |call PSDE_DEM.00402CA0 ;關鍵,跟進
00402D0B |. 83C4 04 |add esp, 4
00402D0E |. 88043E |mov byte ptr ds:[esi+edi], al
00402D11 |. 3C 0A |cmp al, 0A ;al>=0A嗎
00402D13 |. 0FBEC0 |movsx eax, al ;擴充套件存入eax
00402D16 |. 7D 05 |jge short PSDE_DEM.00402D1D ;大於等於則跳
00402D18 |. 83C0 30 |add eax, 30 ;eax=eax+30
00402D1B |. EB 03 |jmp short PSDE_DEM.00402D20
00402D1D |> 83C0 41 |add eax, 41 ;eax=eax+41
00402D20 |> 88043E |mov byte ptr ds:[esi+edi], al ;計算結果返回並存入edi指向的地址,esi為計數器
00402D23 |. A1 74974000 |mov eax, dword ptr ds:[409774] ;eax=8
00402D28 |. 46 |inc esi ;esi=esi+1
00402D29 |. 3BF0 |cmp esi, eax ;esi>8嗎?
00402D2B |.^ 7C D3 \jl short PSDE_DEM.00402D00 ;小於則繼續
00402D2D |> C60438 00 mov byte ptr ds:[eax+edi], 0
00402D31 |. 5F pop edi
00402D32 |. 5E pop esi
00402D33 |. 5B pop ebx
00402D34 \. C3 retn
進入402D06處的call,
00402CA0 /$ 0FBE4424 04 movsx eax, byte ptr ss:[esp+4] ;eax等於使用者名稱字元與使用者名稱字元和的異或值
00402CA5 |. 0305 84974000 add eax, dword ptr ds:[409784] ;eax=eax+989681 ,[409784]初始值為0x989881
00402CAB |. 69C0 697DAE42 imul eax, eax, 42AE7D69 ;eax等於eax*42ae7d69的低八位
00402CB1 |. 05 31D40000 add eax, 0D431 ;eax=eax+0d431
00402CB6 |. A3 84974000 mov dword ptr ds:[409784], eax ;eax計算後的值存入[409784],下次迴圈時呼叫
00402CBB |. C1F8 10 sar eax, 10 ;eax右移4位
00402CBE |. 83E0 0F and eax, 0F ;eax=eax AND 0F
00402CC1 \. C3 retn
以我的名字WXHing為例,字元16進位制和為57+58+48+69+6E+67=235,取低2位為35,
第一字元‘W’的變換
eax=57 xor 35 =62,
eax=62+[409784]=62+989681=9896E3
eax=9896E3*42AE7D69=27BEE7D48CBA1B,取低八位為D48CBA1B
eax=D48CBA1B+0D431=D48D8E4C , [409784]=D48D8E4C
eax=D48D8E4C SAR 10=D48D
eax=D48D AND 0F=0D > 0A
所以eax=0D+41=4E, 轉換為字元是'N'
'X'的變換
eax=58 xor 35 =6D,
eax=6D+[409784]=62+D48D8E4C=D48D8EB9
eax=D48D8EB9*42AE7D69=375D5F23007DDEE1,取低八位為007DDEE1
eax=007DDEE1+0D431=007EB312 , [409784]=007EB312
eax=007EB312 SAR 10=007E
eax=007E AND 0F=0E > 0A
所以eax=0D+41=4E, 轉換為字元是'O'
'H'的變換
eax=48 xor 35 =7D,
eax=7D+[409784]=7D+007EB312=7EB38F
eax=7EB38F*42AE7D69=2100A6FAD678A7,取低八位為FAD678A7
eax=FAD678A7+0D431=FAD74CD8 , [409784]=FAD74CD8
eax=FAD74CD8 SAR 10=FAD7
eax=FAD7 AND 0F=07 < 0A
所以eax=0D+30=37, 轉換為字元是'7'
在向下我就不分析了,‘i’,‘n’,‘g’,分別轉換為‘9’‘6’‘6’,
因為註冊碼為8個字元,而使用者名稱‘WXHing’只有6個,所以要補上二個0,分別轉換為‘N’‘8’
將以上字元連在一起就是註冊碼‘NO7966N8’
收工!
--------------------------------------------------------------------------------
【破解總結】
這個軟體的保護很脆弱,還是採用明碼保護的,但是我主要是為了研究它的演算法,所以才羅裡羅嗦的寫了那麼一大篇。
最後還是非常非常的感謝您看完本文!
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
相關文章
- [原創]破解-分析Crackme演算法2009-06-13演算法
- HTMLock 1.9.3破解手記---演算法分析2003-06-27HTML演算法
- CHM瀏覽器破解+演算法分析2004-06-04瀏覽器演算法
- IEPopupKiller 1.2破解手記--演算法分析2015-11-15演算法
- QuickCD 1.0.320破解手記--演算法分析2015-11-15UI演算法
- GreenBrowser 1.0.312破解手記--演算法分析2015-11-15演算法
- Golden 5.7 Build 391破解手記--演算法分析2015-11-15GoUI演算法
- 拱豬大戰 1.8破解手記--演算法分析2015-11-15演算法
- Setup2Go 1.97破解手記--演算法分析2015-11-15Go演算法
- powerarchiver 8.00.58 之不完全破解+簡單演算法分析2015-11-15Hive演算法
- 簡單演算法---A Speeder
V2.5破解的簡要分析!2015-11-15演算法
- What's new of dubbogo v1.42020-03-26Go
- pcmedik V5.4.8.2003破解手記--演算法分析2003-05-10演算法
- 極速傳真[SpeedFax] 2.4 破解手記--程式逆向分析演算法2015-11-15演算法
- Advanced MP3WMA Recorder 3.7.3破解手記--完美演算法分析2015-11-15演算法
- 法律文書、合同樣本庫
5.10破解手記--演算法分析2015-11-15演算法
- MySQL Manager 2.8.0.1脫殼破解手記破解分析2004-11-03MySql
- Iparmor 木馬克星 V5.40 Build 0414破解手記-演算法分析2015-11-15UI演算法
- SSL/TLS部署最佳實踐v1.42015-07-31TLS
- ePublisher Gold v1.4 (9千字)2001-01-15Go
- 菜鳥破解錄自之 Dialup Constructor 及演算法分析
(6千字)2000-09-11Struct演算法
- Readbook v1.4破解實戰(天意II+W32dasm破解並用crackcode2000來寫序號產生器)
(3千字)2000-09-09ASM
- API Spy for NT v1.4 (16千字)2000-10-25API
- 菜鳥破解錄之 GIF Construction Set Pro及演算法分析
(8千字)2000-09-01Struct演算法
- 奇門遁甲演義V6.3破解手記--註冊碼演算法分析2015-11-15演算法
- Access Animation破解的簡要分析2003-05-10
- 用ollydbg破解就是爽,貼出超級屏捕的破解過程和演算法分析,請大家多多指教!! (15千字)2001-12-20演算法
- 破解 密碼監聽器 v1.4 註冊碼,順便向BCG組織的各位兄弟問好! (12千字)2001-10-25密碼
- 《飛天餐飲娛樂管理系統》註冊碼演算法分析以及暴力破解2000-12-10演算法
- SWF2Video Pro V1.0.1.2 完全破解 演算法分析+序號產生器2015-11-15IDE演算法
- Hasher for Mac(雜湊值生成器)v1.42021-12-04Mac
- 用olldbg破解,分析ocx控制元件2004-06-23LLDB控制元件
- 網路填表終結者破解分析2003-06-17
- 演算法分析2024-10-09演算法
- 破解 YouTube 的視訊推薦演算法2016-11-28演算法
- 如何破解YouTube視訊推薦演算法2016-07-31演算法
- 機械設計系統1.0破解實錄------------演算法簡單,破解過程一2015-11-15演算法
- 恆訊科技分析:是否有可能破解 SSL?2021-12-27