吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5727|回复: 4
收起左侧

[原创] 隨便看看 Photo Slide show 注册算法分析

[复制链接]
ZeNiX 发表于 2009-5-11 15:02
隨便看看 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 [ebp-4], ecx
00420F97    837D 08 00      cmp     dword ptr [ebp+8], 0
00420F9B    7C 0D           jl      short 00420FAA
00420F9D    8B4D FC         mov     ecx, dword ptr [ebp-4]
00420FA0    E8 2BABFEFF     call    0040BAD0                 <==== Eax = 這裡取得注冊碼長度
00420FA5    3945 08         cmp     dword ptr [ebp+8], eax   <==== [ebp+8]=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 [ebp-4]
00420FB7    8B08            mov     ecx, dword ptr [eax]   <==== Ecx = 輸入注冊碼地址
00420FB9    8B55 08         mov     edx, dword ptr [ebp+8] <==== Edx = 處理過的注冊碼地址
00420FBC    8A0411          mov     al, byte ptr [ecx+edx] <==== al = 注冊碼最後一位(第8位)
00420FBF    8BE5            mov     esp, ebp
00420FC1    5D              pop     ebp
00420FC2    C2 0400         retn    4
00421C1A    E8 71F3FFFF     call    00420F90
00421C1F    8845 FB         mov     byte ptr [ebp-5], al   <=== 注冊碼第8位
00421C22    0FB655 EF       movzx   edx, byte ptr [ebp-11] <=== 比對注冊碼的第一位'0'
00421C26    0FB645 FC       movzx   eax, byte ptr [ebp-4]
00421C2A    83E8 30         sub     eax, 30                
00421C2D    3BD0            cmp     edx, eax
00421C2F    75 3C           jnz     short 00421C6D
00421C31    0FB64D F8       movzx   ecx, byte ptr [ebp-8] <=== 比對注冊碼的第二位'9'
00421C35    0FB655 FD       movzx   edx, byte ptr [ebp-3]
00421C39    83EA 30         sub     edx, 30
00421C3C    3BCA            cmp     ecx, edx
00421C3E    75 2D           jnz     short 00421C6D
00421C40    0FB645 FF       movzx   eax, byte ptr [ebp-1]<=== 比對注冊碼的第三位'5'
00421C44    0FB64D F6       movzx   ecx, byte ptr [ebp-A]
00421C48    83E9 30         sub     ecx, 30
00421C4B    3BC1            cmp     eax, ecx
00421C4D    75 1E           jnz     short 00421C6D
00421C4F    0FB655 FA       movzx   edx, byte ptr [ebp-6]<=== 比對注冊碼的第四位'7'
00421C53    0FB645 F5       movzx   eax, byte ptr [ebp-B]
00421C57    83E8 30         sub     eax, 30
00421C5A    3BD0            cmp     edx, eax
00421C5C    75 0F           jnz     short 00421C6D
00421C5E    0FB64D F4       movzx   ecx, byte ptr [ebp-C]<=== 比對注冊碼的第五位'7'
00421C62    0FB655 F9       movzx   edx, byte ptr [ebp-7]
00421C66    83EA 30         sub     edx, 30
00421C69    3BCA            cmp     ecx, edx
00421C6B    74 58           je      short 00421CC5       <=== 這裡跳到注冊成功
------ 底下是萬用注冊碼的檢查 ------
00421C6D    0FB645 FC       movzx   eax, byte ptr [ebp-4]<=== 這裡開始是萬用注冊碼的第一位'5'
00421C71    83F8 35         cmp     eax, 35
00421C74    0F85 A7000000   jnz     00421D21
00421C7A    0FB64D FD       movzx   ecx, byte ptr [ebp-3]<=== 這裡開始是萬用注冊碼的第二位'1'
00421C7E    83F9 31         cmp     ecx, 31
00421C81    0F85 9A000000   jnz     00421D21
00421C87    0FB655 F6       movzx   edx, byte ptr [ebp-A]<=== 這裡開始是萬用注冊碼的第三位'8'
00421C8B    83FA 38         cmp     edx, 38
00421C8E    0F85 8D000000   jnz     00421D21
00421C94    0FB645 F5       movzx   eax, byte ptr [ebp-B]<=== 這裡開始是萬用注冊碼的第四位'9'
00421C98    83F8 39         cmp     eax, 39
00421C9B    0F85 80000000   jnz     00421D21
00421CA1    0FB64D F9       movzx   ecx, byte ptr [ebp-7]<=== 這裡開始是萬用注冊碼的第五位'7'
00421CA5    83F9 37         cmp     ecx, 37
00421CA8    75 77           jnz     short 00421D21
00421CAA    0FB655 F7       movzx   edx, byte ptr [ebp-9]<=== 這裡開始是萬用注冊碼的第六位'6'
00421CAE    83FA 36         cmp     edx, 36
00421CB1    75 6E           jnz     short 00421D21
00421CB3    0FB645 FE       movzx   eax, byte ptr [ebp-2]<=== 這裡開始是萬用注冊碼的第七位'1'
00421CB7    83F8 31         cmp     eax, 31
00421CBA    75 65           jnz     short 00421D21
00421CBC    0FB64D FB       movzx   ecx, byte ptr [ebp-5]<=== 這裡開始是萬用注冊碼的第八位'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 [ebp-20]
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 [ebp-20]
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 [ebp-20]
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: 漢化版要注冊也是可以的.
先用原版注冊成功後, 再換成漢化版.

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

免费评分

参与人数 1威望 +1 收起 理由
iawen + 1 精品文章

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

creantan 发表于 2009-5-11 20:24
向zenix大俠學習下。。。
iawen 发表于 2009-5-11 21:41
好久没上了

大牛多了,学习的机会多了,继续学习,
热火朝天 发表于 2009-5-11 23:08
lin440w2 发表于 2009-7-3 23:47
收藏學習~~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 17:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表