【破文标题】天天理财、出差理财好帮手 3.3注册算法分析
【破文作者】XXNB
【作者邮箱】
【作者主页】
【破解工具】OD
【破解平台】xpsp2
【软件名称】天天理财、出差理财好帮手 3.3
【软件大小】3005KB
【原版下载】http://www.newhua.com/soft/52835.htm
【保护方式】
【软件简介】天天理财、出差理财好帮手是一款个人理财软件,适用于日常理财、出差理财及平常一些重要项目的理财如装修理财等适用。本软件小巧精致,简单易用。
  主要功能有:收支项目设定,收入管理,支出管理,收支查询,报表生成等。理财涉及个人隐私因而本软件有密码保护功能。为了满足不同用户的喜好,本软件有四种皮肤供朋友们选择。
............
【破解声明】向大侠们学习!!!
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
1、字符串查找“您输入的cdkey和当前的机器码不匹配,您不能用这个cdkey在这台机器上使用!”,可以找到下面关键代码:
00447DD4   .  55            push    ebp
00447DD5   .  8BEC          mov     ebp, esp
00447DD7   .  83C4 B0       add     esp, -50
00447DDA   .  53            push    ebx
00447DDB   .  56            push    esi
00447DDC   .  57            push    edi
00447DDD   .  8945 B4       mov     [ebp-4C], eax
00447DE0   .  B8 E8925700   mov     eax, 005792E8
00447DE5   .  E8 82D61100   call    0056546C
00447DEA   .  66:C745 C8 08>mov     word ptr [ebp-38], 8
00447DF0   .  33D2          xor     edx, edx
00447DF2   .  8955 F8       mov     [ebp-8], edx
00447DF5   .  8D55 F8       lea     edx, [ebp-8]
00447DF8   .  FF45 D4       inc     dword ptr [ebp-2C]
00447DFB   .  8B45 B4       mov     eax, [ebp-4C]
00447DFE   .  8B80 FC020000 mov     eax, [eax+2FC]
00447E04   .  E8 239E0E00   call    00531C2C
00447E09   .  8D45 F8       lea     eax, [ebp-8]
00447E0C   .  33D2          xor     edx, edx
00447E0E   .  8955 F4       mov     [ebp-C], edx
00447E11   .  8D55 F4       lea     edx, [ebp-C]
00447E14   .  FF45 D4       inc     dword ptr [ebp-2C]
00447E17   .  E8 40781200   call    0056F65C
00447E1C   .  8D45 F4       lea     eax, [ebp-C]
00447E1F   .  8B08          mov     ecx, [eax]                       ;  假码
00447E21   .  A1 E8095800   mov     eax, [5809E8]
00447E26   .  51            push    ecx                              ; /Arg2
00447E27   .  8B10          mov     edx, [eax]                       ; |85w
00447E29   .  52            push    edx                              ; |Arg1
00447E2A   .  E8 CDA7FBFF   call    004025FC                         ; \关键Call          《----跟进
00447E2F   .  83C4 08       add     esp, 8
00447E32   .  BA 02000000   mov     edx, 2
00447E37   .  50            push    eax
00447E38   .  8D45 F4       lea     eax, [ebp-C]
00447E3B   .  FF4D D4       dec     dword ptr [ebp-2C]
00447E3E   .  E8 8D761200   call    0056F4D0
00447E43   .  FF4D D4       dec     dword ptr [ebp-2C]               ; |
00447E46   .  8D45 F8       lea     eax, [ebp-8]                     ; |
00447E49   .  BA 02000000   mov     edx, 2                           ; |
00447E4E   .  E8 7D761200   call    0056F4D0                         ; \A7Money.0056F4D0
00447E53   .  59            pop     ecx
00447E54   .  84C9          test    cl, cl
00447E56      0F84 5E010000 je      00447FBA                         ;关键跳转。
00447E5C   .  B2 01         mov     dl, 1                            
00447E5E   .  A1 E4A54C00   mov     eax, [4CA5E4]
00447E63   .  E8 7C280800   call    004CA6E4
00447E68   .  8945 B0       mov     [ebp-50], eax                    ;下面是注册成功时,写注册表信息的操作
00447E6B   .  BA 02000080   mov     edx, 80000002
00447E70   .  8B45 B0       mov     eax, [ebp-50]
00447E73   .  E8 10751200   call    0056F388
00447E78   .  66:C745 C8 14>mov     word ptr [ebp-38], 14
00447E7E   .  BA 57915700   mov     edx, 00579157                    ;  \software\xcsoft\a7money

2、跟进call    004025FC 可以找到下面关键代码:

00402635  |.  53            push    ebx                              ; /Arg2
00402636  |.  33D2          xor     edx, edx                         ; |
00402638  |.  8955 FC       mov     [ebp-4], edx                     ; |
0040263B  |.  8D4D FC       lea     ecx, [ebp-4]                     ; |
0040263E  |.  51            push    ecx                              ; |Arg1
0040263F  |.  FF46 1C       inc     dword ptr [esi+1C]               ; |
00402642  |.  E8 D5FDFFFF   call    0040241C                         ; \A7Money.0040241C
00402647  |.  66:C746 10 08>mov     word ptr [esi+10], 8
0040264D  |.  66:C746 10 20>mov     word ptr [esi+10], 20
00402653  |.  83C4 08       add     esp, 8
00402656  |.  8B45 FC       mov     eax, [ebp-4]                     ;  这里会出现机器码
00402659  |.  33D2          xor     edx, edx
0040265B  |.  8D4D F8       lea     ecx, [ebp-8]
0040265E  |.  50            push    eax
0040265F  |.  53            push    ebx
00402660  |.  8955 F8       mov     [ebp-8], edx
00402663  |.  51            push    ecx
00402664  |.  FF46 1C       inc     dword ptr [esi+1C]
00402667  |.  E8 04FCFFFF   call    00402270                         ;  上面机器码出现了,这个Call肯定要F7了。《---跟进

3、跟进call    00402270,可以找到如下关键代码:

004022CB  |.  52            push    edx                              ; /Arg3
004022CC  |.  53            push    ebx                              ; |Arg2
004022CD  |.  894D F8       mov     [ebp-8], ecx                     ; |
004022D0  |.  50            push    eax                              ; |Arg1
004022D1  |.  FF45 E8       inc     dword ptr [ebp-18]               ; |
004022D4  |.  E8 5FFEFFFF   call    00402138                         ; \A7Money.《----这里时新机器码字符串生产的算法(1)
004022D9  |.  66:C745 DC 08>mov     word ptr [ebp-24], 8
004022DF  |.  8D83 10040000 lea     eax, [ebx+410]
004022E5  |.  83C4 0C       add     esp, 0C
004022E8  |.  8338 00       cmp     dword ptr [eax], 0
004022EB  |.  74 04         je      short 004022F1
004022ED  |.  8B30          mov     esi, [eax]                       ;  固定字符串“a7moneyisoneofthesoftwareofxccnoas”
004022EF  |.  EB 05         jmp     short 004022F6                   
004022F1  |>  BE FE125700   mov     esi, 005712FE
004022F6  |>  837D F8 00    cmp     dword ptr [ebp-8], 0             ;  新的机器码字符串。由上面的call    00402138生成
004022FA  |.  74 05         je      short 00402301
004022FC  |.  8B7D F8       mov     edi, [ebp-8]                     ;  计算后得到的新字符串。
004022FF  |.  EB 05         jmp     short 00402306
00402301  |>  BF FF125700   mov     edi, 005712FF
00402306  |>  33DB          xor     ebx, ebx
00402308  |>  8A0E          /mov     cl, [esi]                       ;  cl存放的是固定字符串的第n个字符。n=1,2,...16
0040230A  |.  46            |inc     esi
0040230B  |.  66:C745 DC 08>|mov     word ptr [ebp-24], 8
00402311  |.  8A07          |mov     al, [edi]                       ;  al存放经过计算机器码后的新字符串,取16个
00402313  |.  47            |inc     edi
00402314  |.  8845 CB       |mov     [ebp-35], al
00402317  |.  0FBE55 CB     |movsx   edx, byte ptr [ebp-35]
0040231B  |.  0FBEC1        |movsx   eax, cl
0040231E  |.  03C2          |add     eax, edx                        ;  +
00402320  |.  B9 1A000000   |mov     ecx, 1A                         ;  定值1A=26
00402325  |.  99            |cdq
00402326  |.  F7F9          |idiv    ecx                             ;  两个字符的ASCII码相加的结果 除以 1A
00402328  |.  8BC2          |mov     eax, edx                        ;  得到的余数到eax
0040232A  |.  8D55 C9       |lea     edx, [ebp-37]
0040232D  |.  04 41         |add     al, 41                          ;  余数+41
0040232F  |.  8845 C9       |mov     [ebp-37], al                    ;  这个是转成字符
00402332  |.  8D45 F4       |lea     eax, [ebp-C]                    ;  以上得到的字符每四个连成一组。然后用“-”连接得到最后的注册码
00402335  |.  C645 CA 00    |mov     byte ptr [ebp-36], 0
00402339  |.  66:C745 DC 2C>|mov     word ptr [ebp-24], 2C           ;
0040233F  |.  E8 78D01600   |call    0056F3BC
00402344  |.  FF45 E8       |inc     dword ptr [ebp-18]              ;所以最后得到的真码是16个字符的类似
00402347  |.  8D55 F4       |lea     edx, [ebp-C]                    ;“RADI-DCOF-NGOF-TJBP”的字符串。
0040234A  |.  8D45 FC       |lea     eax, [ebp-4]
0040234D  |.  E8 C2D11600   |call    0056F514
00402352  |.  FF4D E8       |dec     dword ptr [ebp-18]
00402355  |.  8D45 F4       |lea     eax, [ebp-C]
00402358  |.  BA 02000000   |mov     edx, 2
0040235D  |.  E8 6ED11600   |call    0056F4D0
00402362  |.  8D4B 01       |lea     ecx, [ebx+1]
00402365  |.  81E1 03000080 |and     ecx, 80000003
0040236B  |.  79 05         |jns     short 00402372
0040236D  |.  49            |dec     ecx
0040236E  |.  83C9 FC       |or      ecx, FFFFFFFC
00402371  |.  41            |inc     ecx
00402372  |>  85C9          |test    ecx, ecx
00402374  |.  75 36         |jnz     short 004023AC
00402376  |.  83FB 0F       |cmp     ebx, 0F
00402379  |.  7D 31         |jge     short 004023AC
0040237B  |.  66:C745 DC 38>|mov     word ptr [ebp-24], 38
00402381  |.  BA 00135700   |mov     edx, 00571300                   ;  -
00402386  |.  8D45 F0       |lea     eax, [ebp-10]
00402389  |.  E8 2ED01600   |call    0056F3BC
0040238E  |.  FF45 E8       |inc     dword ptr [ebp-18]
00402391  |.  8D55 F0       |lea     edx, [ebp-10]
00402394  |.  8D45 FC       |lea     eax, [ebp-4]
00402397  |.  E8 78D11600   |call    0056F514
0040239C  |.  FF4D E8       |dec     dword ptr [ebp-18]
0040239F  |.  8D45 F0       |lea     eax, [ebp-10]
004023A2  |.  BA 02000000   |mov     edx, 2
004023A7  |.  E8 24D11600   |call    0056F4D0
004023AC  |>  43            |inc     ebx
004023AD  |.  83FB 10       |cmp     ebx, 10
004023B0  |.^ 0F8C 52FFFFFF \jl      00402308                           循环回去。
004023B6  |.  66:C745 DC 44>mov     word ptr [ebp-24], 44
004023BC  |.  8D55 FC       lea     edx, [ebp-4]
004023BF  |.  8B45 08       mov     eax, [ebp+8]
004023C2  |.  E8 39D11600   call    0056F500
004023C7  |.  8B45 08       mov     eax, [ebp+8]
004023CA  |.  BA 02000000   mov     edx, 2
004023CF  |.  66:C745 DC 50>mov     word ptr [ebp-24], 50
004023D5  |.  50            push    eax
004023D6  |.  8D45 F8       lea     eax, [ebp-8]
004023D9  |.  FF4D E8       dec     dword ptr [ebp-18]
004023DC  |.  E8 EFD01600   call    0056F4D0
004023E1  |.  FF4D E8       dec     dword ptr [ebp-18]
004023E4  |.  8D45 FC       lea     eax, [ebp-4]
004023E7  |.  BA 02000000   mov     edx, 2
004023EC  |.  E8 DFD01600   call    0056F4D0
004023F1  |.  FF4D E8       dec     dword ptr [ebp-18]               ;  真码出现了.呼呼!!《-----------



4、跟进call    00402138。这个算法(1)将通过本电脑上的机器码重新计算出新的机器码。可以得到一个循环代码:

00402195  |> /8A0E          /mov     cl, [esi]                   ; 从机器码的第n位开始取。(n=1,2,..7)。共取7位ACII码的值。
00402197  |. |0FBEC1        |movsx   eax, cl                         ;  放到eax
0040219A  |. |66:C745 E4 08>|mov     word ptr [ebp-1C], 8
004021A0  |. |8A5E 01       |mov     bl, [esi+1]                     ;  注册码第n+1位。
004021A3  |. |B9 1A000000   |mov     ecx, 1A                         ;  定值1A=26
004021A8  |. |0FBED3        |movsx   edx, bl                         ;放到edx
004021AB  |. |03C2          |add     eax, edx                        ;  注册码前一位与后一位相加。ASCII码相加
004021AD  |. |99            |cdq
004021AE  |. |F7F9          |idiv    ecx                             ;  除以定值
004021B0  |. |8BC2          |mov     eax, edx                        ;  求得的余数到eax
004021B2  |. |8BD7          |mov     edx, edi
004021B4  |. |04 41         |add     al, 41                          ;  余数+41
004021B6  |. |8807          |mov     [edi], al                       ;  转换成字符,由于上面是取7位,所以这里将产生7个字母
004021B8  |. |8D45 F8       |lea     eax, [ebp-8]
004021BB  |. |C647 01 00    |mov     byte ptr [edi+1], 0
004021BF  |. |66:C745 E4 20>|mov     word ptr [ebp-1C], 20
004021C5  |. |E8 F2D11600   |call    0056F3BC
004021CA  |. |FF45 F0       |inc     dword ptr [ebp-10]
004021CD  |. |8D55 F8       |lea     edx, [ebp-8]
004021D0  |. |8D45 FC       |lea     eax, [ebp-4]
004021D3  |. |E8 3CD31600   |call    0056F514
004021D8  |. |FF4D F0       |dec     dword ptr [ebp-10]
004021DB  |. |8D45 F8       |lea     eax, [ebp-8]
004021DE  |. |BA 02000000   |mov     edx, 2
004021E3  |. |E8 E8D21600   |call    0056F4D0                        ;  把新得到的字符与原机器码连接。得到新的机器码字符串
004021E8  |. |46            |inc     esi                             ;  计数器自加
004021E9  |> |837D FC 00     cmp     dword ptr [ebp-4], 0
004021ED  |. |74 08         |je      short 004021F7
004021EF  |. |8B4D FC       |mov     ecx, [ebp-4]
004021F2  |. |8B41 FC       |mov     eax, [ecx-4]
004021F5  |. |EB 02         |jmp     short 004021F9
004021F7  |> |33C0          |xor     eax, eax
004021F9  |> |83F8 11       |cmp     eax, 11
004021FC  |.^\7C 97         \jl      short 00402195                  ;  继续循环


其实最重要的就是第3步骤里面的通过新机器码计算真注册码。

这个注册机比较难写。不过还是要试试。

【算法总结】
------------------------------------------------------------------------
1、注册码的计算完全通过机器码算出,与您输入的假码没有关系。

2、首先通过本机自动生产的机器码,通过前后字符之间的运算得到新的机器码。

3、通过新的机器码与固定字符串“a7moneyisoneofthesoftwareofxccnoas”的相应位置的字符的运算(只运算16位)。得到16个字符。

4、16个字符分4组。通过“-”连接得到真码!

【易语言注册机源码】

.版本 2

.局部变量 n, 整数型
.局部变量 jiqima, 文本型
.局部变量 len1, 整数型
.局部变量 xinjiqima, 文本型
.局部变量 LEN2, 整数型
.局部变量 a, 整数型
.局部变量 i, 整数型
.局部变量 b, 整数型
.局部变量 guding, 文本型
.局部变量 j, 整数型
.局部变量 c, 整数型
.局部变量 d, 整数型
.局部变量 code, 文本型


i = 1
j = 1
jiqima = 编辑框1.内容
len1 = 取文本长度 (jiqima)
xinjiqima = 编辑框1.内容
LEN2 = 取文本长度 (xinjiqima)
guding = “a7moneyisoneofthesoftwareofxccnoas”

.计次循环首 (7, i)
    a = 取代码 (jiqima, i)
    b = 取代码 (jiqima, i + 1)
    a = a + b
    a = a % 26
    a = a + 65
    xinjiqima = xinjiqima + 字符 (a)
.计次循环尾 ()

.计次循环首 (16, j)
    c = 取代码 (guding, j)
    d = 取代码 (xinjiqima, j)
    c = c + d
    c = c % 26
    c = c + 65
    .如果 (j = 5 或 j = 9 或 j = 13)
        code = code + “-” + 字符 (c)
    .否则
        code = code + 字符 (c)
    .如果结束

.计次循环尾 ()
编辑框2.内容 = xinjiqima
编辑框3.内容 = code