18:10 2005-3-28
软件名称:天天日记本2.1.1
下载地址:http://tianyu717.yeah.net/(作者的家)
破解工具:Peid,Aspackdie,Olydbg1.1正式版,计算器,DeDe3.5
破解作者:wofan[OCN]
说明一点,软件脱壳后就不能保存日记了,也不能选择日期,日期定格在2003年,所以网上流传的那个补丁是没有用的!
软件介绍:天天日记本的特点:
★具有最为详尽的文字处理功能;
★优美的界面设置;
★内置多用户功能,可以多人使用;
★直接、简洁的管理窗口;
★完全绿色不给系统带来任何垃圾;
★支持Windows95/98/NT/2000/ME/XP;
★运行非常稳定,占用资源少。
天天日记本是一款共享软件,您可以自由发布和传播软件,未注册版本可以试用60次 。如果您对 它比较满意, 希望你能考虑注册这款软件。
每份人民币 15.00元 。
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.
愿大家快乐!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!