18:10 2005-3-28
软件名称:天天日记本2.1.1
下载地址:http://tianyu717.yeah.net/(作者的家)
破解工具:Peid,Aspackdie,Olydbg1.1正式版,计算器,DeDe3.5
破解作者:wofan[OCN]
说明一点,软件脱壳后就不能保存日记了,也不能选择日期,日期定格在2003年,所以网上流传的那个补丁是没有用的!
wofan[OCN]的声明:
本人喜欢破解,但从来就无意侵害作者权益。加入破解组织,只是想看别人的好贴,发表烂贴,只是为了积分!

禁止依据本文制作并发放注册算号器!

先用Peid查一下,发现Aspack2.12
用Aspackdie轻松脱之,这个壳,手脱也很容易!
再扫描,发现Delphi6-7,原来的Delphi制作的!

先建一个用户,就:wofan 吧。

启动DeDe3.5
在“过程”中居然可以找到RegUnit!!单击它,见到:
OKSpeedButtonClick                我估计就是这个按钮值钱了!双击它,见到下面的代码:
省略一部分

* Reference to control TRegForm.Edit1 : TEdit                       第一个注册框
|
0055D4CD   8B8308030000           mov     eax, [ebx+$0308]

* Reference to: Controls.TControl.GetText(TControl):TCaption;
|
0055D4D3   E8A84CF2FF             call    00482180                           在这里下断看全过程!!!!
0055D4D8   8B55E8                 mov     edx, [ebp-$18]
0055D4DB   8D4DEC                 lea     ecx, [ebp-$14]
0055D4DE   8BC3                   mov     eax, ebx

|
0055D4E0   E88B050000             call    0055DA70
0055D4E5   8B55EC                 mov     edx, [ebp-$14]
0055D4E8   8D4DF0                 lea     ecx, [ebp-$10]
0055D4EB   8BC3                   mov     eax, ebx

* Reference to : TRegForm._PROC_0055DB38()
|
0055D4ED   E846060000             call    0055DB38
0055D4F2   8B45F0                 mov     eax, [ebp-$10]
0055D4F5   B903000000             mov     ecx, $00000003
0055D4FA   BA04000000             mov     edx, $00000004

* Reference to: System.@LStrCopy;                                       字串Copy
|
0055D4FF   E87474EAFF             call    00404978
0055D504   8D45F8                 lea     eax, [ebp-$08]
0055D507   50                     push    eax
0055D508   8D55DC                 lea     edx, [ebp-$24]

* Reference to control TRegForm.Edit2 : TEdit                          第二个注册框
省略大部分


OD载入
填入假注册码~`!1QqA-1234567-7654321

不禁要问,第一个框中为什么填这么些个字符呀,因为我已经跟踪过了,发现一个长长的字串:
~`!1QqAaZz@2WwSsXx#3EeDdCc$4RrFfVv%5TtGgBb^6YyHhNn&7UuJjMm*8IiKk<,(9OoLl>.)0Pp:;?/_-{["+=}]|\  长度为&H5D

本软件的注册与这个有很多联系!!
我且命名为code吧,以后所有叫code的就指它啦!
我现在为了便于整理,才这么做的!

0055D4D3   |.  E8 A84CF2FF       call unpacked.00482180               ×××在这里下断看到全过程,这个Call取得第一个注册框的注册码~`!1QqA
0055D4D8   |.  8B55 E8           mov edx,dword ptr ss:[ebp-18]        ×××它的首地址放在EDX中
0055D4DB   |.  8D4D EC           lea ecx,dword ptr ss:[ebp-14]
0055D4DE   |.  8BC3              mov eax,ebx
0055D4E0   |.  E8 8B050000       call unpacked.0055DA70               ×××这个Call 1按F7跟进去看到对它的处理~`!1QqA变成\|]}=+"
0055D4E5   |.  8B55 EC           mov edx,dword ptr ss:[ebp-14]        ×××把\|]}=+"放在EDX吧,我们还要对它进行处理
0055D4E8   |.  8D4D F0           lea ecx,dword ptr ss:[ebp-10]
0055D4EB   |.  8BC3              mov eax,ebx
0055D4ED   |.  E8 46060000       call unpacked.0055DB38               ×××这个Call 2按F7跟进去,又要进行处理了!我们得到R|\|<*#"  称为字串1
0055D4F2   |.  8B45 F0           mov eax,dword ptr ss:[ebp-10]
0055D4F5   |.  B9 03000000       mov ecx,3
0055D4FA   |.  BA 04000000       mov edx,4
0055D4FF   |.  E8 7474EAFF       call unpacked.00404978
0055D504   |.  8D45 F8           lea eax,dword ptr ss:[ebp-8]
0055D507   |.  50                push eax
0055D508   |.  8D55 DC           lea edx,dword ptr ss:[ebp-24]
0055D50B   |.  8B83 14030000     mov eax,dword ptr ds:[ebx+314]
0055D511   |.  E8 6A4CF2FF       call unpacked.00482180              ××××取得第二注册框中的注册码1234567
0055D516   |.  8B55 DC           mov edx,dword ptr ss:[ebp-24]
0055D519   |.  8D4D E0           lea ecx,dword ptr ss:[ebp-20]
0055D51C   |.  8BC3              mov eax,ebx
0055D51E   |.  E8 4D050000       call unpacked.0055DA70             ××××召唤同一个Call处理它,得到}/.,mnb
0055D523   |.  8B55 E0           mov edx,dword ptr ss:[ebp-20]
0055D526   |.  8D4D E4           lea ecx,dword ptr ss:[ebp-1C]
0055D529   |.  8BC3              mov eax,ebx
0055D52B   |.  E8 08060000       call unpacked.0055DB38             ×××召唤同一个Call处理它得到s//-loc  称为字串2
0055D530   |.  8B45 E4           mov eax,dword ptr ss:[ebp-1C]
0055D533   |.  B9 03000000       mov ecx,3
0055D538   |.  BA 04000000       mov edx,4
0055D53D   |.  E8 3674EAFF       call unpacked.00404978
0055D542   |.  8D45 F4           lea eax,dword ptr ss:[ebp-C]
0055D545   |.  50                push eax
0055D546   |.  8D55 D0           lea edx,dword ptr ss:[ebp-30]
0055D549   |.  8B83 18030000     mov eax,dword ptr ds:[ebx+318]
0055D54F   |.  E8 2C4CF2FF       call unpacked.00482180              ××××取得第三个注册框中的注册码7654321
0055D554   |.  8B55 D0           mov edx,dword ptr ss:[ebp-30]
0055D557   |.  8D4D D4           lea ecx,dword ptr ss:[ebp-2C]
0055D55A   |.  8BC3              mov eax,ebx
0055D55C   |.  E8 0F050000       call unpacked.0055DA70              ×××同一Call得到bnm,./
0055D561   |.  8B55 D4           mov edx,dword ptr ss:[ebp-2C]
0055D564   |.  8D4D D8           lea ecx,dword ptr ss:[ebp-28]
0055D567   |.  8BC3              mov eax,ebx
0055D569   |.  E8 CA050000       call unpacked.0055DB38              ×××同一Call得到lnl-/.| 称为字串3
0055D56E   |.  8B45 D8           mov eax,dword ptr ss:[ebp-28]
0055D571   |.  B9 09000000       mov ecx,9
0055D576   |.  BA 03000000       mov edx,3
0055D57B   |.  E8 F873EAFF       call unpacked.00404978
0055D580   |.  837D FC 00        cmp dword ptr ss:[ebp-4],0
0055D584   |.  0F84 EC000000     je unpacked.0055D676
0055D58A   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D58F   |.  8B00              mov eax,dword ptr ds:[eax]
0055D591   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D594   |.  E8 BB0EF6FF       call unpacked.004BE454
0055D599   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D59E   |.  8B00              mov eax,dword ptr ds:[eax]
0055D5A0   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D5A3   |.  E8 7C36F6FF       call unpacked.004C0C24                ××××在这里从字串中取字串
0055D5A8   |.  FF75 FC           push dword ptr ss:[ebp-4]            ×××字串1中从第四个开始取3个字符,取得 |<*  压栈     
0055D5AB   |.  FF75 F8           push dword ptr ss:[ebp-8]            ×××字串2中从第四个开始取3个字符,取得-lo   压栈
0055D5AE   |.  FF75 F4           push dword ptr ss:[ebp-C]            ×××字串3中从第三个起取到末尾,取得l-/.|    压栈
0055D5B1   |.  8D45 C8           lea eax,dword ptr ss:[ebp-38]
0055D5B4   |.  BA 03000000       mov edx,3
0055D5B9   |.  E8 1A72EAFF       call unpacked.004047D8                   将它们依次弹出,连接起来,
0055D5BE   |.  8B55 C8           mov edx,dword ptr ss:[ebp-38]
****************************************************
Stack ss:[0012FBC8]=00F0468C, (ASCII "|<*-lol-/.|")
edx=00000003
*****************************************************
0055D5C1   |.  8D4D CC           lea ecx,dword ptr ss:[ebp-34]
0055D5C4   |.  8BC3              mov eax,ebx
0055D5C6   |.  E8 6D050000       call unpacked.0055DB38                  要制作注册机,这是个陷阱Call,这个Call是多次出现的,将|<*-lol-/.|处理成r<+,mnm,%$|
*******************************************************
Stack ss:[0012FBCC]=00F046A4, (ASCII "r<+,mnm,%$|")
eax=0012FBAC
********************************************************
0055D5CB   |.  8B45 CC           mov eax,dword ptr ss:[ebp-34]
0055D5CE   |.  50                push eax
0055D5CF   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D5D4   |.  8B00              mov eax,dword ptr ds:[eax]
0055D5D6   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D5D9   |.  BA E4D65500       mov edx,unpacked.0055D6E4          ;  ASCII "regdata"    把它保存到以.cty为后缀的文件中,文件名就是,我们注册的用户名
0055D5DE   |.  E8 811EF6FF       call unpacked.004BF464
省略大部分,因为这里并没有发生比较,我在这里跟了很久,就是找不到如何比较呀,软件不管注册正确与否,就是没有提示!
在调试器中查看字串,自然找不到那些叫人心动的“注册成功”之类。未注册却有60次的限制,这就是机会!
引出第二篇,请看第二篇!
0055D6CF   \.  C3                retn

×××××××××××××这个Call 1按F7跟进去看到对它的处理×××××××××××××


0055DA70   /$  55                push ebp
省略大部分
0055DAAC   |.  BE 01000000       mov esi,1                         ESI=1(以后也会自加1)
0055DAB1   |.  3B75 F4           cmp esi,dword ptr ss:[ebp-C]
0055DAB4   |.  7F 50             jg short unpacked.0055DB06
0055DAB6   |>  BB 01000000       /mov ebx,1                         开始EBX=1这是基数,(以后它就自加1)
0055DABB   |.  EB 01             |jmp short unpacked.0055DABE       直接跳到0055DABE
0055DABD   |>  43                |/inc ebx                          EBX自加1
0055DABE   |>  A1 446D5600       | mov eax,dword ptr ds:[566D44]    code(就是那个长字串!)的首地址放在EAX
0055DAC3   |.  8A4418 FF         ||mov al,byte ptr ds:[eax+ebx-1]    eax+ebx-1     遂个送到AL 
0055DAC7   |.  8B55 FC           ||mov edx,dword ptr ss:[ebp-4]      我们的假码字串的首地址放在EDX
0055DACA   |.  3A4432 FF         ||cmp al,byte ptr ds:[edx+esi-1]    edx+esi-1    也就是说,逐个与AL相比  
0055DACE   |.  74 04             ||je short unpacked.0055DAD4        如果不相等就再循环,这里实际上就是在VB中的InStr(code, cod1)函数,返回一个某字符在一长字串中的位置!
0055DAD0   |.  3BFB              ||cmp edi,ebx
0055DAD2   |.^ 7D E9             |\jge short unpacked.0055DABD
0055DAD4   |>  3BFB              |cmp edi,ebx
0055DAD6   |.  7D 0F             |jge short unpacked.0055DAE7
0055DAD8   |.  8D45 FC           |lea eax,dword ptr ss:[ebp-4]
0055DADB   |.  E8 906EEAFF       |call unpacked.00404970
0055DAE0   |.  C64430 FF 2A      |mov byte ptr ds:[eax+esi-1],2A
0055DAE5   |.  EB 19             |jmp short unpacked.0055DB00
0055DAE7   |>  8D45 FC           |lea eax,dword ptr ss:[ebp-4]
0055DAEA   |.  E8 816EEAFF       |call unpacked.00404970
0055DAEF   |.  8BD7              |mov edx,edi                        EDX=EDI=&H5D(长字串code的长度)
0055DAF1   |.  2BD3              |sub edx,ebx                        EBX就是上面返回的,我们的注册码在长字串中的位置,这下知道我为什么用那么怪的字符作注册码了吧
0055DAF3   |.  8B0D 446D5600     |mov ecx,dword ptr ds:[566D44]      长字串code首地址送ECX     ;  unpacked.0055D43C
0055DAF9   |.  8A1411            |mov dl,byte ptr ds:[ecx+edx]        我们的注册码第一位是~,在长字串code中排在第一位,那5D-1就指向了最后一位\
0055DAFC   |.  885430 FF         |mov byte ptr ds:[eax+esi-1],dl      把我们的第一位注册码变换后从~变成\,保存吧
0055DB00   |>  46                |inc esi
0055DB01   |.  3B75 F4           |cmp esi,dword ptr ss:[ebp-C]
0055DB04   |.^ 7E B0             \jle short unpacked.0055DAB6

经过这里 ~`!1QqA 就变成了\|]}=+"  倒过来了吧!


××××××××××××××××这个Call 2按F7跟进去,又要进行处理了!××××××××××××
0055DB38   /$  55                push ebp
省略
0055DB70   |.  BB 01000000       mov ebx,1
0055DB75   |>  8B45 FC           /mov eax,dword ptr ss:[ebp-4]
0055DB78   |.  8A4418 FF         |mov al,byte ptr ds:[eax+ebx-1]       \|]}=+" 逐个送AL
0055DB7C   |.  24 0F             |and al,0F                           第一个\的ASCII码是5C   AL and &H0F 取得C
0055DB7E   |.  8B15 446D5600     |mov edx,dword ptr ds:[566D44]                      ;  unpacked.0055D43C
0055DB84   |.  8A5432 FF         |mov dl,byte ptr ds:[edx+esi-1]      长字串依次送DL,第一个是~,它的ASCII是7E
0055DB88   |.  80E2 0F           |and dl,0F                           也取它的低四位,E
0055DB8B   |.  32C2              |xor al,dl                           Xor一下,C xor E=2
0055DB8D   |.  8845 F7           |mov byte ptr ss:[ebp-9],al           把它保存一下
0055DB90   |.  8D45 FC           |lea eax,dword ptr ss:[ebp-4]
0055DB93   |.  E8 D86DEAFF       |call unpacked.00404970
0055DB98   |.  8B55 FC           |mov edx,dword ptr ss:[ebp-4]
0055DB9B   |.  8A541A FF         |mov dl,byte ptr ds:[edx+ebx-1]       还是把5C送到DL
0055DB9F   |.  80E2 F0           |and dl,0F0                           这回取它的高四位  5C and &H0F0=50
0055DBA2   |.  8A4D F7           |mov cl,byte ptr ss:[ebp-9]           把2放在CL中
0055DBA5   |.  02D1              |add dl,cl                             加起来吧 50+2=52  在VB中Chr(52)=R 这就是我们要的!
0055DBA7   |.  885418 FF         |mov byte ptr ds:[eax+ebx-1],dl         把52保存
0055DBAB   |.  46                |inc esi                               
0055DBAC   |.  A1 446D5600       |mov eax,dword ptr ds:[566D44]      
0055DBB1   |.  E8 626BEAFF       |call unpacked.00404718
0055DBB6   |.  3BF0              |cmp esi,eax                         
0055DBB8   |.  7E 05             |jle short unpacked.0055DBBF
0055DBBA   |.  BE 01000000       |mov esi,1
0055DBBF   |>  43                |inc ebx
0055DBC0   |.  4F                |dec edi
0055DBC1   |.^ 75 B2             \jnz short unpacked.0055DB75          去处理剩下的字符

经过这里我们得到了    R|\|<*#"
×××××××××××××××××××××××××××××××××××××××××××××××××



×××××××××××第二篇×××××××××××
总是找不到通过计算注册名得到注册码的地方
无论注册成功与否都没有提示!!!!
软件未注册可以用60次,
在OD中就以此为突破口,用Ultra StringReference查找,向上找可以跳过“使用次数的地方,找到一个循环,如下:
我操,这里竟然就是注册名产生注册注册码的地方:

日记用户名:wofan
加上“.cty”
成为:wofan.cty
通过计算这个字串得到注册码的中间数!!!!!!!!!

0055D737   |.  BA 01000000       mov edx,1
0055D73C   |>  8B35 44755600     /mov esi,dword ptr ds:[567544]                      ;  unpacked.00568F04
0055D742   |.  8B36              |mov esi,dword ptr ds:[esi]
0055D744   |.  0FB67416 FF       |movzx esi,byte ptr ds:[esi+edx-1]
0055D749   |.  8B8B 0C030000     |mov ecx,dword ptr ds:[ebx+30C]
0055D74F   |.  8B49 0C           |mov ecx,dword ptr ds:[ecx+C]
0055D752   |.  03F1              |add esi,ecx
0055D754   |.  0FAFF1            |imul esi,ecx
0055D757   |.  0175 F0           |add dword ptr ss:[ebp-10],esi
0055D75A   |.  42                |inc edx
0055D75B   |.  48                |dec eax
0055D75C   |.^ 75 DE             \jnz short unpacked.0055D73C

××××××××××××××××××××××××××××××××××
一个固定数:1E6EB04 设它为num
wofan.cty的ASCII码分别为:77 6F 66 61 6E 2E  63 74 79
 
(num+77)*num=a  保留低十六位
(num+6F)*num=b  保留低十六位
……
a+b+……=5A3699F4
××××××××××××××××××××××××××××××××××
0055D75E   |>  8B83 0C030000     mov eax,dword ptr ds:[ebx+30C]
0055D764   |.  FF70 0C           push dword ptr ds:[eax+C]
0055D767   |.  8B45 F0           mov eax,dword ptr ss:[ebp-10]
0055D76A   |.  5A                pop edx
0055D76B   |.  2BC2              sub eax,edx                          EAX=EAX-EDX=5A3699F4-1E6EB04=584FAEF0                        
0055D76D   |.  8D55 FC           lea edx,dword ptr ss:[ebp-4]
0055D770   |.  E8 37BCEAFF       call unpacked.004093AC                   这个Call 4 将584FAEF0变成有符号的十进制数

××××
得到584FAEF0的有符号的十进制数1481617136 (这个就是用来比较的中间数!!!)
×××××××

0055D775   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D77A   |.  8B00              mov eax,dword ptr ds:[eax]
0055D77C   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D77F   |.  E8 D00CF6FF       call unpacked.004BE454
0055D784   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D789   |.  8B00              mov eax,dword ptr ds:[eax]
0055D78B   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D78E   |.  BA B8D95500       mov edx,unpacked.0055D9B8                           ;  ASCII "regid"
0055D793   |.  E8 CC1CF6FF       call unpacked.004BF464
0055D798   |.  8D55 EC           lea edx,dword ptr ss:[ebp-14]
0055D79B   |.  8B08              mov ecx,dword ptr ds:[eax]
0055D79D   |.  FF51 60           call dword ptr ds:[ecx+60]                    
0055D7A0   |.  837D EC 00        cmp dword ptr ss:[ebp-14],0                    
0055D7A4   |.  75 51             jnz short unpacked.0055D7F7                  
0055D7A6   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D7AB   |.  8B00              mov eax,dword ptr ds:[eax]
0055D7AD   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D7B0   |.  E8 6F34F6FF       call unpacked.004C0C24
0055D7B5   |.  8D4D E8           lea ecx,dword ptr ss:[ebp-18]
0055D7B8   |.  BA C8D95500       mov edx,unpacked.0055D9C8                           ;  ASCII "60"
0055D7BD   |.  8BC3              mov eax,ebx
0055D7BF   |.  E8 74030000       call unpacked.0055DB38
0055D7C4   |.  8B45 E8           mov eax,dword ptr ss:[ebp-18]
0055D7C7   |.  50                push eax
0055D7C8   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D7CD   |.  8B00              mov eax,dword ptr ds:[eax]
0055D7CF   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D7D2   |.  BA B8D95500       mov edx,unpacked.0055D9B8                           ;  ASCII "regid"
0055D7D7   |.  E8 881CF6FF       call unpacked.004BF464
0055D7DC   |.  5A                pop edx
0055D7DD   |.  8B08              mov ecx,dword ptr ds:[eax]
0055D7DF   |.  FF91 B0000000     call dword ptr ds:[ecx+B0]
0055D7E5   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D7EA   |.  8B00              mov eax,dword ptr ds:[eax]
0055D7EC   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D7EF   |.  8B10              mov edx,dword ptr ds:[eax]
0055D7F1   |.  FF92 4C020000     call dword ptr ds:[edx+24C]
0055D7F7   |>  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D7FC   |.  8B00              mov eax,dword ptr ds:[eax]
0055D7FE   |.  8B40 5C           mov eax,dword ptr ds:[eax+5C]
0055D801   |.  BA D4D95500       mov edx,unpacked.0055D9D4                           ;  ASCII "regdata"
0055D806   |.  E8 591CF6FF       call unpacked.004BF464
0055D80B   |.  8D55 E4           lea edx,dword ptr ss:[ebp-1C]
0055D80E   |.  8B08              mov ecx,dword ptr ds:[eax]
0055D810   |.  FF51 60           call dword ptr ds:[ecx+60]
0055D813   |.  8B55 E4           mov edx,dword ptr ss:[ebp-1C]
0055D816   |.  8D4D F4           lea ecx,dword ptr ss:[ebp-C]
0055D819   |.  8BC3              mov eax,ebx
0055D81B   |.  E8 18030000       call unpacked.0055DB38             ××××看这个call unpacked.0055DB38将从wofan.cty中读取的假码,又进行了一次运算,所以前面我说了那个在制作注册机时陷阱
****************************************************************************
它将r<+,mnm,%$|  又变回了|<*-lol-/.|用它去与1481617136比较,相等则注册成功!
*****************************************************************************

0055D820   |.  A1 D86F5600       mov eax,dword ptr ds:[566FD8]
0055D825   |.  8B00              mov eax,dword ptr ds:[eax]


0055D849   |.  8B45 FC           mov eax,dword ptr ss:[ebp-4]
0055D84C   |.  8B55 F4           mov edx,dword ptr ss:[ebp-C]
0055D84F   |.  E8 1070EAFF       call unpacked.00404864               ××× 这个就是关键比较Call  6
0055D854   |.  0F84 0F010000     je unpacked.0055D969                 ×××跳走,就不会有60次限制了,但是修改是没用的。因为软件脱后就无法使用!
0055D85A   |.  8B45 F8           mov eax,dword ptr ss:[ebp-8]
0055D85D   |.  E8 86BCEAFF       call unpacked.004094E8
0055D862   |.  48                dec eax
0055D863   |.  7C 0D             jl short unpacked.0055D872
0055D865   |.  8B45 F8           mov eax,dword ptr ss:[ebp-8]
0055D868   |.  E8 7BBCEAFF       call unpacked.004094E8
0055D86D   |.  83F8 3C           cmp eax,3C                              3C就是十进制60
0055D870   |.  7E 50             jle short unpacked.0055D8C2
省略
0055D8EA   |.  8D45 F8           lea eax,dword ptr ss:[ebp-8]
0055D8ED   |.  E8 FE6BEAFF       call unpacked.004044F0
0055D8F2   |.  68 E4D95500       push unpacked.0055D9E4                              ;  ASCII "剩余"
0055D8F7   |.  FF75 F8           push dword ptr ss:[ebp-8]
0055D8FA   |.  68 F4D95500       push unpacked.0055D9F4                              ;  ASCII "次"






××××××××这个Call 4 将584FAEF0变成有符号的十进制数×××××××××××××××
004093AC   /$  56                push esi
004093AD   |.  89E6              mov esi,esp
004093AF   |.  83EC 10           sub esp,10
004093B2   |.  31C9              xor ecx,ecx
004093B4   |.  52                push edx
004093B5   |.  31D2              xor edx,edx
004093B7   |.  E8 A4FFFFFF       call unpacked.00409360            这一个Call 5要进去
004093BC   |.  89F2              mov edx,esi
004093BE   |.  58                pop eax
004093BF   |.  E8 84B1FFFF       call unpacked.00404548         
004093C4   |.  83C4 10           add esp,10
004093C7   |.  5E                pop esi
004093C8   \.  C3                retn

             ×××××  这一个Call 5要进去×××××××
省略一部分
00409364   |.  09C0              or eax,eax                         EAX=584FAEF0
00409366   |.  79 0E             jns short unpacked.00409376        没有符号就跳,这里就跳了
00409368   |.  F7D8              neg eax                           ( 如果不跳,就neg 一下,让它变成无符号
0040936A   |.  E8 07000000       call unpacked.00409376
0040936F   |.  B0 2D             mov al,2D                          再加上符号,2D就是“-”)
00409371   |.  41                inc ecx
00409372   |.  4E                dec esi
00409373   |.  8806              mov byte ptr ds:[esi],al
00409375   |.  C3                retn
00409376   |$  B9 0A000000       mov ecx,0A                         跳到这里,看这个&HA,就知道是在变换成十进制
0040937B   |>  52                push edx
0040937C   |.  56                push esi
0040937D   |>  31D2              /xor edx,edx
0040937F   |.  F7F1              |div ecx                           EAX=584FAEF0,让它不断Div &HA  
00409381   |.  4E                |dec esi
00409382   |.  80C2 30           |add dl,30                          余数 ADD 30变成ASCII形式
00409385   |.  80FA 3A           |cmp dl,3A                           然后与&H3D相比
00409388   |.  72 03             |jb short unpacked.0040938D         少于&H3D  跳到0040938D
0040938A   |.  80C2 07           |add dl,7                           否则就 再ADD 7
0040938D   |>  8816              |mov byte ptr ds:[esi],dl           少于&H3D,到这里,不ADD 7,直接送 byte ptr ds:[esi]
0040938F   |.  09C0              |or eax,eax                         商 或一下  到最后是 1 div A 商为0,余数为1,  0 or 0=0 表示循环结束
00409391   |.^ 75 EA             \jnz short unpacked.0040937D        不为零就循环
00409393   |.  59                pop ecx
00409394   |.  5A                pop edx
00409395   |.  29F1              sub ecx,esi
00409397   |.  29CA              sub edx,ecx
00409399   |.  76 10             jbe short unpacked.004093AB           
0040939B   |.  01D1              add ecx,edx                           
0040939D   |.  B0 30             mov al,30
0040939F   |.  29D6              sub esi,edx
004093A1   |.  EB 03             jmp short unpacked.004093A6
004093A3   |>  880432            /mov byte ptr ds:[edx+esi],al
004093A6   |>  4A                 dec edx
004093A7   |.^ 75 FA             \jnz short unpacked.004093A3
004093A9   |.  8806              mov byte ptr ds:[esi],al
004093AB   \>  C3                retn


原来是将它变成有符号的十进制数!!!!!
×××××××××××××××××××××××××××××××××××××××××




××××××××××××××这个就是关键比较Call  6×××××××××××××××××

00404867   |.  89C6              mov esi,eax                       1481617136
00404869   |.  89D7              mov edi,edx                       |<*-lol-/.|                    
0040486B   |.  39D0              cmp eax,edx
0040486D   |.  0F84 8F000000     je unpacked.00404902
00404873   |.  85F6              test esi,esi
00404875   |.  74 68             je short unpacked.004048DF
00404877   |.  85FF              test edi,edi
00404879   |.  74 6B             je short unpacked.004048E6
0040487B   |.  8B46 FC           mov eax,dword ptr ds:[esi-4]        1481
0040487E   |.  8B57 FC           mov edx,dword ptr ds:[edi-4]        |<*-
00404881   |.  29D0              sub eax,edx
00404883   |.  77 02             ja short unpacked.00404887
00404885   |.  01C2              add edx,eax
00404887   |>  52                push edx
00404888   |.  C1EA 02           shr edx,2
0040488B   |.  74 26             je short unpacked.004048B3
0040488D   |>  8B0E              /mov ecx,dword ptr ds:[esi]       31383431       
0040488F   |.  8B1F              |mov ebx,dword ptr ds:[edi]       |<*-的ASCII码
00404891   |.  39D9              |cmp ecx,ebx
00404893   |.  75 58             |jnz short unpacked.004048ED       不相等就死!!!!!!
00404895   |.  4A                |dec edx
00404896   |.  74 15             |je short unpacked.004048AD
00404898   |.  8B4E 04           |mov ecx,dword ptr ds:[esi+4]
0040489B   |.  8B5F 04           |mov ebx,dword ptr ds:[edi+4]
0040489E   |.  39D9              |cmp ecx,ebx
004048A0   |.  75 4B             |jnz short unpacked.004048ED
004048A2   |.  83C6 08           |add esi,8
004048A5   |.  83C7 08           |add edi,8
004048A8   |.  4A                |dec edx
004048A9   |.^ 75 E2             \jnz short unpacked.0040488D
004048AB   |.  EB 06             jmp short unpacked.004048B3


总结,程序在填入注册码后,将它变换成一个中间数1,存于.cty格式文件中,重启后,将注册名变换成一个中间数2,
同时将中间数1变换成中间数3,中间数2和3比较。

以下是注册机,我同时又跟踪了它的2.0Final版,发现两个版本的注册是有区别的!可惜的是,新版不过是老版去掉一些功能罢!
这些功能对于我来说,反而带来不便!如打开程序,竟然不是当天!!!等等不一而足,只是新版界面美丽些。

一并制作注册机
但是注册机就不发表了。
其目的是,不希望注册机扩散出去,如果你喜欢这个日记本,就交给作者15元吧,或者破了它。破解很辛苦,程序作者更辛苦!!!
切切切,不要拿我放在室名外的菜刀去杀人!!!
还是给一张注册机的图吧,以示完美!
21:32 2005-3-28
  by wofan[OCN]

最后给出一些用我的注册机生成的注册码:
注册名:wofan[OCN]  2.0Final注册码:d[|4.x     d[|m}b     d[.c       2.1.1版的注册码:d[|v./|       d[|.bc|     d[,x.
愿大家快乐!