ZeNiX 发表于 2009-5-11 15:02

隨便看看 Photo Slide show 注册算法分析

隨便看看 Photo Slide show 注册算法分析
【破文标题】隨便看看 Photo Slide show 注册算法分析
【破文作者】Zenix Yang
【破解工具】OllyDBG
【破解平台】Windows XP sp3
【软件名称】Photo Slide Show
【原版下载】自己找
【保护方式】注冊碼

看到 dety 發佈的這篇[本以为狠简单的算法~~尴尬(已解决 感谢ZeNiX指点)]

覺得很有趣, 有些被弄迷糊的地方, 我來解說一下.
先看幾段程序碼的說明.00420F90    55            push    ebp
00420F91    8BEC            mov   ebp, esp
00420F93    51            push    ecx
00420F94    894D FC         mov   dword ptr , ecx
00420F97    837D 08 00      cmp   dword ptr , 0
00420F9B    7C 0D         jl      short 00420FAA
00420F9D    8B4D FC         mov   ecx, dword ptr
00420FA0    E8 2BABFEFF   call    0040BAD0               <==== Eax = 這裡取得注冊碼長度
00420FA5    3945 08         cmp   dword ptr , eax   <==== =7
00420FA8    7E 0A         jle   short 00420FB4         <==== 注冊碼長度不可少於 7
00420FAA    68 57000780   push    80070057
00420FAF    E8 DC9EFEFF   call    0040AE90
00420FB4    8B45 FC         mov   eax, dword ptr
00420FB7    8B08            mov   ecx, dword ptr    <==== Ecx = 輸入注冊碼地址
00420FB9    8B55 08         mov   edx, dword ptr <==== Edx = 處理過的注冊碼地址
00420FBC    8A0411          mov   al, byte ptr <==== al = 注冊碼最後一位(第8位)
00420FBF    8BE5            mov   esp, ebp
00420FC1    5D            pop   ebp
00420FC2    C2 0400         retn    400421C1A    E8 71F3FFFF   call    00420F90
00421C1F    8845 FB         mov   byte ptr , al   <=== 注冊碼第8位
00421C22    0FB655 EF       movzx   edx, byte ptr <=== 比對注冊碼的第一位'0'
00421C26    0FB645 FC       movzx   eax, byte ptr
00421C2A    83E8 30         sub   eax, 30               
00421C2D    3BD0            cmp   edx, eax
00421C2F    75 3C         jnz   short 00421C6D
00421C31    0FB64D F8       movzx   ecx, byte ptr <=== 比對注冊碼的第二位'9'
00421C35    0FB655 FD       movzx   edx, byte ptr
00421C39    83EA 30         sub   edx, 30
00421C3C    3BCA            cmp   ecx, edx
00421C3E    75 2D         jnz   short 00421C6D
00421C40    0FB645 FF       movzx   eax, byte ptr <=== 比對注冊碼的第三位'5'
00421C44    0FB64D F6       movzx   ecx, byte ptr
00421C48    83E9 30         sub   ecx, 30
00421C4B    3BC1            cmp   eax, ecx
00421C4D    75 1E         jnz   short 00421C6D
00421C4F    0FB655 FA       movzx   edx, byte ptr <=== 比對注冊碼的第四位'7'
00421C53    0FB645 F5       movzx   eax, byte ptr
00421C57    83E8 30         sub   eax, 30
00421C5A    3BD0            cmp   edx, eax
00421C5C    75 0F         jnz   short 00421C6D
00421C5E    0FB64D F4       movzx   ecx, byte ptr <=== 比對注冊碼的第五位'7'
00421C62    0FB655 F9       movzx   edx, byte ptr
00421C66    83EA 30         sub   edx, 30
00421C69    3BCA            cmp   ecx, edx
00421C6B    74 58         je      short 00421CC5       <=== 這裡跳到注冊成功------ 底下是萬用注冊碼的檢查 ------00421C6D    0FB645 FC       movzx   eax, byte ptr <=== 這裡開始是萬用注冊碼的第一位'5'
00421C71    83F8 35         cmp   eax, 35
00421C74    0F85 A7000000   jnz   00421D21
00421C7A    0FB64D FD       movzx   ecx, byte ptr <=== 這裡開始是萬用注冊碼的第二位'1'
00421C7E    83F9 31         cmp   ecx, 31
00421C81    0F85 9A000000   jnz   00421D21
00421C87    0FB655 F6       movzx   edx, byte ptr <=== 這裡開始是萬用注冊碼的第三位'8'
00421C8B    83FA 38         cmp   edx, 38
00421C8E    0F85 8D000000   jnz   00421D21
00421C94    0FB645 F5       movzx   eax, byte ptr <=== 這裡開始是萬用注冊碼的第四位'9'
00421C98    83F8 39         cmp   eax, 39
00421C9B    0F85 80000000   jnz   00421D21
00421CA1    0FB64D F9       movzx   ecx, byte ptr <=== 這裡開始是萬用注冊碼的第五位'7'
00421CA5    83F9 37         cmp   ecx, 37
00421CA8    75 77         jnz   short 00421D21
00421CAA    0FB655 F7       movzx   edx, byte ptr <=== 這裡開始是萬用注冊碼的第六位'6'
00421CAE    83FA 36         cmp   edx, 36
00421CB1    75 6E         jnz   short 00421D21
00421CB3    0FB645 FE       movzx   eax, byte ptr <=== 這裡開始是萬用注冊碼的第七位'1'
00421CB7    83F8 31         cmp   eax, 31
00421CBA    75 65         jnz   short 00421D21
00421CBC    0FB64D FB       movzx   ecx, byte ptr <=== 這裡開始是萬用注冊碼的第八位'8'
00421CC0    83F9 38         cmp   ecx, 38
00421CC3    75 5C         jnz   short 00421D21
00421CC5    6A 00         push    0
00421CC7    6A 00         push    0
00421CC9    68 FCAC4500   push    0045ACFC
00421CCE    E8 D8AB0200   call    0044C8AB
00421CD3    8B4D E0         mov   ecx, dword ptr
00421CD6    83C1 70         add   ecx, 70
00421CD9    E8 323AFFFF   call    00415710
00421CDE    50            push    eax
00421CDF    68 18AD4500   push    0045AD18                         ; ASCII "username"
00421CE4    68 24AD4500   push    0045AD24                         ; ASCII "Option"
00421CE9    E8 B239FFFF   call    004156A0
00421CEE    8BC8            mov   ecx, eax
00421CF0    E8 16A90200   call    0044C60B
00421CF5    8B4D E0         mov   ecx, dword ptr
00421CF8    83C1 74         add   ecx, 74
00421CFB    E8 103AFFFF   call    00415710
00421D00    50            push    eax
00421D01    68 2CAD4500   push    0045AD2C                         ; ASCII "registration_code"
00421D06    68 40AD4500   push    0045AD40                         ; ASCII "Option"
00421D0B    E8 9039FFFF   call    004156A0
00421D10    8BC8            mov   ecx, eax
00421D12    E8 F4A80200   call    0044C60B
00421D17    8B4D E0         mov   ecx, dword ptr
00421D1A    E8 F34E0200   call    00446C12
00421D1F    EB 0E         jmp   short 00421D2F
00421D21    6A 00         push    0
00421D23    6A 00         push    0
00421D25    68 48AD4500   push    0045AD48
00421D2A    E8 7CAB0200   call    0044C8AB
00421D2F    8BE5            mov   esp, ebp
00421D31    5D            pop   ebp
00421D32    C3            retn因為程序中文化之後, 又被加了殼.
所以我們也懶得去脫, 直接 OD 加載, 帶殼分析吧!

首先我們輸入
UserName         : Zenix Yang
Registration Code: 1234567890ABCDEF

跑看看.

--=[專用注冊碼產生]=--

跟蹤之後發現, 前半段是根據 UserName 算出來的注冊做比對.
一直到 00421C6B 就比對完成, 所以它只比對前 5 個字

而根據 00420FA8 的要求, 注冊碼需要大於 7 位.
所以我們得出正確注冊碼如下:
UserName         : Zenix Yang
Registration Code: 09577###
其中 ### 為任意字母或數字都可以

--=[萬用注冊碼產生]=--
從 00421C6D 開始, 程序檢查萬用注冊碼.
而這個注冊碼, 是和我們所輸入的 UserName 沒有關係的.
從這裡我們得出另一種正確的注冊碼.
UserName         : 任意名字
Registration Code: 51897618

--=[直接爆破法]=--
這個就很多了,
你把上面的那些 jnz 全 Nop 掉,
或是直接在一開始 00421C1F 就直接跳轉到 421CC5
或是... 其它你能想到的.

但是~~~ 提示注冊成功之後, 再進一次程序, 又提示注冊了.
對嗎?
這個就留給朋友們自己去玩了.

吃飯時間到了, 準備約會去~~~
下次再見.

PS.
研究出來的,
本以為上面是黑名單的比對.

後來發現其實不是這個樣子的.
你那個漢化版, 不管是否注冊成, 都不會保存注冊信息到登錄文件裡.

你可以重新下載原版來試看看.

hxxp://www.321slideshow.com

PS-2.



Ask: 看来是汉化的问题。导致不能注册完全。

Q: 漢化版要注冊也是可以的.
先用原版注冊成功後, 再換成漢化版.

又或者, 拿注冊好的登錄文件, 自己導入.

creantan 发表于 2009-5-11 20:24

向zenix大俠學習下。。。

iawen 发表于 2009-5-11 21:41

好久没上了

大牛多了,学习的机会多了,继续学习,:lol

热火朝天 发表于 2009-5-11 23:08

学习了,很详细的分析

lin440w2 发表于 2009-7-3 23:47

收藏學習~~
页: [1]
查看完整版本: 隨便看看 Photo Slide show 注册算法分析